google地图开发总结(markerManager)

来源:互联网 发布:网络入侵检测系统 编辑:程序博客网 时间:2024/05/20 05:06

最近开发一个基于谷歌地图的应用,在使用google地图提供的api中,想获得地图中已经加载的一个地标,却怎么也得不到,自己想想实现一个markerManager对象吧,

在代码中我声明了一个数组用于保存新建marker对象,返回想要的marker对象时,前台会提供一个id值只要在数组中查找看看是否存在marker对象id中相等的对象,有的话返回。没有的话返回false。markermanager对象提供了几个方法。这个markerManager对象有个缺陷,就是地图移动时,后台返回数据时,我是清空所有现有的marker对象,重新加载,想改动成返回的对象如果地图中已经有的就不重新加载,没有的话重新加载,不存在的话删除。这个总与在一段时间后修改完毕,希望对大家有所帮助。

// JavaScript Document


//地标管理对象
function MarkerManager(_map)
{
var map;
var markerStack = new Array();
var newMarkers = new Array();
map = _map;

//添加地标
this.addMarker = function(markers)
                {
                         for ( i = 0; i < markers.length; i++)
                         {


                            var myLatLng = new google.maps.LatLng(markers[i].lat, markers[i].lng);
                            var id = markers[i].id;
                            var name = "marker"+id;
                            name = new google.maps.Marker({
                                position: myLatLng,
                                title:markers[i].name ,
                                icon:image,
                                map:map,
                                id :id,
                                scope:markers[i].scope,
                                minimum:markers[i].minimum
                             });


                                attachSecretMessage(map, name);
                                markerStack.push(name);
                            };
                }

  //地标的重新加载
  this.reloadMarkers = function(_data){
  var length = _data.length;
   if(_data.length <= 0)
return false;
this.removeHistoryMarkers(_data);
   for(i = 0;i < length;i++){  
if(!this.getMarker(_data[i].id)){
newMarkers.push(_data[i]);
}
}
if(newMarkers){
this.addMarker(newMarkers);
newMarkers = [];
}
  
 }
 
//删除不存在的marker
this.removeHistoryMarkers = function(_data){

for(var i =0; i < markerStack.length; i++ ){
if(!this.existMarker(_data,markerStack[i].id)){
this.clearMarker(markerStack[i],i);
}
}



//检查历史marker对象在新数据中是否存在
this.existMarker = function(_data, id){
for(var i = 0; i < _data.length; i++){
if(id == _data[i].id)
return true;
}
return false;


//返回地标数量
this.countMarker = function(){
return markerStack.length;
};


//根据id返回地标对象
this.getMarker = function(_id){
if(markerStack.length <= 0)
 return false;
for(var count = 0; count < markerStack.length; count++){
if(markerStack[count].id == _id)
  return markerStack[count];
}
return false;

}


//清除所有地标对象
   this.clearMarkers = function(){
for(i = 0; i< markerStack.length; i++){
var marker = markerStack[i];
marker.setMap(null);
}
                markerStack = [];
}

//清除一个地标
this.clearMarker = function(_marker, i){
_marker.setMap(null);
markerStack.splice(i,1);
 
}


}