【发布时间】:2012-07-19 05:34:39
【问题描述】:
我正在尝试将 Overlapping Marker Spiderfier 用于此处的 Google Maps API v3。 (我的问题在这段文本/代码的底部)
https://github.com/jawj/OverlappingMarkerSpiderfier/blob/master/README.textile
我试图在其上实现它的页面与他们在源代码页面上使用的代码有点不同。他们初始化他们的页面并在初始化函数中实现所有的函数调用。我的页面初始化地图并加载一个点,然后稍后使用单独的函数(通过地理编码)添加其他点。
所以,基本上此时地图已经初始化,现在我调用我的数据库来获取要添加的新位置。
var cityArray= <?php echo json_encode($cityArray); ?>; //get the city
var title = <?php echo json_encode($title); ?>; //and the title to go on it's infowindow
function plotMarkers(){
for(var i = 0; i < <?php echo json_encode($length); ?>; i++){
codeAddresses(cityArray[i],title[i]); //geocode the address
}
}
所以,上面的这个 sn-p 给了我两个数组;一个带有位置,另一个带有标题以进入信息窗口。
所以,现在是对地址进行地理编码并将该标记添加到地图的 codeAddresses 函数。从 plotMarkers 函数可以看出,数组是循环遍历并添加到 codeAddresses 函数中的。
function codeAddresses(address,title){
geocoder.geocode( { 'address': address}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
marker = new google.maps.Marker({
map: map,
position: results[0].geometry.location
});
google.maps.event.addListener(marker, 'click', (function(marker) {
return function() {
infowindow.setContent(title);
infowindow.open(map, marker);
}
})(marker));
}
});
}
我的问题是我应该将侦听器(在上面链接的页面上)添加到加载第一个点的第一个函数中,还是应该将它添加到 codeAddresses 函数中?
另外,我应该将它包含在我的 codeAddresses 函数中还是其他地方?如果它确实进入了 codeAddresses,这是否意味着我可以摆脱 for 循环,因为 codeAddresses 是从循环中触发的(并在每次迭代期间运行)?
for (var i = 0; i < window.mapData.length; i ++) {
var datum = window.mapData[i];
var loc = new gm.LatLng(datum.lat, datum.lon);
var marker = new gm.Marker({
position: loc,
title: datum.h,
map: map
});
marker.desc = datum.d;
oms.addMarker(marker); // <-- here
}
【问题讨论】:
标签: javascript google-maps google-maps-api-3 google-maps-markers