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 相关文章推荐
JavaSript中变量的作用域闭包的深入理解
May 12 Javascript
javascript中的throttle和debounce浅析
Jun 06 Javascript
js随机生成网页背景颜色的方法
Feb 26 Javascript
RequireJS使用注意细节
May 15 Javascript
window.onload绑定多个事件的两种解决方案
May 15 Javascript
常用Javascript函数与原型功能收藏(必看篇)
Oct 09 Javascript
利用JQuery直接调用asp.net后台的简单方法
Oct 27 Javascript
javascript实现滑动解锁功能
Mar 22 Javascript
原生JS实现层叠轮播图
May 17 Javascript
解决layui数据表格table的横向滚动条显示问题
Sep 04 Javascript
VUE实现密码验证与提示功能
Oct 18 Javascript
如何正确理解vue中的key详解
Nov 02 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中的UNICODE 编码与解码
2013/06/29 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
PHP实现双链表删除与插入节点的方法示例
2017/11/11 PHP
Yii2.0实现的批量更新及批量插入功能示例
2019/01/29 PHP
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
JavaScript实现页面跳转的几种常用方式
2015/11/28 Javascript
浅谈js数据类型判断与数组判断
2016/08/29 Javascript
JS 对java返回的json格式的数据处理方法
2016/12/05 Javascript
javascript checkbox/radio onchange不能兼容ie8处理办法
2017/06/13 Javascript
vue父组件通过props如何向子组件传递方法详解
2017/08/16 Javascript
浅谈JS 数字和字符串之间相互转化的纠纷
2017/10/20 Javascript
vue的无缝滚动组件vue-seamless-scroll实例
2017/12/18 Javascript
jQuery仿移动端支付宝键盘的实现代码
2018/08/15 jQuery
js for终止循环 跳出多层循环
2018/10/04 Javascript
js中int和string数据类型互相转化实例
2019/01/16 Javascript
简单实现节流函数和防抖函数过程解析
2019/10/08 Javascript
JavaScript多种滤镜算法实现代码实例
2019/12/10 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
python基础知识小结之集合
2015/11/25 Python
python多线程方式执行多个bat代码
2016/06/07 Python
Python 处理数据的实例详解
2017/08/10 Python
Python语言描述KNN算法与Kd树
2017/12/13 Python
实例讲解python中的协程
2018/10/08 Python
Python3最长回文子串算法示例
2019/03/04 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
Python基于数列实现购物车程序过程详解
2020/06/09 Python
详解python中的lambda与sorted函数
2020/09/04 Python
2014年健康教育工作总结
2014/11/20 职场文书
小班上学期个人总结
2015/02/12 职场文书
缅怀先烈主题班会
2015/08/14 职场文书
2016教师节问候语
2015/11/10 职场文书
奇妙的 CSS shapes(CSS图形)
2021/04/05 HTML / CSS
HAM-2000摩机图
2021/04/22 无线电