谷歌地图
谷歌地图最新版本不仅要收费,而且还要翻墙,及其不稳定。因此我们使用了在中国地区的老版本谷歌地图。api与新版的基本一样,而且是免费试用。
api引入地址:
http://ditu.google.cn/maps/api/js?v=3&sensor=false&language=en&callback=initializegooglemap
谷歌地图初始化时,纬度在前,经度在后,百度地图相反。
如果是要中文地图,language=zh-CN
典型用法
//初始化
var mapOptions = {
center: new google.maps.LatLng(42.882688, -90.579412),
zoom: 3,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
var googleMap = new google.maps.Map($('.map-content')[0], mapOptions);
//设置中心点
var myLatlng = new google.maps.LatLng(point.lat, point.lng);
this.map.setCenter(myLatlng);
//设置级别
this.map.setZoom(15);
//显示infoWindow
google.maps.event.addListener(marker, 'click', (function(){
var currentMarker = marker;
return function(e){
_this._showInfoWindow(e, currentMarker);
}
})());
_showInfoWindow: function(e, marker){
if(marker.infoWindowOpend){
return;
}
var infowindow = new google.maps.InfoWindow({
content: pageManager.getMarkerInfo(marker.IOTMARKERINDEX)
});
google.maps.event.addListener(infowindow, 'closeclick', function(event) {
marker.infoWindowOpend = false;
});
infowindow.open(this.map, marker);
marker.infoWindowOpend = true;
}
//fitBounds
google.maps.event.addListener(googleMap, 'bounds_changed', function(){
if(_this.boundsInited){
return;
}
_this.boundsInited = true;
var currentBounds;
var markerPosition;
var marker;
var point;
var icon;
for(var i = 0; i < points.length; i++){
point = points[i];
icon = _this.getIconByType(point.type);
//加入marker
marker = new google.maps.Marker({
position: new google.maps.LatLng(point.lat, point.lng),
map: googleMap,
icon: icon //icon传图片地址即可
});
_this.markers.push(marker);
currentBounds = googleMap.getBounds();
markerPosition = marker.getPosition();
if(!currentBounds.contains(markerPosition)){
currentBounds = currentBounds.extend(markerPosition);
}
}
googleMap.fitBounds(currentBounds);
});
//Marker跳动
marker.setAnimation(google.maps.Animation.BOUNCE);
setTimeout(function(){
marker.setAnimation(null);
}, 1000);
绘制一个区域
首先需要加入控件:http://ditu.google.cn/maps/api/js?v=3&sensor=false&language=en&libraries=drawing
&callback=initializegooglemap
this.editRectangle && this.editRectangle.setMap(null); //删除以前的区域
var leftBottom = {
lat: 29.5549126,
lng: 106.5485537
}; //左下点
var rightTop = {
lat: 27.5549126,
lng: 105.5485537
}; //右上点
var rectangle = new google.maps.Rectangle({
strokeColor: '#1a92cc',
strokeOpacity: 0.5,
strokeWeight: 4,
fillColor: '#6ed0ff',
fillOpacity: 0.5,
map: _this.map,
bounds: new google.maps.LatLngBounds(new google.maps.LatLng(leftBottom.lat, leftBottom.lng), new google.maps.LatLng(rightTop.lat, rightTop.lng))
});
this.map.fitBounds(rectangle.getBounds());
添加绘制控件
首先需要加入控件:http://ditu.google.cn/maps/api/js?v=3&sensor=false&language=en&libraries=drawing
&callback=initializegooglemap
var drawingManager = new google.maps.drawing.DrawingManager({
drawingMode: google.maps.drawing.OverlayType.MARKER,
drawingControl: false,
circleOptions: {
fillColor: '#ffff00',
fillOpacity: 1,
strokeWeight: 5,
clickable: false,
editable: true,
zIndex: 1
}
});
drawingManager.setMap(googleMap);
drawingManager.addListener('rectanglecomplete', function(rectangle){
rectangle.setEditable(true);
rectangle.setDraggable(true);
drawingManager.setDrawingMode(null);
_this.rectangle = rectangle;
_this.isDrawed = true;
});
drawingManager.setDrawingMode(google.maps.drawing.OverlayType.RECTANGLE);
//获取区域的GPS坐标
var rectangle = this.rectangle;
var gpsString = rectangle.getBounds().toString().replace(/\(|\)|\s/g, '').split(',');
if(gpsString.length < 4){
return null;
}
var finallyResults = [];
//google返回的两个点是左下|右上,而且点是纬度在前,精度在后。要转为精度在前,纬度在后,四个点顺序为左上|左下|右下|右上
finallyResults.push(gpsString[1] + ',' + gpsString[2]);
finallyResults.push(gpsString[1] + ',' + gpsString[0]);
finallyResults.push(gpsString[3] + ',' + gpsString[0]);
finallyResults.push(gpsString[3] + ',' + gpsString[2]);
return (finallyResults);