Google地图地标不会取代旧地标

时间:2012-05-28 19:57:04

标签: javascript html google-maps geocoding google-maps-markers

我正在开发一个带有Google地图应用程序的网页,但我遇到了一些麻烦。目前,网页上有一个功能图(没有任何图层)和一个搜索栏。我是编程的新手,所以希望我能找到一个快速解决的问题。

当我查找地址时,地标位于它应该位于的位置。但是,当我使用不同的地址进行第二次搜索时,第一次搜索的地标仍然可见,因此屏幕上有两个地标。如何制作新地标取代旧地标?

<script type="text/javascript">
    var geocoder;
    var map; 
    var marker;
  function initialize() {
    geocoder = new google.maps.Geocoder ();
    var latlng = new google.maps.LatLng (55.1667, -114.4000);
    var myOptions = {
      zoom: 5,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
     map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);
    marker = new google.maps.Marker({map:map});
        }
    function codeAddress () {
        var address = document.getElementById ("address").value;
        geocoder.geocode ( { 'address': address}, function(results, status)                              {
        if (status == google.maps.GeocoderStatus.OK)  {
            map.setCenter(results [0].geometry.location);
            marker.setposition(results [0].geometry.location);
            map.setZoom(16);
            } 
        else {
            alert("Geocode was not successful for the following reason: " + status);
                }
    }); 
                            }
</script>

1 个答案:

答案 0 :(得分:0)

实现所描述内容的一种方法是使用全局marker变量。由于codeAddress函数每次运行时都会调用new google.maps.Marker,因此每次都会得到一个新标记。

相反,请使用全局标记的setPosition函数移动它。

    var geocoder;
    var map; 

    // ADDED
    var marker;

  function initialize() {
    geocoder = new google.maps.Geocoder ();
    var latlng = new google.maps.LatLng (55.1667, -114.4000);
    var myOptions = {
      zoom: 5,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
     map = new google.maps.Map(document.getElementById("map_canvas"),
        myOptions);

     // ADDED
     marker = new google.maps.Marker({ map: map });
  }
    function codeAddress () {
        var address = document.getElementById ("address").value;
        geocoder.geocode ( { 'address': address}, function(results, status)  {
        if (status == google.maps.GeocoderStatus.OK)  {
            map.setCenter(results [0].geometry.location);

            // CHANGED
            marker.setPosition(results [0].geometry.location);

            map.setZoom(16);
        } 
        else {
            alert("Geocode was not successful for the following reason: " + status);
        }
    }); 
}