当前位置: 首页 > 图文教程 > 网络编程 > Javascript > Google Map API更新实现用户自定义标注坐标

Javascript
javascript 写类方式之九
javascript 写类方式之十
javascript 浏览器判断 绑定事件 arguments 转换数组 数组遍历
jquery BS,dialog控件自适应大小
javascript 面向对象思想 附源码
js 日期转换成中文格式的函数
JavaScript 对象、函数和继承
JavaScript 解析读取XML文档
javascript获取表格 td 中的内容
javascript xml为数据源的下拉框控件
jQuery 1.3 和 Validation 验证插件1.5.1
javascript 字符 Escape,encodeURI,encodeURIComponent
jquery text,radio,checkbox,select操作实现代码
JavaScript 继承的实现
JS 数组 移除 实现代码
javascript eval()应用实例 select
javascript 焦点的两个问题
JS 巧妙获取剪贴板数据 Excel数据的粘贴
Jquery 组合form元素为json格式,asp.net反序列化
window.onload 加载完毕的问题及解决方案(上)

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


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-09-12   浏览: 304 ::
收藏到网摘: n/a

由于工作需要,又要开始看Google Map API 代码,今天再把我之前的GoogleMap类,又更新了下,加了个简单的用户自定义标注坐标的功能。看看吧(代码没怎么优化,别见笑) 演示地址: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("对不起,您的浏览器不支持创建地图!");
}
}
})();