javascript – 谷歌地图:记住打开信息窗口的标记的ID
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 谷歌地图:记住打开信息窗口的标记的ID,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3202字,纯文字阅读大概需要5分钟。
内容图文
我有一张谷歌地图,显示了许多标记.当用户移动地图时,使用以下代码重新绘制新边界的标记:
GEvent.addListener(map, "moveend", function() {
var newBounds = map.getBounds();
for(var i = 0; i < places_json.places.length ; i++) {
// if marker is within the new bounds then do...
var latlng = new GLatLng(places_json.places[i].lat, places_json.places[i].lon);
var html = "blah";
var marker = createMarker(latlng, html);
map.addOverlay(marker);
}
});
我的问题很简单.如果用户单击标记以显示打开的信息窗口,则当前重新绘制边界时,将关闭信息窗口,因为标记将从头开始再次添加.我怎么能阻止这个?
这并不理想,因为当用户点击标记并且地图移动以显示信息窗口时,通常会重新绘制边界 – 因此信息窗口会出现,然后再次消失:)
我想有几种可能的方法:
>记住哪个标记具有打开的信息窗口,并在重绘标记时再次打开它
>实际上不要使用打开的信息窗口重新添加标记,只需将其留在那里
但是,两者都要求带有打开窗口的标记具有某种ID号,我不知道Google Maps API实际上就是这种情况.任何人?
———- UPDATE ——————
我已经尝试过将标记加载到初始数组中,如建议的那样.加载正常,但拖动地图后页面崩溃.
<script type="text/javascript" src="{{ MEDIA_URL }}js/markerclusterer.js"></script>
<script type='text/javascript'>
function createMarker(point,html, hideMarker) {
//alert('createMarker');
var icon = new GIcon(G_DEFAULT_ICON);
icon.image = "http://chart.apis.google.com/chart?cht=mm&chs=24x32&chco=FFFFFF,008CFF,000000&ext=.png";
var tmpMarker = new GMarker(point, {icon: icon, hide: hideMarker});
GEvent.addListener(tmpMarker, "click", function() {
tmpMarker.openInfoWindowHtml(html);
});
return tmpMarker;
}
var map = new GMap2(document.getElementById("map_canvas"));
map.addControl(new GSmallMapControl());
var mapLatLng = new GLatLng({{ place.lat }}, {{ place.lon }});
map.setCenter(mapLatLng, 12);
map.addOverlay(new GMarker(mapLatLng));
// load initial markers from json array
var markers = [];
var initialBounds = map.getBounds();
for(var i = 0; i < places_json.places.length ; i++) {
var latlng = new GLatLng(places_json.places[i].lat, places_json.places[i].lon);
var html = "<strong><a href='/place/" + places_json.places[i].placesidx + "/" + places_json.places[i].area + "'>" + places_json.places[i].area + "</a></strong><br/>" + places_json.places[i].county;
var hideMarker = true;
if((initialBounds.getSouthWest().lat() < places_json.places[i].lat) && (places_json.places[i].lat < initialBounds.getNorthEast().lat()) && (initialBounds.getSouthWest().lng() < places_json.places[i].lon) && (places_json.places[i].lon < initialBounds.getNorthEast().lng()) && (places_json.places[i].placesidx != {{ place.placesidx }})) {
hideMarker = false;
}
var marker = createMarker(latlng, html, hideMarker);
markers.push(marker);
}
var markerCluster = new MarkerClusterer(map, markers, {maxZoom: 11});
</script>
解决方法:
您可能应该使用createMarker()方法在初始阶段创建所有标记,并将返回的GMarker对象存储在数组中.确保在创建标记时在GMarkerOptions中设置hide:true属性,以便默认情况下将它们创建为隐藏.
然后,您可以遍历新的GMarker数组,而不是遍历places_json.places.您可以使用GMarker.getLatLng()方法获取每个标记的坐标,以检查每个标记是否位于边界内.
最后只需调用GMarker.show()以获取位于边界内的标记,或者将GMarker.hide()调用以隐藏它们.
您可以消除每次地图移动中昂贵的标记破坏/创建.作为正面影响,这也将解决您的GInfoWindow问题.
内容总结
以上是互联网集市为您收集整理的javascript – 谷歌地图:记住打开信息窗口的标记的ID全部内容,希望文章能够帮你解决javascript – 谷歌地图:记住打开信息窗口的标记的ID所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。