【问题标题】:Google Map strange behaviour- marker info Window displays info always from the same marker谷歌地图奇怪的行为 - 标记信息窗口总是显示来自同一个标记的信息
【发布时间】:2012-04-05 09:06:42
【问题描述】:

我有带有多个不同颜色标记的地图和一些信息窗口。一切正常,除了当我单击某个标记(例如我有 5 个)时,它会打开我的光标,比如说,第 4 个标记并始终从该标记显示信息窗口。所以它总是显示相同的信息窗口。 这是一个小的 html 文件,所以如果有人知道解决方案,我将不胜感激。 我也尝试过google.maps.event.addDomListener,因为我认为存在问题,但行为相同。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
    <title>Google Maps Javascript API v3 Example: Loading the data from an XML</title> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script> 
<script type="text/javascript" src="downloadxml.js"></script>

<script type="text/javascript"> 
//<![CDATA[





     // global "map" variable
      var map = null;






function initialize() {

  var myOptions = {
    zoom: 8,
    center: new google.maps.LatLng(43.907787,-79.359741),
    mapTypeControl: true,
    mapTypeControlOptions: {style: google.maps.MapTypeControlStyle.DROPDOWN_MENU},
    navigationControl: true,
    mapTypeId: google.maps.MapTypeId.ROADMAP
  }
  map = new google.maps.Map(document.getElementById("map_canvas"),
                                myOptions);

  google.maps.event.addListener(map, 'click', function() {
        infowindow.close();
        });
      // Read the data from example.xml
      downloadUrl("example7.xml", function(doc) {
        var xmlDoc = xmlParse(doc);
        var markers = xmlDoc.documentElement.getElementsByTagName("marker");
        for (var i = 0; i < markers.length; i++) {
          // obtain the attribues of each marker
          var lat = parseFloat(markers[i].getAttribute("lat"));
          var lng = parseFloat(markers[i].getAttribute("lng"));
          var point = new google.maps.LatLng(lat,lng);
          var html = markers[i].getAttribute("html");




        var severity = parseFloat(markers[i].getAttribute("severity"));

        var color= "66FF33";


       if (severity == 0) color = "66FF33";
       else if (severity == 1) color = "990099";
        else if (severity == 2) color = "00CCFF";


        var pinImage = new google.maps.MarkerImage("http://www.googlemapsmarkers.com/v1/" + color,
        new google.maps.Size(21, 34),
        new google.maps.Point(0,0),
        new google.maps.Point(10, 34));


      var marker = new google.maps.Marker({
                position: point,
                map: map,
                icon: pinImage,

            });

 google.maps.event.addListener(marker, 'click', function() {
        var alarmanchor1='<span class="url"><a href="' + html;
        var alarmanchor2='" title="www" target="_blank">Event List</a></span>';
        var contentString=alarmanchor1+alarmanchor2;
        infowindow.setContent(contentString); 
        infowindow.open(map,marker);
        });




        }

      });
    }

var infowindow = new google.maps.InfoWindow(
  { 
    size: new google.maps.Size(150,50)
  });


//]]>
</script> 

  </head> 
<body style="margin:0px; padding:0px;" onload="initialize()"> 


    <table border="1"> 
      <tr> 
        <td> 
           <div id="map_canvas" style="width: 1050px; height: 1200px"></div> 
        </td> 

      </tr> 
    </table> 


<script src="urchin.js" type="text/javascript"> 
</script> 


  </body> 
</html> 

我的 XML 是:

<markers>

 <marker lat="43.65654" lng="-79.90138" html="http://www.google.com"  label="Marker One" severity="0" />
 <marker lat="43.91892" lng="-78.89231" html="http://www.yahoo.com" label="Marker Two" severity="1" />
 <marker lat="43.82589" lng="-79.10040" html="http://www.sport.com"  label="Marker Three" severity="2" />
  <marker lat="43.72589" lng="-79.60040" html="http://www.stackoverflow.com"  label="Marker Fourth" severity="3" />
   <marker lat="43.52589" lng="-79.70040" html="http://www.stackoverflow.com"  label="Marker Five" severity="4" />
 </markers> 

【问题讨论】:

  • 你也可以分享xml文件吗?
  • 你好厄塞尔。感谢您的回答,我用我的 XML 更新它。
  • 好的,我再看看。
  • @Ersel 一次更新我设法更改了我的代码,现在它没有打开另一个标记,但仍然显示 xml 中最后一个标记的 url
  • google.maps.event.addListener(marker, 'click', (function(marker, i) { return function(){ var alarmanchor1='事件列表'; var contentString=alarmanchor1+alarmanchor2; infowindow.setContent(contentString); infowindow. open(map, marker); } }) (marker, i));

标签: google-maps infowindow


【解决方案1】:

只需将您的代码更改为此,以便它为每个元素获取正确的 url。

<a href="' + html;

<a href="' +markers[i].getAttribute("html");

所以你的问题的完整代码是:

google.maps.event.addListener(marker, 'click', (function(marker, i) { return function(){ var alarmanchor1='<span class="url"><a href="' +markers[i].getAttribute("html"); var alarmanchor2='" title="www" target="_blank">Event List</a></span>'; var contentString=alarmanchor1+alarmanchor2; infowindow.setContent(contentString); infowindow.open(map, marker); } }) (marker, i));

【讨论】:

  • 感谢您的努力!我认为仅仅获得 html 值就足够了,但你是对的!我可以再问你两个问题:对于 API 3,我不需要购买密钥?因为我想上传并传输这个文件到某个应用程序服务器。 API 3 中的第二个问题如何更改图标的大小?因为如果我改变 new google.maps.Size(21, 34), new google.maps.Point(0,0), new google.maps.Point(10, 34));到新的 google.maps.Size(15, 30),我的标记被切断或带有一些红色阴影。谢谢!!!!!!
  • 不,你不需要钥匙,但它是免费的,所以它不是问题。我不确定,我使用这个工具创建我的标记。 powerhut.co.uk/googlemaps/custom_markers.php很高兴为您提供帮助:)
猜你喜欢
  • 2014-10-15
  • 2011-08-21
  • 1970-01-01
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-13
相关资源
最近更新 更多