Google Map API更新实现用户自定义标注坐标


Posted in Javascript onJuly 29, 2009

演示地址: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 class="fgmap_markerMsg" id="cusMarkTip">'; 
markTip += '<h4>用户地图标注</h4>'; 
markTip += '<div id="mapTips"><p>当前经纬度:(' + custPoint.lat() + ',' + custPoint.lng() + ')<br />'; 
markTip += '是否将新位置设置为此商户的默认位置?</p>'; 
markTip += '<div class="MDB" style="text-align:center;"><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 class="fgmap_markerMsg">', 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 class="fgmap_markerMsg">', 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("对不起,您的浏览器不支持创建地图!"); 
} 
} 
})();
Javascript 相关文章推荐
利用js获取服务器时间的两个简单方法
Jan 08 Javascript
浅析JS中document对象的一些重要属性
Mar 06 Javascript
js事件监听机制(事件捕获)总结
Aug 08 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
Aug 19 Javascript
原生js实现tab选项卡切换
Mar 23 Javascript
JavaScript 中调用 Kotlin 方法实例详解
Jun 09 Javascript
JavaScript实现三级联动菜单实例代码
Jun 26 Javascript
Bootstrap4如何定制自己的颜色和风格
Feb 26 Javascript
详解微信JS-SDK选择图片遇到的坑
Aug 15 Javascript
解决微信小程序中的滚动穿透问题
Sep 16 Javascript
javascript绘制简单钟表效果
Apr 07 Javascript
从表单校验看JavaScript策略模式的使用详解
Oct 17 Javascript
JavaScript Konami Code 实现代码
Jul 29 #Javascript
JavaScript 获取事件对象的注意点
Jul 29 #Javascript
javascript CSS画图之基础篇
Jul 29 #Javascript
JQuery 表格操作(交替显示、拖动表格行、选择行等)
Jul 29 #Javascript
JavaScript 设计模式学习 Factory
Jul 29 #Javascript
JQuery UI皮肤定制
Jul 27 #Javascript
JavaScript 设计模式学习 Singleton
Jul 27 #Javascript
You might like
深入解析PHP内存管理之谁动了我的内存
2013/06/20 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
YII框架学习笔记之命名空间、操作响应与视图操作示例
2019/04/30 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
PhpStorm2020.1 安装 debug - Postman 调用的详细教程
2020/08/17 PHP
javascript import css实例代码
2008/07/18 Javascript
javascript获取鼠标点击元素对象(示例代码)
2013/12/20 Javascript
innerHTML在IE中报错解决方案
2014/12/15 Javascript
微信小程序 SocketIO 实例讲解
2016/10/13 Javascript
巧用Javascript的逻辑运算符
2016/12/02 Javascript
jQuery Validate让普通按钮触发表单验证的方法
2016/12/15 Javascript
js css自定义分页效果
2017/02/24 Javascript
Puppet的一些技巧
2018/09/17 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
迅速了解一下ES10中Object.fromEntries的用法使用
2019/03/05 Javascript
全面解析JavaScript Module模式
2020/07/24 Javascript
[49:31]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS BO3 第二场 1月29日
2021/03/11 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python如何求解两数的最大公约数
2018/09/27 Python
Python File(文件) 方法整理
2019/02/18 Python
Python学习笔记之文件的读写操作实例分析
2019/08/07 Python
贝嫂喜欢的婴儿品牌,个性化的婴儿礼物:My 1st Years
2017/11/19 全球购物
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
请用Python写一个获取用户输入数字,并根据数字大小输出不同信息的脚本
2014/05/20 面试题
幼儿园元旦家长感言
2014/02/27 职场文书
槐乡的孩子教学反思
2014/04/27 职场文书
租房安全协议书
2014/08/20 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
公司员工管理制度
2015/08/04 职场文书
篮球拉拉队口号
2015/12/25 职场文书
合作意向书范本
2019/04/17 职场文书
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
Axios代理配置及封装响应拦截处理方式
2022/04/07 Vue.js