Google map v3 using simple tool file google.map.util.js v 1.0

时间:2023-01-19 12:46:58
/**
* GOOGLE地图开发使用工具
* @author BOONYACHENGDU@GMAIL.COM
* @date 2013-08-23
* @notice 地图容器的(div)z-index不能小于(lt)0,否则鼠标地图无法进行地图操作(可以看到地图,不过你会万分苦恼(you will be Extremely distressed))
*/
(function(){
window.map={};
window.lineFeature=null;
window.markers=[];
window.infoWindow=null;
window.GoogleUtil={};
GoogleUtil={
CONSTANT:{
mapkey:'AIzaSyAY-HsXXPsBUqsbQLDFO8kpNWLANwH0E7k',
container:"map",
DEFAULT_ZOOM:12,
zoomAddFeature:19,
centerLat:30.65721817,
centerLng:104.06594494,
mapstatus:false,
isnewMap:false,
ZOOM_MAX:19,
ZOOM_MIN:1,
markerSize:32
},
/**
* 控制地图显示范围为中国
*/
mapShowBounds:function(){
var strictBounds = new google.maps.LatLngBounds(
new google.maps.LatLng(14.48003790418668, 66.28120434863283),
new google.maps.LatLng(54.44617552862156, 143.71284497363283)
);
google.maps.event.addListener(map, 'dragend',function() {
if (strictBounds.contains(map.getCenter())) return;
var c = map.getCenter(),
x = c.lng(),
y = c.lat(),
maxX = strictBounds.getNorthEast().lng(),
maxY = strictBounds.getNorthEast().lat(),
minX = strictBounds.getSouthWest().lng(),
minY = strictBounds.getSouthWest().lat();
if (x < minX) x = minX;
if (x > maxX) x = maxX;
if (y < minY) y = minY;
if (y > maxY) y = maxY;
map.setCenter(new google.maps.LatLng(y, x));
});
},
/**
* 控制地图的缩放级别
*/
limitShowMapZoom:function(zoom){
this.CONSTANT.zoomMax=zoom;
var limitedZoom=this.CONSTANT.zoomMax;
google.maps.event.addListener(map, 'zoom_changed',function() {
if (map.getZoom() < limitedZoom) map.setZoom(limitedZoom);
});
},
/**
* 异步加载谷歌API
*/
loadScript:function(){
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?v=3&key="+this.CONSTANT.mapkey+"&sensor=false&libraries=drawing,places";
document.body.appendChild(script);
},
/**
* 谷歌街道
*/
initStreetMap:function(key){
this.CONSTANT.mapkey=key|| this.CONSTANT.mapkey;
var mapOptions = {
center: new google.maps.LatLng(GoogleUtil.CONSTANT.centerLat,GoogleUtil.CONSTANT.centerLng),
zoom: this.CONSTANT.DEFAULT_ZOOM,
panControl: true,
zoomControl: true,
mapTypeControl: false,
scaleControl: true,
scrollwheel:true,
draggable:true,
overviewMapControl: true,
streetViewControl:true,
mapTypeId: google.maps.MapTypeId.ROADMAP,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.ZOOM_PAN,
position: google.maps.ControlPosition.TOP_LEFT
}
};
map = new google.maps.Map(document.getElementById(this.CONSTANT.container),mapOptions);
},
/**
* 谷歌卫星
*/
initSatelliteMap:function(key){
this.CONSTANT.mapkey=key|| this.CONSTANT.mapkey;
var mapOptions = {
center: new google.maps.LatLng(GoogleUtil.CONSTANT.centerLat,GoogleUtil.CONSTANT.centerLng),
zoom: this.CONSTANT.DEFAULT_ZOOM,
panControl: true,
zoomControl: true,
mapTypeControl: false,
scrollwheel:true,
draggable:true,
scaleControl: true,
overviewMapControl: true,
mapTypeId: google.maps.MapTypeId.SATELLITE,
navigationControlOptions: {
style: google.maps.NavigationControlStyle.ZOOM_PAN,
position: google.maps.ControlPosition.TOP_LEFT
}
};
map = new google.maps.Map(document.getElementById(this.CONSTANT.container),mapOptions);
},
/**
* 居中或缩放
*/
centerAndZoom:function(latlng,zoom){
if(latlng) map.setCenter(latlng);
if(zoom) map.setZoom(zoom);
},
/**
* 获取图片对象
*/
getIcon:function(imageUrl,size){
var imgSize=size||32;
var offSize=imgSize/2;
var defaultSize=new google.maps.Size(imgSize, imgSize);
var myIcon={
url: imageUrl,
size: defaultSize,
scaledSize:new google.maps.Size(imgSize,imgSize),
origin: new google.maps.Point(0,0),
anchor: new google.maps.Point(offSize,offSize)
};
return myIcon;
},
/**
* 创建一个地图bounds对象
* @param points
*/
createBounds:function(points){
if(points) {
var bounds=new google.maps.LatLngBounds();
for ( var i = 0; i < points.length; i++) {
var point=points[i];
if(point){
bounds.extend(point);
}
}
return bounds;
}
return null;
},
/**
* 设置适合的地图边界范围Bounds
* @param points
*/
panToBounds:function(points){
if(points){
var bounds=this.createBounds(points);
if(bounds) map.panToBounds(bounds);
}
},
/**
* 设置合适的覆盖物显示范围(覆盖物聚合)
*/
getViewport:function(points){
if(points){
var bounds=this.createBounds(points);
if(bounds) {
map.fitBounds(bounds);
}
}
}
}; var iterator=0; GoogleUtil.tools={
/**
* 创建信息窗体
*/
createInfoWindow:function(latlng,htmlContent){
var infowindow = new google.maps.InfoWindow({
content: htmlContent,
position:latlng,
disableAutoPan:false
});
return infowindow;
},
/**
* 添加信息窗体
*/
addInfoWindow:function(latlng,htmlContent,isCenter){
if(!infoWindow){
infoWindow=this.createInfoWindow(latlng, htmlContent);
}else{
infoWindow.close();
infoWindow.setPosition(latlng);
infoWindow.setContent(htmlContent);
}
infoWindow.open(map);
if(isCenter) map.setCenter(latlng);
},
/**
* 创建标注
*/
createMarker:function(id,title,point,icon){
var marker = new google.maps.Marker({
position: point,
map: map,
icon:icon,
id:id
});
marker.id=id;
marker.setTitle(title);
return marker;
},
/**
* 添加标注
*/
addMarker:function(id,title,point,icon){
var marker =this.createMarker(id,title,point,icon);
markers.push(marker);
marker.setMap(map);
return marker;
},
/**
* 批量添加标注
*/
addMarkers:function(points){
if(points){
for ( var i = 0; i < points.length; i++) {
var point=points[i];
this.addMarker(point);
}
}
},
/**
* 添加跟踪轨迹线条
*/
addLineFeature:function(id,points,style){
var lineSymbol = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
//scale: 2,
strokeColor: 'red'
};
var defaultStyle={
path: points,
icons: [{
icon: lineSymbol,
offset: '0%'
}],
map: map
};
lineFeature = new google.maps.Polyline(style||defaultStyle);
lineFeature.id=id;
lineFeature.track=id;
markers.push(lineFeature);
return lineFeature;
},
/**
* 添加折线(轨迹,包括起点、终点)
*/
addLineFeatureAndStartAndEndPoint:function(spObj,points, startImageUrk,endImageUrk,lineStyle){
var len=points.length;
var index =len - 1;
var startPoint = points[0];
var endPoint =points[index];
var startIcon = GoogleUtil.getIcon(startImageUrk,20);
var endIcon = GoogleUtil.getIcon(endImageUrk,20);
this.addMarker("start", spObj.start, startPoint, startIcon);
this.addMarker("end", spObj.end, endPoint, endIcon);
if(len>=2){
var d=(len/2)+"";
d=parseInt(d);
GoogleUtil.centerAndZoom(points[d],12);
}
this.addLineFeature("track_line",points,lineStyle);
},
/**
* 标注动画
*/
markerAnimate:{
dropSetTimeout:{
drop:function(points){
iterator=0;
for (var i = 0; i < points.length; i++) {
setTimeout(function() {
GoogleUtil.tools.markerAnimate.dropSetTimeout.addMarker(points);
}, i * 200);
}
},
addMarker:function(points){
markers.push(new google.maps.Marker({
position: points[iterator],
map: map,
draggable: false,
animation: google.maps.Animation.DROP
}));
iterator++;
}
}
},
/**
* 轨迹操作
*/
track:{
/**
* 添加轨迹线条
*/
addLineTrack:function(points){
if(points){
var lineCoordinates=[];
for ( var i = 0; i < points.length; i++) {
var latlng=new google.maps.LatLng(30.65721817, 104.06594494);
lineCoordinates.push(latlng);
}
var lineSymbol = {
path: google.maps.SymbolPath.FORWARD_CLOSED_ARROW,
//scale: 2,
strokeColor: 'red'
};
lineFeature = new google.maps.Polyline({
path: lineCoordinates,
icons: [{
icon: lineSymbol,
offset: '0%'
}],
map: map
});
lineFeature.id="track_line";
}
},
/**
* 轨迹回放操作
*/
operate:{
count:0,
object:null,
addListener:function(){
var count=this.count;
var animate=window.setInterval(function() {
count = (count + 1) % 200;
GoogleUtil.tools.operate.count=count;
var icons = line.get('icons');
icons[0].offset = (count / 2) + '%';
line.set('icons', icons);
//终点停车
if((count / 2)>=99){
clearInterval(this);
}
}, 20);
this.object=animate;
},
play:function(){
this.count=0;
this.addListener();
},
replay:function(){
this.addListener();
},
pause:function(){
if(this.object)clearInterval(this.object);
},
stop:function(){
if(this.object)clearInterval(this.object);
this.count=0;
}
}
},
getOverlayByNodeId:function(id,value){
for (var i = 0; i < markers.length; i++) {
var marker=markers[i];
if(marker[id]==value){
return marker;
}
}
return null;
},
/**
* 删除或显示覆盖物
*/
deleteOrShowMarkerOverlayers:function(map){
for (var i = 0; i < markers.length; i++) {
if(map==null) markers[i].setVisible(false);
markers[i].setMap(map);
}
if(map==null) markers = [];
},
/**
* 删除轨迹
*/
deleteTrack:function(){
if(lineFeature){
lineFeature.setVisible(false);
lineFeature.setMap(null);
}
},
/**
* 移除所有覆盖物
*/
removeAllOverlays:function(){
for (var i = 0; i < markers.length; i++) {
markers[i].setVisible(false);
markers[i].setMap(map);
}
markers = [];
},
/**
* 移除一个覆盖物
*/
removeOverlay:function(propertyName,value){
if(value){
for (var i = 0; i < markers.length; i++) {
var marker=markers[i];
if(marker[propertyName]==value){
markers[i].setVisible(false);
markers[i].setMap(map);
}
}
}
if(propertyName=="track"||propertyName=="track_line"){
if(lineFeature){
lineFeature.setVisible(false);
lineFeature.setMap(null);
lineFeature=null;
}
}
},
/**
* 显示或隐藏标注
*/
isToShowMarkers:function(markers,bool){
if(markers){
for (var i = 0; i < markers.length; i++) {
var marker=markers[i];
marker.setVisible(bool);
}
}
},
/**
* 删除轨迹覆盖物
*/
removeTrackLineWithStartAndEndOverlay:function(){
this.removeOverlay("id", "track_line");
this.removeOverlay("id", "track");
this.removeOverlay("id", "start");
this.removeOverlay("id", "end");
if(lineFeature){
lineFeature.setVisible(false);
lineFeature.setMap(null);
lineFeature=null;
}
this.removeAllOverlays();
}
}; GoogleUtil.event={
/**
* 地图缩放事件
*/
mapZoomChanged:function(markers,zoom){
var listener=google.maps.event.addListener(map, 'zoom_changed', function(event) {
if(map.getZoom()<zoom){
var myMarkers=markers;
GoogleUtil.tools.isToShowMarkers(markers,false);//隐藏标注
markers=myMarkers;
}else{
GoogleUtil.tools.isToShowMarkers(markers,true);//显示标注
}
});
return listener;
},
/**
* 点击标注事件
*/
markerClick:function(marker){
var listener=google.maps.event.addListener(marker, 'click', function(event) {
marker.infoWindow.open(map,marker);
});
return listener;
},
/**
* 移除监听对象
*/
removeListener:function(listener){
google.maps.event.removeListener(listener);
}
}; })();
//window.onload= GoogleUtil.loadScript();

