使用Javascript API v3的谷歌地图中没有显示多个标记?
我想知道如何使用JavaScriptAPI v3为Google地图放置多个标记 我尝试了发布的解决方案,但由于某些原因,它对我无效:使用Javascript API v3的谷歌地图中没有显示多个标记?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,我想知道如何使用JavaScriptAPI v3为Google地图放置多个标记 我尝试了发布的解决方案,但由于某些原因,它对我无效: var directionDisplay; function initialize() { var myOptions = { zoom: 9, center: new google.maps.LatLng(40.81940575,-73.95647955), mapTypeId: google.maps.MapTypeId.TERRAIN
var directionDisplay;
function initialize() {
var myOptions = { zoom: 9, center: new google.maps.LatLng(40.81940575,-73.95647955), mapTypeId: google.maps.MapTypeId.TERRAIN }
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
setMarkers(map, properties);
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'],
];
function setMarkers(map, buildings) {
var image = new google.maps.MarkerImage('map_marker.png', new google.maps.Size(19,32), new google.maps.Point(0,0), new google.maps.Point(10,32));
var shadow = new google.maps.MarkerImage('map_marker_shadow.png', new google.maps.Size(28,32), new google.maps.Point(0,0), new google.maps.Point(10,32));
var bounds = new google.maps.LatLngBounds;
for (var i in buildings) {
var myLatLng = new google.maps.LatLng(buildings[i][1], buildings[i][2]);
bounds.extend(myLatLng);
var marker = new google.maps.Marker({ position: myLatLng, map: map, shadow: shadow, icon: image, title: buildings[i][0] });
google.maps.event.addListener(marker, 'click', function() { window.location = ('detail?b=' + buildings[i][3]); });
}
map.fitBounds(bounds);
}
}
</script>
var方向显示;
函数初始化(){
var myOptions={zoom:9,中心:new google.maps.LatLng(40.81940575,-73.95647955),mapTypeId:google.maps.mapTypeId.TERRAIN}
var map=new google.maps.map(document.getElementById(“map_canvas”),myOptions);
设置标记(地图、属性);
变量属性=[
['106英尺华盛顿大道',40.8388485,-73.9436015,'Mjg4'],
];
功能设置标记(地图、建筑物){
var image=new google.maps.MarkerImage('map_marker.png',new google.maps.Size(19,32),new google.maps.Point(0,0),new google.maps.Point(10,32));
var shadow=new google.maps.MarkerImage('map_marker_shadow.png',new google.maps.Size(28,32),new google.maps.Point(0,0),new google.maps.Point(10,32));
var bounds=new google.maps.LatLngBounds;
用于(建筑物中的var i){
var mylatng=new google.maps.LatLng(buildings[i][1],buildings[i][2]);
扩展(myLatLng);
var marker=new google.maps.marker({position:mylatng,map:map,shadow:shadow,icon:image,title:buildings[i][0]});
google.maps.event.addListener(标记,'click',function(){window.location=('detail?b='+buildings[i][3]););
}
映射边界(bounds);
}
}
谁能解释一下为什么这对我不起作用吗?这个问题已经有几个月了,但我注意到它仍然没有得到回答。我想OP已经找到了解决这个问题的方法,但是为了完整起见,让我尝试一个答案
我可以在上面的代码中发现几个主要问题:
properties
之前,您试图将properties
数组传递给setMarkers()
函数。因此,对于第二个参数,setMarkers()
将接收undefined
,这就是为什么地图上没有显示任何内容for in
循环中使用。封闭在一个闭包中的变量共享同一个环境,因此当调用来自addListener
的click
回调时,循环将已经运行,并且i
变量将左指循环结束时的最后一个值要解决第一个问题,只需在调用
setMarkers()
之前定义properties
数组:
然后,您可以使用函数工厂使用更多闭包来解决闭包问题:
function makeClickCallback(buildings, i) {
return function() {
window.location = ('detail?b=' + buildings[i][3]);
};
}
for (var i in buildings) {
// ...
google.maps.event.addListener(marker, 'click',
makeClickCallback(buildings, i);
}
如果您不熟悉闭包的工作方式,这可能是一个相当棘手的话题。您可以查看以下Mozilla文章以获得简要介绍:
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'] // no comma
];
此外,请注意,由于properties
数组中只有一个元素,因此在地图上只能得到一个标记。我不确定是否为了本例而删除了其他元素,但如果没有,只需添加更多类似以下的位置:
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'],
['Another Location',50.505050,-75.505050,'Mjg5']
];
欢迎来到SO。你会犯什么错误?在哪一点调用initialize()?地图根本不显示任何标记,而是在Winslow Reef中显示一个区域。没有我所期望的华盛顿。我想显示多个标记。请在主体上调用helpinitialize()
var properties = [
['106 Ft Washington Avenue',40.8388485,-73.9436015,'Mjg4'],
['Another Location',50.505050,-75.505050,'Mjg5']
];