如何清理以前的标记(googleMaps.marker)

时间:2012-12-21 09:27:32

标签: google-maps-markers marker

我使用jquerymobile工作了一个小的谷歌地图项目。

首先,我调用un方法来设置关于我的位置的地图

navigator.geolocation.getCurrentPosition(function(position){
        showMap(position.coords.latitude, position.coords.longitude);
    }, 
    function onFalid(){
        alert('Error occur on getCurrentPositionError' + error.code + ':: ' + error.message);
    }, 
    {
        enableHighAccuracy  : true,
        maximumAge          : 10000
    });

这是showMap()

的代码
function showMap(lat,long){

    //var latLng = new google.maps.LatLng(data[0].coords.latitude, data[0].coords.longitude);
    var latLng = new google.maps.LatLng(lat,long);

    // Google Map options
    var myOptions = {
      zoom: 15,
      zoomControl   : 1,
      center: latLng,
      mapTypeId: google.maps.MapTypeId.HYBRID////ROADMAP, SATELLITE, HYBRID and TERRAIN
    };

    // Create the Google Map, set options
    Tracking.mapy = new google.maps.Map(document.getElementById("mapHome"), myOptions);
    addMarker(lat, long, map);

}

这项工作很好!

如您所见,最后,它调用antoher方法来显示标记

function addMarker(lat, long){

    //Tracking.mapy.removeOverlay(Tracking.marker);;
    var mapBounds = new google.maps.LatLngBounds();

    var latitudeAndLongitude = new google.maps.LatLng(lat, long);
    var image = Markers.info()[0][1]+Markers.info()[0][2];

    marker = new google.maps.Marker({
        title   : Markers.info()[0][0],
        //animation: google.maps.Animation.DROP, //BOUNCE
        position: latitudeAndLongitude,
        map     : Tracking.mapy,
        icon : image
    });

    Tracking.markers.push(marker);

    // Clean previous markers THIS IS NOT WORKING!!!!!!!
    //google.maps.Map.prototype.clearOverlays = function() {
      for (var i = 0; i < Tracking.markers.length; i++ ) {

        Tracking.markers[i].setMap(null);
        console.log(Tracking.markers[i]);
      }
    //}

    mapBounds.extend(latitudeAndLongitude);
    Tracking.mapy.fitBounds(mapBounds);
    //trackPath();
}

这也可以正常工作,除了循环清理标记。

为了让事情变得更复杂,当我在街上工作时,我希望看到我的标记移动,清晰的内容或疯狂(eal)

我添加了那个电话,就在第一个代码的下方,我提供了你:

var track_id = Markers.info()[0][0];
    Tracking.watch_id = navigator.geolocation.watchPosition(
    // Success
    function(position){
        var lat = position.coords.latitude;
        var long = position.coords.longitude;

        Tracking.data.push(lat, long);
        addMarker(lat, long);

    },
    // Error
    function(error){
        alert('Error occur on watchPositionError' + error.code + ':: ' + error.message);
    },
    // Settings
    { 
        frequency: 3000, 
        enableHighAccuracy: true 
    });

然后每次,我都是电影,数组Tracking.markers将增加

Tracking = {
    mapy : null,
    watch_id : null,    
    data : new Array(),
    markers : new Array()
}

我的问题在这里 当我继续前进时,我可以看到我的标记。更多我移动更多我有标记。当然,我只想拥有最后一个标记而不是双胞胎和新双胞胎。

如何清洁以前的标记??? 如您所见,上面,我尝试了一个循环

// Clean previous markers
    //google.maps.Map.prototype.clearOverlays = function() {
      for (var i = 0; i < Tracking.markers.length; i++ ) {

        Tracking.markers[i].setMap(null);
        console.log(Tracking.markers[i]);
      }
    //}

但它确实也没有用。如果我取消注释以google.maps开头的行...,则无效。 如果我留下评论,则删除所有标记。所以我可以看到任何标记......

你可以帮助我将我的标记显示在移动后的位置吗?

非常感谢您的帮助,建议和代码。  祝你圣诞快乐,新年快乐, 干杯

0 个答案:

没有答案