首先引入GOOGLE MAP的JS文件
<script type="text/javascript" src="http://ditu.google.com/maps?file=api&v=3"></script>
以下为源代码
String.prototype.trim = function() {
return this.replace(/(^\s*)|(\s*$)/g, "");
};
String.prototype.empty = function() {
return this.trim() == "";
};
String.prototype.format = function() {
var args = arguments;
return this.replace(/\{(\d+)\}/g, function(m, i) {
return args[i];
});
};
Array.prototype.indexOf = function(v) {
for (var i = 0; i < this.length; i++) {
if (v == this[i]) {
return i;
}
}
return -1;
};
var GoogleMap = function(obj) {
this.Latitude = obj.Latitude || 116.407413;
this.Longtitude = obj.Longtitude || 39.904214;
this.Width = obj.Width || 400;
this.Height = obj.Height || 300;
this.Html = obj.Html || null;
this.AllowSearch = obj.Search || false;
this.Map = null;
this.Markers = [];
this.Container = obj.Container || null;
this.ScrollWheelZoom = obj.ScrollWheelZoom || false;
this.LargeMapControl = obj.LargeMapControl || false;
this.MapTypeControl = obj.MapTypeControl || false;
this.OverviewMap = obj.OverviewMap || false;
this.obj = null;
this.Width = this.Width <= 400 ? 400 : this.Width;
this.Height = this.Height <= 300 ? 300 : this.Height;
this.Id = obj.Id || 'google{0}'.format(Math.ceil(Math.random() * 10000));
this.Geocoder = null;
this.init();
};
GoogleMap.prototype = {
addEvent: function(o, a, b) {
o.attachEvent ? o.attachEvent('on' + a, function() {
b.call(o)
}) : o.addEventListener(a, b, false)
},
loadMap: function() {
var $ = this;
if ($.Map) return;
if (!$.obj.innerHTML.empty()) return;
var o = document.createElement('div');
o.style.cssText = 'width:{0}px;height:{1}px;border:1px solid #a5bfdd'.format($.Width, $.Height);
$.obj.appendChild(o);
$.Map = new GMap(o);
var myCenter = new GPoint($.Latitude, $.Longtitude);
$.Map.centerAndZoom(myCenter, 8);
//创建带有可在四个方向平移、放大、缩小的按钮,以及缩放滑块的控件。
if ($.LargeMapControl) $.Map.addControl(new GLargeMapControl());
//创建带有切换地图类型的按钮的控件。GMapTypeControl
if ($.MapTypeControl) $.Map.addControl(new GMenuMapTypeControl());
if ($.OverviewMap) $.Map.addControl(new GOverviewMapControl());
//设置地图支持滚轮
if ($.ScrollWheelZoom) $.Map.enableScrollWheelZoom();
},
icon: function() {
var c = new GIcon();
c.image = "http://maps.google.com/mapfiles/ms/micons/red-dot.png";
c.shadow = "http://maps.google.com/mapfiles/ms/micons/msmarker.shadow.png";
c.iconSize = new GSize(32, 32);
c.shadowSize = new GSize(37, 34);
c.iconAnchor = new GPoint(9, 34);
c.infoWindowAnchor = new GPoint(9, 2);
c.infoShadowAnchor = new GPoint(18, 25);
return c;
},
createMarker: function(html, show, latitude, longtitude) {
var $ = this;
var ico = $.icon();
var point = new GPoint(longtitude, latitude);
var marker = new GMarker(point, ico);
GEvent.addListener(marker, "click", function() {
marker.openInfoWindowHtml(html);
});
$.Map.addOverlay(marker);
if (show) marker.openInfoWindowHtml(html);
return marker;
},
init: function() {
var $ = this;
if (!$.Container) {
alert('容器不存在!');
return;
}
var o = document.getElementById($.Container);
if (!o) {
alert('容器不存在!');
return;
}
$.obj = o;
$.iconOr = GoogleMap.icon = $.icon();
$.loadMap();
$.createMarker($.Html, true, $.Latitude, $.Longtitude);
o.parentNode.style.width = $.Width + 'px';
if ($.AllowSearch) {
$.Geocoder = new GClientGeocoder();
var s = document.createElement('p');
o.appendChild(s);
var k = document.createElement('input');
k.setAttribute('type', 'text');
k.style.cssText = 'border:1px solid #a5bfdd;width:{0}px;height:16px;margin-top:10px'.format($.Width - 50);
var d = document.createElement('input');
d.setAttribute('type', 'button');
d.style.cssText = 'border:1px solid #a5bfdd;width:40px;float:right;height:20px;margin-top:10px;cursor:pointer;background:#b1d5ff';
d.value = '搜索';
var r = document.createElement('p');
r.style.cssText = 'margin-top:10px';
r.setAttribute('id', 'search{0}'.format($.Id));
o.appendChild(r);
s.appendChild(d);
s.appendChild(k);
$.result = r;
d.onclick = function() {
if (k.value.empty()) {
alert('请输入关键字!');
return;
}
$.Geocoder.getLocations(k.value.trim(), function(result) {
if (result.Status.code != G_GEO_SUCCESS) return; ;
var icon = new GIcon(G_DEFAULT_ICON);
var lat, lng, point, address, marker;
for (var i = 0; i < result.Placemark.length; i++) {
lat = result.Placemark[i].Point.coordinates[1]; // lat
lng = result.Placemark[i].Point.coordinates[0]; // lng
address = result.Placemark[i].address; // 地址
point = new GLatLng(lat, lng);
point = point.toString().replace('(', '').replace(')', '');
r.innerHTML = (address + " <small>" + point.toString() + "</small><br />");
var myCenter = new GPoint(lat, lng);
$.Map.centerAndZoom(myCenter, 8);
$.createMarker(address.replace(/,/g, '<br />'), false, lat, lng);
var lati = document.getElementById('Latitude');
var lont = document.getElementById('Longtitude');
if (lati) lati.value = lat;
if (lont) lont.value = lng;
}
})
};
}
}
}
使用方法
var map = new GoogleMap({
//地图宽度
Width: 600,
//地图高度
Height: 500,
//纬度
Latitude: 42.648486,
//经度
Longtitude: -71.134868,
//是否带搜索
Search: true,
//地图支持滚轮
ScrollWheelZoom: true,
//带有可在四个方向平移、放大、缩小的按钮,以及缩放滑块的控件
LargeMapControl: true,
//带有切换地图类型的按钮的控件
MapTypeControl: true,
//右下角小地图
OverviewMap:true,
//标注的HTML
Html: 'Phillips Academy Andover',
//地图容器ID
Container: 'xx'
});
多个标注
map.createMarker('North Reading', false, 42.5750833, -71.0854325);
map.createMarker('xxx Reading', false, 42.5750833, -71.2854325);
HTML
经度:<input id="Latitude" type="text" /> 纬度:<input id="Longtitude" type="text" />
<div id="xx"></div>
这是我一个项目中专用的需求.非通用.欢迎拍砖
本文为原创,虽然是垃圾代码,转载时请注明出处.谢谢