Google map v3 using simple tool file google.map.util.js v 1.0的更多相关文章

  1. Google map v3 using simple tool file google&period;map&period;util&period;js v 1&period;1

    /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 2013-08-23 * @notice 地图容器的z-index不能小于 ...

  2. Google map v3 using simple tool file google&period;map&period;util&period;js v 1&period;2

    更新添加日志:在1.1的基础上添加marker的文字显示.测距工具. /** * GOOGLE地图开发使用工具 * @author BOONYACHENGDU@GMAIL.COM * @date 20 ...

  3. 使用google map v3 api 开发地图服务

    Google Map V3 API 学习地址: http://code.google.com/intl/zh-CN/apis/maps/documentation/javascript/article ...

  4. Google Maps V3 之 路线服务

    概述 您可以使用 DirectionsService 对象计算路线(使用各种交通方式).此对象与 Google Maps API 路线服务进行通信,该服务会接收路线请求并返回计算的结果.您可以自行处理 ...

  5. Google API v3 设置Icon问题处理

    1.查看API实现 //虽然比较符合API实现的思想但这个没法; //会产生Uncaught TypeError: undefined is not a function //google API n ...

  6. 怎样用Google APIs和Google的应用系统进行集成&lpar;2&rpar;----Google APIs的全部的RESTFul服务一览

    上篇文章,我提到了,Google APIs暴露了86种不同种类和版本号的API.我们能够通过在浏览器里面输入https://www.googleapis.com/discovery/v1/apis这个 ...

  7. 高效率使用google&comma;国外搜索引擎,国内顺利使用Google的另类技巧&comma;可用谷歌镜像&comma; 可用google学术&comma; 如何使用robots不让百度和google收录

    Google良好的搜索和易用性已经得到了广大网友的欢迎,但是除了我们经常使用的Google网站.图像和新闻搜索之外,它还有很多其他搜索功能和搜索技巧.如果我们也能充分利用,必将带来更大的便利.这里我介 ...

  8. &lbrack;Google Guava&rsqb; 强大的集合工具类:java&period;util&period;Collections中未包含的集合工具

    转载的,有问题请联系我 原文链接 译文链接 译者:沈义扬,校对:丁一 尚未完成: Queues, Tables工具类 任何对JDK集合框架有经验的程序员都熟悉和喜欢java.util.Collecti ...

  9. Creating a simple static file server with Rewrite--reference

    Today, I’d like to take a quick moment to demonstrate how to make a simple file server using Rewrite ...

随机推荐

  1. 用C&num;实现 查看exe所加载dll列表的功能

    var p = System.Diagnostics. Process.GetProcessesByName("w3wp").First(); List<System.Dia ...

  2. zabbix告警使用sendEmail

    1sendmail介绍 详细介绍见官网:http://caspian.dotconf.net/menu/Software/SendEmail/ 2使用sendEmail sendEmail是个十分优秀 ...

  3. &lbrack;linux-内核&rsqb;&lbrack;转&rsqb;内核日志及printk结构浅析

    这段时间复习了一下内核调试系统,注意看了一下printk的实现以及内核日志的相关知识,这里做一下总结. 1.问题的引出: 做DPDK项目时,调试rte_kni.ko时,发现printk并不会向我们想想 ...

  4. ShortcutMapper – 热门应用程序的可视化快捷键

    ShortcutMapper 是一个流行应用程序的键盘快捷键映射.该应用程序使用 Ajax 调用来加载键盘和应用程序数据.首先,试图找到一个在线资源,其中列出了每个平台的所有应用程序快捷方式.然后你可 ...

  5. django template中load的作用

    某些应用提供自定义标签和过滤器库. 要在一个模板中访问它们, 使用 {% load %} 标签: {% load comments %} {% comment_form for blogs.entri ...

  6. POJ-3017 Cut the Sequence DP&plus;单调队列&plus;堆

    题目链接:http://poj.org/problem?id=3017 这题的DP方程是容易想到的,f[i]=Min{ f[j]+Max(num[j+1],num[j+2],......,num[i] ...

  7. linux下C&plus;&plus;开发工具

    就C++开发工具而言,与Windows下微软(VC, VS2005等)一统天下相比,Linux/Unix下C++开发,可谓五花八门,各式各样.Emacs, vi, eclipse, anjuta,kd ...

  8. 懵懂oracle之存储过程

    作为一个oracle界和厨师界的生手,笔者想给大家分享讨论下存储过程的知识,因为在我接触的通信行业中,存储过程的使用还是占据了一小块的地位. 存储过程是什么?不得不拿下百度词条的解释来:"存 ...

  9. 学习笔记TF030&colon;实现AlexNet

    ILSVRC(ImageNet Large Scale Visual Recognition Challenge)分类比赛.AlexNet 2012年冠军(top-5错误率16.4%,额外数据15.3 ...

  10. SaltStack 架构自动部署 03

    架构图 模块化部署 系统模块:系统优化,内核参数,网络参数 功能模块:如:nginx,tomcat, 业务模块: 1.在salt-master端修改配置文件 [root@01 salt]# vim / ...