作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经弄清楚如何使用 Marker Clusterer 制作 google map ,它的工作方式正是我想要的。
因此,我接下来继续尝试研究如何将 InfoWindows 添加到标记,但我陷入了困境。
无论我怎么尝试,信息窗口信息始终是 markers.txt 文件中最后一项的详细信息。即“浴缸 - 122 Byron Road, CHELMSFORD, CM2 6HJ”
我认为这与在循环内创建标记有关。但我不知道该怎么做。我正在关注这篇文章,但并没有说它不起作用。
InfoWindow on Marker using MarkerClusterer
我已经发布了我迄今为止的工作演示,因此您可以明白我的意思:
http://googlemap.azurewebsites.net/2clustermapwithinfowindows.html
这是我的代码:
非常感谢任何帮助!
<!DOCTYPE>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>MarkerClusterer v3 Example</title>
<style type="text/css">
#map {
width: 100%;
height: 100%;
}
</style>
<script src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="/markers.txt"></script>
<script type="text/javascript" src="http://google-maps-utility-library-v3.googlecode.com/svn/trunk/markerclusterer/src/markerclusterer.js"></script>
<script type="text/javascript">
var infowindow = new google.maps.InfoWindow({});
function initialize() {
var center = new google.maps.LatLng(54,-2);
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 5,
center: center,
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var stack = [];
var markers = [];
for (var i = 0; i < data.count; i++) {
var dataPhoto = data.clustermarker[i];
// obtain the attribues of each marker
var lat = dataPhoto.latitude;
var lng = dataPhoto.longitude;
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map,
title: "This is a marker"
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent("<div id='pano' style='width: 400px; height: 400px;'></div><div>" + dataPhoto.businessname + "</div>" + "<div>" + dataPhoto.fulladdress + "</div>");
infowindow.open(map, marker);
}
})(marker, i));
stack.push(marker);
}
var mc = new MarkerClusterer(map, stack);
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map"></div>
<div id="pano"></div>
</body>
</html>
最佳答案
我不确定,但我认为这是因为您在事件监听器中使用了来自 dataPhoto
的数据(当您的事件被触发时,它将具有最后一个元素的值)。
您可以尝试将额外的数据存储在您的标记中,然后像这样在您的监听器中重用它:
var stack = [];
var markers = [];
for (var i = 0; i < data.count; i++) {
var dataPhoto = data.clustermarker[i];
// obtain the attribues of each marker
var lat = dataPhoto.latitude;
var lng = dataPhoto.longitude;
var marker = new google.maps.Marker({
position: new google.maps.LatLng(lat, lng),
map: map,
title: "This is a marker",
businessname: dataPhoto.businessname,
fulladdress: dataPhoto.fulladdress
});
google.maps.event.addListener(marker, 'click', (function (marker, i) {
return function () {
infowindow.setContent("<div id='pano' style='width: 400px; height: 400px;'></div><div>" + marker.businessname + "</div>" + "<div>" + marker.fulladdress + "</div>");
infowindow.open(map, marker);
}
})(marker, i));
stack.push(marker);
}
关于使用 InfoWindows 的 Javascript Google map 标记聚类 - 可能吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20378918/
我是一名优秀的程序员,十分优秀!