Javascript 谷歌地图MarkerClusterer信息窗口位置
我对markercluster信息窗口的位置有问题。它不会出现在标记位置。相反,它位于地图的左上角。这是我的密码:Javascript 谷歌地图MarkerClusterer信息窗口位置,javascript,google-maps,google-maps-api-3,marker,markerclusterer,Javascript,Google Maps,Google Maps Api 3,Marker,Markerclusterer,我对markercluster信息窗口的位置有问题。它不会出现在标记位置。相反,它位于地图的左上角。这是我的密码: <script type="text/javascript"> function initialize(cities) { var mapOptions = { center: new google.maps.LatLng(48.220, 15.199), zoom: 9, mapTypeId: google.maps.M
<script type="text/javascript">
function initialize(cities) {
var mapOptions = {
center: new google.maps.LatLng(48.220, 15.199),
zoom: 9,
mapTypeId: google.maps.MapTypeId.ROADMAP,
};
var map = new google.maps.Map(document.getElementById("map"), mapOptions);
var markers=[];
var markerCluster = new MarkerClusterer(map, markers, {zoomOnClick: false});
//markerCluster should be always above the geocoder-->
geocoder = new google.maps.Geocoder();
for (var i = 0; i < cities.length; i++) {
var city = cities[i];
geocoder.geocode({'address': city.city+" Niederösterreich"}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
position=results[0].geometry.location;
var marker = new google.maps.Marker({
map: map,
position: position,
title: "Ort: "+city.city + "\nBeitrag: " + city.title +"\nRed.: "+ city.reporter +"\nDatum: "+ city.storydate,
});
// below code alway lies inside the loop
markers.push(marker);
markerCluster.addMarker(marker);
}
});
};
// Listen for a cluster to be clicked
google.maps.event.addListener(markerCluster, 'clusterclick', function(cluster) {
var markers = markerCluster.getMarkers();
var content = '';
for (var i = 0; i < markers.length; i++) {
var marker = markers[i];
content += marker.title;
content += ("<br>");
};
// Convert lat/long from cluster object to a usable MVCObject
var info = new google.maps.MVCObject;
var infowindow = new google.maps.InfoWindow();
// infowindow.setPosition(this.markerCluster.getCenter());
// infowindow.setPosition(latLng);
infowindow.close();
infowindow.setContent(content);
infowindow.open(map, info);
google.maps.event.addListener(map, 'zoom_changed', function() { infowindow.close() });
});
}
</script>
函数初始化(城市){
变量映射选项={
中心:新google.maps.LatLng(48.220,15.199),
缩放:9,
mapTypeId:google.maps.mapTypeId.ROADMAP,
};
var map=new google.maps.map(document.getElementById(“map”)、mapOptions);
var标记=[];
var markerCluster=newmarkerclusterer(映射,标记,{zoomOnClick:false});
//markerCluster应始终位于地理编码器-->
geocoder=新的google.maps.geocoder();
对于(变量i=0;i”);
};
//将lat/long从集群对象转换为可用的MVCObject
var info=new google.maps.MVCObject;
var infowindow=new google.maps.infowindow();
//infowindow.setPosition(this.markerCluster.getCenter());
//信息窗口设置位置(latLng);
infowindow.close();
infowindow.setContent(content);
信息窗口。打开(地图、信息);
google.maps.event.addListener(map'zoom_changed',function(){infowindow.close()});
});
}
您的MVCObject没有任何属性。根据,如果将可选的anchor
参数传递到函数.open
,它必须公开一个LatLng position属性,而您的属性没有(因为它没有任何属性,所以不能公开任何属性)
打开(地图?:地图|街景全景,锚?:MVCObject)
返回值:无
在给定地图上打开此信息窗口可选地,信息窗口可以与锚关联。在核心API中,唯一的锚点是Marker类。但是,定位点可以是任何MVCObject,该MVCObject公开了LatLng position特性和用于计算像素偏移的点定位点特性(可选)(请参见InfoWindowOptions)。锚点是从锚点位置到信息窗口顶端的偏移量。
最简单的解决方案是不使用anchor
参数,直接设置infowindow的位置
google.maps.event.addListener(markerCluster, 'clusterclick', function (cluster) {
var markers = cluster.getMarkers();
var content = '';
for (var i = 0; i < markers.length; i++) {
var marker = markers[i];
content += marker.title;
content += ("<br>");
}
var infowindow = new google.maps.InfoWindow();
infowindow.setPosition(cluster.getCenter());
infowindow.setContent(content);
infowindow.open(map);
google.maps.event.addListener(map, 'zoom_changed', function () {
infowindow.close();
});
});
MVCObject没有任何属性做一些研究。如果你想不出来,就创建一个演示问题的示例,然后再问另一个问题。