javascript - Google map 地标不会取代旧地标

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

我正在使用 Google map 应用程序开发网页,但遇到了一些问题。目前,该网页有一个功能 map (没有任何图层)和一个搜索栏。我是编程新手,所以希望有一个我缺少的快速修复。

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

<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>

最佳答案

实现您所描述的目的的一种方法是使用全局标记变量。由于 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);
        }
    }); 
}

关于javascript - Google map 地标不会取代旧地标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10789838/

相关文章:

Javascript 2.0 类

javascript - DIV 等效 HTML5

android - React-native-maps 空白页面 只有谷歌标志

android - 无法导入 google-play-services_lib,因为项目名称正在使用中

css - 响应式 Google Maps v3 - 无法获得 100% 的高度

JavaScript 代码说明

javascript - 在 Vis.js 中访问节点标签参数值

javascript - Knockout - 通过多个对象属性过滤可观察数组中的对象

javascript - Ajax php 登录表单不指向另一个页面

html - 如何让这些文本内联显示?