Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 谷歌地图信息窗口定位与多段线_Javascript_Google Maps - Fatal编程技术网

Javascript 谷歌地图信息窗口定位与多段线

Javascript 谷歌地图信息窗口定位与多段线,javascript,google-maps,Javascript,Google Maps,我有一个带有多个多段线的地图,我希望为每条线显示信息窗口。我有信息窗口工作,但它不是定位到事件点击,因为它应该是。相反,每个窗口显示在相同的位置。似乎无法找到问题的根源 <script type="text/javascript"> var contentString = ""; var infowindow = new google.maps.InfoWindow({ content: contentString, }); function initialize() {

我有一个带有多个多段线的地图,我希望为每条线显示信息窗口。我有信息窗口工作,但它不是定位到事件点击,因为它应该是。相反,每个窗口显示在相同的位置。似乎无法找到问题的根源

<script type="text/javascript">

var contentString = "";

var infowindow = new google.maps.InfoWindow({
  content: contentString,
});

function initialize() {
  var myLatlng = new google.maps.LatLng(30.695895, -97.354080);
  var mapOptions = {
  zoom: 5,
  center: myLatlng,
  mapTypeId: google.maps.MapTypeId.TERRAIN,
};

var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);

downloadUrl("data.xml", function(data)   {

  var xml = xmlParse(data); 
  var polylines = xml.documentElement.getElementsByTagName("polyline");
  var polylineData = new Array();
  for (var i = 0; i < polylines.length; i++) {
    polylineData[i] = {id:polylines[i].getAttribute("id"),
                      name:polylines[i].getAttribute("name"),
                      olat:polylines[i].getAttribute("olat"),
                      olng:polylines[i].getAttribute("olng"),
                      dlat:polylines[i].getAttribute("dlat"),
                      dlng:polylines[i].getAttribute("dlng")}
  }

  for (var j = 0; j < polylineData.length; j++) {
    var path = [
      new google.maps.LatLng(parseFloat(polylineData[j].olat), parseFloat(polylineData[j].olng)),
      new google.maps.LatLng(parseFloat(polylineData[j].dlat), parseFloat(polylineData[j].dlng))
    ];

    var polyline = new google.maps.Polyline({
      path: path,
      strokeWeight: 2
    });


    google.maps.event.addListener(polyline, 'click', (function(event,index){
      return function(){
        infowindow.content = '<div class="infobox" style="width:280px;"><span class="name">' + polylineData[index].name + '</span></div>';
        var point = event.latLng;
        infowindow.setPosition(point);
        infowindow.open(map);
      };

    })(event,j));

    polyline.setMap(map);
  }

});

}
google.maps.event.addDomListener(window, 'load', initialize);
</script>

var contentString=“”;
var infowindow=new google.maps.infowindow({
content:contentString,
});
函数初始化(){
var mylatng=new google.maps.LatLng(30.695895,-97.354080);
变量映射选项={
缩放:5,
中心:myLatlng,
mapTypeId:google.maps.mapTypeId.TERRAIN,
};
var map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
下载URL(“data.xml”,函数(数据){
var xml=xmlParse(数据);
var polylines=xml.documentElement.getElementsByTagName(“polyline”);
var polylineData=新数组();
对于(变量i=0;i
XML数据如下所示:

<polylines>
    <polyline id="176" name="Line Name" olat="53.545204" olng="-113.369492" dlat="53.545204" dlng="-113.369492"/>
</polylines>


我读过一些类似的帖子,但到目前为止,没有一个答案适用于这个案例。谢谢

事件
必须是传递给返回函数的参数:

google.maps.event.addListener(polyline, 'click', (function(index){
//_________________________________________________________^:the index of the item
  return function(event){
//________________^:the event
    infowindow.content = '<div class="infobox" style="width:280px;"><span class="name">' + polylineData[index].name + '</span></div>';
    var point = event.latLng;
    infowindow.setPosition(point);
    infowindow.open(map);
  };

})(j));
google.maps.event.addListener(多段线,'click',(函数(索引)){
//_________________________________________________________^:项目的索引
返回函数(事件){
//________________^:事件
infowindow.content=''+polylineData[index].name+'';
var点=event.latLng;
信息窗口。设置位置(点);
打开(地图);
};
})(j) );

请提供一个示例,data.xml中的数据示例将有助于重现您的问题。您可能不想在
事件上使用函数闭包,我建议您将infowindow的位置固定到多段线(一端、另一端或中心),但是如果没有多段线的示例,很难判断什么最适合。我的(实际上是)XML格式,不是您的)我添加了一个XML数据示例。感谢这个例子,我希望做一些类似的事情,尽管是在一个更简单的层次上。downloadUrl/xmlParse看起来像什么?您的示例多段线的长度为零。感谢这一点-我感觉它很简单。