2013-02-19 62 views
0

请原谅在这个小菜。当用户点击地图时,它应该放置一个标记并打开一个信息窗口 - 根据这个示例:http://www.geocodezip.com/v3_example_click2add_infowindow.html 下面的代码几乎可以正常工作,除了标记未被替换 - 添加了一个新标记。任何想法真的,真的感激地收到。谢谢。谷歌地图标记不被替换

<script> 
    var map = null; 
    var markersArray = []; 

    function initialize() { 
     var latlng = new google.maps.LatLng(0.0000, 0.0000); 

     var settings = { 
      zoom: 2, 
      mapTypeControl:true, 
      center: latlng, 
      panControl:true, 
      zoomControl:true, 
      streetViewControl:false, 
      overviewMapControl:false, 
      rotateControl:true, 
      scaleControl: true, 
      navigationControl: true, 
      navigationControlOptions: { 
       style: google.maps.NavigationControlStyle.DEFAULT 
      }, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      backgroundColor: 'white' 
     }; 

     map = new google.maps.Map(document.getElementById('map'), settings); 

     function placeMarker(location) { 
     var marker , i ; 
     if (marker) { 
       marker.setPosition(location); 
      } else { 
       marker = new google.maps.Marker({ 
      position: location, 
      icon:'http://www.desperatesailors.com/templates/Live/media/mapicons/info.png', 
      map: map 
      }); 
      var infowindow = new google.maps.InfoWindow({ 
       content: 'Latitude: ' + location.lat() + 
        '<br>Longitude: ' + location.lng() + 
        '<br>Only the first four decimal places needed' 
      }); 
      infowindow.open(map,marker); 
      } 
     } 

     google.maps.event.addListener(map, 'click', function(event) { 
     placeMarker(event.latLng); 
     }); 
    } 

    window.onload = initialize; 
</script> 
+0

如果您获得有效的帮助,请给出答案。当你关闭循环时,它会使整个SO工作。 – 2013-02-21 14:39:16

回答

0

您的placeMarker函数在本地作用域中创建一个新的(空)标记变量。

function placeMarker(location) { 
    var marker , i ; 
    if (marker) { 

它总是会创建一个新的标记。将其更改为:

var marker = null; 
function placeMarker(location) { 
    if (marker) { 
+0

感谢您的快速回复。我对此非常感兴趣,完全失去了。我需要做些什么来解决这个问题?顺便说一下,它是为了创建一个新的标记并删除旧标记。 – 2013-02-19 17:21:03

+0

一种方法是使用原始代码。另一个是删除标记的局部定义。 – geocodezip 2013-02-19 18:17:21

+0

另外,仅供参考,你的代码要么创建一个标记(如果一个不存在),要么移动现有的标记(marker.setPosition(...)) – geocodezip 2013-02-19 19:47:54

0

这是范围问题。您总是在placeMarker函数中删除标记,所以如果(标记)将始终为假。将变量声明移出该函数:

<script> 
    var marker; 
    var map = null; 
    var markersArray = []; 

    function initialize() { 
     var latlng = new google.maps.LatLng(0.0000, 0.0000); 

     var settings = { 
      zoom: 2, 
      mapTypeControl:true, 
      center: latlng, 
      panControl:true, 
      zoomControl:true, 
      streetViewControl:false, 
      overviewMapControl:false, 
      rotateControl:true, 
      scaleControl: true, 
      navigationControl: true, 
      navigationControlOptions: { 
       style: google.maps.NavigationControlStyle.DEFAULT 
      }, 
      mapTypeId: google.maps.MapTypeId.ROADMAP, 
      backgroundColor: 'white' 
     }; 

     map = new google.maps.Map(document.getElementById('map'), settings); 

     function placeMarker(location) { 
     var i ; 
     if (marker) { 
       marker.setPosition(location); 
      } else { 
       marker = new google.maps.Marker({ 
      position: location, 
      icon:'http://www.desperatesailors.com/templates/Live/media/mapicons/info.png', 
      map: map 
      }); 
      var infowindow = new google.maps.InfoWindow({ 
       content: 'Latitude: ' + location.lat() + 
        '<br>Longitude: ' + location.lng() + 
        '<br>Only the first four decimal places needed' 
      }); 
      infowindow.open(map,marker); 
      } 
     } 

     google.maps.event.addListener(map, 'click', function(event) { 
      placeMarker(event.latLng); 
     }); 
    } 

    window.onload = initialize; 
</script> 
+0

谢谢迈克尔,但是那个代码也行不通!我所得到的只是一个空白的屏幕? – 2013-02-19 17:50:02

+0

这里有一个在线的工作版本,可供参考,如果你喜欢:http://michaelreed.org/so/mapmarker.html – 2013-02-20 13:25:23