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 相关文章推荐
jQuery把表单元素变为json对象
Nov 06 Javascript
jquery获取复选框被选中的值
Apr 10 Javascript
JQuery调用绑定click事件的3种写法
Mar 28 Javascript
浅谈JavaScript 的执行顺序
Aug 07 Javascript
jQuery实现左侧导航模块的显示与隐藏效果
Jul 04 Javascript
jQuery图片前后对比插件beforeAfter用法示例【附demo源码下载】
Sep 20 Javascript
基于javascript实现数字英文验证码
Jan 25 Javascript
AngularJS中filter的使用实例详解
Aug 25 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
vue-router源码之history类的浅析
May 21 Javascript
vue v-for 使用问题整理小结
Aug 04 Javascript
如何通过JS实现日历简单算法
Oct 14 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
深入apache host的配置详解
2013/06/09 PHP
PHP判断IP并转跳到相应城市分站的方法
2015/03/25 PHP
WordPress中转义HTML与过滤链接的相关PHP函数使用解析
2015/12/22 PHP
深入讲解PHP的对象注入(Object Injection)
2017/03/01 PHP
『jQuery』.html(),.text()和.val()的概述及使用
2013/04/22 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
jQuery实现仿淘宝带有指示条的图片转动切换效果完整实例
2015/03/04 Javascript
angularjs学习笔记之简单介绍
2015/09/26 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
2016/01/13 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
JS中artdialog弹出框控件之提交表单思路详解
2016/04/18 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
微信小程序图片左右摆动效果详解
2019/07/13 Javascript
小程序外卖订单界面的示例代码
2019/12/30 Javascript
vue自定义插件封装,实现简易的elementUi的Message和MessageBox的示例
2020/11/20 Vue.js
[50:29]2014 DOTA2华西杯精英邀请赛 5 24 DK VS iG
2014/05/26 DOTA
合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友
2009/04/09 Python
python使用nntp读取新闻组内容的方法
2015/05/08 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
2015/08/10 Python
OpenCV-Python实现轮廓检测实例分析
2018/01/05 Python
Python自动化运维之Ansible定义主机与组规则操作详解
2019/06/13 Python
python 实现多线程下载m3u8格式视频并使用fmmpeg合并
2019/11/15 Python
Python爬虫实现vip电影下载的示例代码
2020/04/20 Python
Python接口自动化系列之unittest结合ddt的使用教程详解
2021/02/23 Python
CSS3动画:5种预载动画效果实例
2017/04/05 HTML / CSS
德国电子商城:ComputerUniverse
2017/04/21 全球购物
初中地理教学反思
2014/01/11 职场文书
质检部经理岗位职责
2014/02/19 职场文书
幼儿园元旦活动感言
2014/03/02 职场文书
学习雷锋演讲稿
2014/05/10 职场文书
党建工作汇报材料
2014/12/24 职场文书
立秋之描写立秋的作文(五年级)
2019/08/08 职场文书
七年级之开学家长寄语35句
2019/09/05 职场文书
创业计划书之家教中心
2019/09/25 职场文书
七年级写作指导之游记作文
2019/10/07 职场文书
关于python类SortedList详解
2021/09/04 Python