手机
当前位置:查字典教程网 >编程开发 >Javascript教程 >Google Map API更新实现用户自定义标注坐标
Google Map API更新实现用户自定义标注坐标
摘要:演示地址:http://www.yaohaixiao.com/effects/google-map.html复制代码代码如下:if(type...

演示地址:http://www.yaohaixiao.com/effects/google-map.html

复制代码 代码如下:

if(typeof GoogleMap === 'undefined'){

var GoogleMap = {};

}

(function(){

if (!document.getElementById("fgmap")) {

return false;

}

else {

// 是否可创建Google地图控件

var isCompatible = new GBrowserIsCompatible();

if (isCompatible) {

var mapContainer = document.getElementById("fgmap");

// 创建GoogleMAP地图实例

var map = new GMap2(mapContainer);

// 地图默认的比例尺级别

var perviewLevel = 14;

// 大的地图缩放级别控件

var largeMapControl = new GLargeMapControl();

// 地图缩略图控件

var overviewMapControl = new GOverviewMapControl();

// 比例尺控件

var scaleControl = new GScaleControl();

// 地图类形选择控件

var mapTypeControl = new GMapTypeControl();

// 地址-坐标转换器

var geocoder = new GClientGeocoder();

// 上一次的查询地址

var lastAddress = '';

// 上一次的查询坐标

var lastPoint = null;

// 最后一个创建的标记控件

var lastMarker = null;

// 用户标记的最后一个坐标点

var cusLastPoint = null;

GoogleMap.mapMsg = [];

// 创建地图

GoogleMap.Map = function(lat, lng){

var point = new GLatLng(lat, lng);

map.addMapType(G_PHYSICAL_MAP);

map.setCenter(point, perviewLevel);

map.enableDoubleClickZoom();

map.enableScrollWheelZoom();

map.enableContinuousZoom();

map.addControl(largeMapControl)

map.addControl(overviewMapControl);

map.addControl(mapTypeControl);

map.addControl(scaleControl);

};

// 创建标记

GoogleMap.createMarker = function(latlng, markerOptions){

var marker = markerOptions ? new GMarker(latlng, markerOptions) : new GMarker(latlng);

lastMarker = marker;

return marker;

};

// 自定义标记选项

/* =========================================================================================================================================================================================

参数说明:

常数:G_DEFAULT_ICON 标记使用的默认图标。

image String 图标的前景图像 URL。

shadow String 图标的阴影图像 URL。

iconSize GSize 图标前景图像的像素大小。

shadowSize GSize 阴影图像的像素大小。

iconAnchor GPoint 此图标在地图上的锚定点相对于图标图像左上角的像素坐标。

infoWindowAnchor GPoint 信息窗口在此图标上的锚定点相对于图标图像左上角的像素坐标。

printImage String 打印地图所用的前景图标图像的 URL。其大小必须与 image 提供的主图标图像的大小相同。

mozPrintImage String 用 Firefox/Mozilla 打印地图时所用的前景图标图像的 URL。其大小必须与 image 提供的主图标图像的大小相同。

printShadow String 打印地图时所用的阴影图像的 URL。由于大多数浏览器都无法打印 PNG 图像,所以图像格式应该为 GIF。

transparent String 在 Internet Explorer 中捕获点击事件时,所用的透明前景图标图像的 URL。此图像应是具有 1% 不透明性的 24 位 PNG 格式的主图标图像,但其大小和形状同主图标相同。

imageMap Array of Number 表示图像地图 x/y 坐标的整数数组,用它指定浏览器(非 Internet Explorer)中图标图像的可点击部分。

maxHeight Integer 指定拖动标记时视觉上垂直“上升”的距离(以像素表示)。(自 2.79 开始)

dragCrossImage String 指定拖动图标时十字交叉图像的 URL。(自 2.79 开始)

dragCrossSize GSize 指定拖动图标时十字交叉图像的像素大小。(自 2.79 开始)

dragCrossAnchor GPoint 指定拖动图标时十字交叉图像的像素坐标偏移量(相对于 iconAnchor)。(自 2.79 开始)

========================================================================================================================================================================================= */

GoogleMap.setCustomIcon = function(IconOptions){

var myIcon = new GIcon(G_DEFAULT_ICON), i;

for (i in IconOptions) {

switch (i) {

case 'iconSize':

case 'shadowSize':

case 'dragCrossSize':

myIcon[i] = new GSize(IconOptions[i][0], IconOptions[i][1]);

break;

case 'iconAnchor':

case 'infoWindowAnchor':

case 'infoShadowAnchor':

case 'dragCrossAnchor':

myIcon.iconAnchor = new GPoint(IconOptions[i][0], IconOptions[i][1]);

break;

default:

myIcon[i] = IconOptions[i];

break;

}

}

return myIcon;

};

// 用户自定义标注

GoogleMap.customMarkPoint = function(){

var marker = null;

var markPoint = cusLastPoint ? new GLatLng(cusLastPoint[0],cusLastPoint[1]) : new GLatLng(lastPoint[0],lastPoint[1]);

var markOptions = {

icon: GoogleMap.setCustomIcon({

image: 'http://www.yaohaixiao.com/effects/img/icon13.png'

}),

draggable: true

};

marker = GoogleMap.createMarker(markPoint, markOptions);

GEvent.addListener(marker, "dragstart", function(){

map.closeInfoWindow();

});

GEvent.addListener(marker, "dragend", function(){

var custPoint = marker.getPoint();

var markTip = '<div id="cusMarkTip">';

markTip += '<h4>用户地图标注</h4>';

markTip += '<div id="mapTips"><p>当前经纬度:(' + custPoint.lat() + ',' + custPoint.lng() + ')<br />';

markTip += '是否将新位置设置为此商户的默认位置?</p>';

markTip += '<div><button id="MapOK" ';

marker.openInfoWindowHtml(markTip);

});

map.addOverlay(marker);

};

// 保存用户自定义坐标

GoogleMap.MapOk = function(){

var savedPoint = lastMarker.getPoint();

var lat = savedPoint.lat(), lng = savedPoint.lng();

var markTip = document.getElementById('cusMarkTip');

markTip.innerHTML = '<h4>正在上传您所保存的坐标信息...</h4>';

if (timer) {

clearTimeout(timer);

}

var timer = setTimeout(function(){

map.clearOverlays();

var marker = GoogleMap.createMarker(savedPoint);

if (GoogleMap.mapMsg) {

GEvent.addListener(marker, "click", function(){

var msg = '<span>', j;

msg += '<h4>' + GoogleMap.mapMsg[1][0] + '</h4>';

for (var j = 1; j < GoogleMap.mapMsg[1].length; j++) {

msg += GoogleMap.mapMsg[1][j] + "<br />";

}

msg += "</span>";

map.openInfoWindowHtml(savedPoint, msg);

});

}

map.addOverlay(marker);

map.setCenter(savedPoint);

cusLastPoint = [lat,lng];

}, 2000);

};

// 取消用户自定义坐标操作

GoogleMap.MapCancel = function(){

map.removeOverlay(lastMarker);

map.closeInfoWindow();

};

// 通过地址获得坐标

GoogleMap.getAddresslatlng = function(response){

var place = response.Placemark[0];

var point = new GLatLng(place.Point.coordinates[1], place.Point.coordinates[0]);

return [place.Point.coordinates[1], place.Point.coordinates[0], point, place];

};

// 标注坐标和相应的说明信息

GoogleMap.MarkerMap = function(lat, lng){

var marker = null;

var point = new GLatLng(lat, lng);

GoogleMap.Map(lat, lng);

marker = this.createMarker(point);

if (GoogleMap.mapMsg) {

GEvent.addListener(marker, "click", function(){

var msg = '<span>', j;

msg += '<h4>' + GoogleMap.mapMsg[1][0] + '</h4>';

for (var j = 1; j < GoogleMap.mapMsg[1].length; j++) {

msg += GoogleMap.mapMsg[1][j] + "<br />";

}

msg += "</span>";

map.openInfoWindowHtml(point, msg);

});

}

map.addOverlay(marker);

};

// 将查询地址添加到地图

GoogleMap.addAddressToMap = function(response){

map.clearOverlays();

if (!response || response.Status.code != 200) {

alert("对不起, 我们解析不到该地址的经纬度坐标!");

}

else {

var marker = null, point = GoogleMap.getAddresslatlng(response);

var address = point[3].address, lat = point[0], lng = point[1];

GoogleMap.mapMsg = (GoogleMap.mapMsg !== '' && (lastAddress === GoogleMap.mapMsg[0])) ? GoogleMap.mapMsg : [address, [point[3].address, ('经度:' + point[1]), ('纬度:' + point[0])]];

GoogleMap.MarkerMap(lat, lng);

lastPoint = [lat,lng];

}

};

// 将查询坐标添加到地图

GoogleMap.addPointToMap = function(cPoint){

map.clearOverlays();

var marker = null, lat = cPoint[0], lng = cPoint[1];

GoogleMap.MarkerMap(lat, lng);

lastPoint = [lat,lng];

};

// 通过地址/坐标将Marker显示到地图上

GoogleMap.showLocation = function(cPoint){

if (typeof cPoint === 'string') {

geocoder.getLocations(cPoint, this.addAddressToMap);

lastAddress = cPoint;

}

else{

GoogleMap.addPointToMap(cPoint);

}

};

GEvent.addListener(window, 'unload', GUnload);

}

else {

alert("对不起,您的浏览器不支持创建地图!");

}

}

})();

【Google Map API更新实现用户自定义标注坐标】相关文章:

jQuery实现返回顶部效果的方法

javascript实现table表格隔行变色的方法

下拉菜单既可以选择,又可以自己填写

jQuery实现表格行上移下移和置顶的方法

JQuery+CSS实现图片上放置按钮的方法

JQuery实现动态添加删除评论的方法

javascript搜索框效果实现方法

JavaScript实现表格点击排序的方法

JS函数实现鼠标指向图片后显示大图代码

js设置document.domain实现跨域的注意点分析

精品推荐
分类导航