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看起来像什么?您的示例多段线的长度为零。感谢这一点-我感觉它很简单。