Google Maps geoXML3:将地标传递给它自己的事件侦听器?
Google Maps geoXML3: passing a placemark into it's own event listener?
我正在处理一个内部网项目,所以我的 KML 文件无法在外部使用。这意味着我依赖于 geoXML3 库来将我的 XML 解析到我的 Google 地图上。然而,缺乏关于事件侦听器的文档令人沮丧。我想调用一个点击侦听器并传入 geoXML3 地标。我正在尝试执行以下操作,但是 clickListener
总是收到在 afterParse
循环中处理的最后一个多边形作为 p
。
kml = new geoXML3.parser({
suppressInfoWindows: true,
map: map,
afterParse: function (doc) {
for (var i = 0; i < doc[0].placemarks.length; i++) {
var p = doc[0].placemarks[i];
google.maps.event.addListener(
p.polygon,
"click",
function () { clickListener(p); }
);
}
}
});
kml.parse(mapSettings.kmlLocation);
如果我使用 Google 地图 API 的 KML 支持,我可以这样做并将多边形传递给侦听器。
kml = new google.maps.KmlLayer(mapSettings.kmlLocation, {
suppressInfoWindows: true,
preserveViewport: false,
map: map
});
google.maps.event.addListener(
kml,
"click",
clickListener
};
有什么方法可以(更可取)将正确的 geoXML3 地标可靠地传递到 clickListener
,或者(不太可取)将 属性 传递到 geoXML3.parser
我可以像使用 Google 地图 API kml 解析器那样绑定点击事件并接收 kmlMouseEvent
吗?最终我需要能够更改多边形的样式并在数组中跟踪它 selected/deselected.
使用函数闭包将地标与事件侦听器相关联。一种方式(也可以使用匿名函数):
kml = new geoXML3.parser({
suppressInfoWindows: true,
map: map,
afterParse: function (doc) {
for (var i = 0; i < doc[0].placemarks.length; i++) {
var p = doc[0].placemarks[i];
clickablePolygon(p);
}
}
});
kml.parse(mapSettings.kmlLocation);
function clickablePolygon(p) {
google.maps.event.addListener(
p.polygon,
"click",
function () { clickListener(p); }
);
}
我正在处理一个内部网项目,所以我的 KML 文件无法在外部使用。这意味着我依赖于 geoXML3 库来将我的 XML 解析到我的 Google 地图上。然而,缺乏关于事件侦听器的文档令人沮丧。我想调用一个点击侦听器并传入 geoXML3 地标。我正在尝试执行以下操作,但是 clickListener
总是收到在 afterParse
循环中处理的最后一个多边形作为 p
。
kml = new geoXML3.parser({
suppressInfoWindows: true,
map: map,
afterParse: function (doc) {
for (var i = 0; i < doc[0].placemarks.length; i++) {
var p = doc[0].placemarks[i];
google.maps.event.addListener(
p.polygon,
"click",
function () { clickListener(p); }
);
}
}
});
kml.parse(mapSettings.kmlLocation);
如果我使用 Google 地图 API 的 KML 支持,我可以这样做并将多边形传递给侦听器。
kml = new google.maps.KmlLayer(mapSettings.kmlLocation, {
suppressInfoWindows: true,
preserveViewport: false,
map: map
});
google.maps.event.addListener(
kml,
"click",
clickListener
};
有什么方法可以(更可取)将正确的 geoXML3 地标可靠地传递到 clickListener
,或者(不太可取)将 属性 传递到 geoXML3.parser
我可以像使用 Google 地图 API kml 解析器那样绑定点击事件并接收 kmlMouseEvent
吗?最终我需要能够更改多边形的样式并在数组中跟踪它 selected/deselected.
使用函数闭包将地标与事件侦听器相关联。一种方式(也可以使用匿名函数):
kml = new geoXML3.parser({
suppressInfoWindows: true,
map: map,
afterParse: function (doc) {
for (var i = 0; i < doc[0].placemarks.length; i++) {
var p = doc[0].placemarks[i];
clickablePolygon(p);
}
}
});
kml.parse(mapSettings.kmlLocation);
function clickablePolygon(p) {
google.maps.event.addListener(
p.polygon,
"click",
function () { clickListener(p); }
);
}