Google maps Spiderfier, карта не отвечает после setmap(null)
У меня есть функция, которая загружает мою карту, чтобы держать мою статическую карту.
<script>
var delArray = new Array();
var gm;
var map;
var iw;
var oms;
window.onload = function(){
gm = google.maps;
map = new gm.Map(document.getElementById('map_canvas'), {
mapTypeId: gm.MapTypeId.TERRAIN,
center: new gm.LatLng(-29.335205, 24.793563),
scrollwheel: false,
zoom: 6
});
iw = new gm.InfoWindow();
oms = new OverlappingMarkerSpiderfier(map,
{markersWontMove: true, markersWontHide: true});
}
</script>
Затем я использую другую функцию для построения данных моего паука.
<script>
function spider(mapData){
var usualColor = 'eebb22';
var spiderfiedColor = 'ffee22';
var iconWithColor = function(color) {
return 'http://chart.googleapis.com/chart?chst=d_map_xpin_letter&chld=pin|+|' +
color + '|000000|ffff00';
}
var shadow = new gm.MarkerImage(
'https://www.google.com/intl/en_ALL/mapfiles/shadow50.png',
new gm.Size(37, 34), // size - for sprite clipping
new gm.Point(0, 0), // origin - ditto
new gm.Point(10, 34) // anchor - where to meet map location
);
oms.addListener('click', function(marker) {
iw.setContent(marker.desc);
iw.open(map, marker);
});
oms.addListener('spiderfy', function(markers) {
for(var i = 0; i < markers.length; i ++) {
markers[i].setIcon(iconWithColor(spiderfiedColor));
markers[i].setShadow(null);
}
iw.close();
});
oms.addListener('unspiderfy', function(markers) {
for(var i = 0; i < markers.length; i ++) {
markers[i].setIcon(iconWithColor(usualColor));
markers[i].setShadow(shadow);
}
});
var bounds = new gm.LatLngBounds();
for (var i = 0; i < mapData.length; i ++) {
var datum = mapData[i];
var loc = new gm.LatLng(datum[0], datum[1]);
bounds.extend(loc);
var marker = new gm.Marker({
position: loc,
title: datum[2],
animation: google.maps.Animation.DROP,
map: map,
icon: iconWithColor(usualColor),
shadow: shadow
});
marker.desc = datum[3];
oms.addMarker(marker);
delArray.push(marker);
}
map.fitBounds(bounds);
// for debugging/exploratory use in console
window.map = map;
window.oms = oms;
}
</script>
И еще, чтобы убрать маркеры с карты:
<script>
function delMe(){
if(delArray){
for(i =0; i <= delArray.length; i++){
delArray[i].setMap(null);
}
this.delArray = new Array();
}
}
</script>
Мои данные карты (mapData) поступают из php-скрипта и передаются через Jason. И это также, где я вызываю свою функцию удаления прямо перед тем, как я вызываю свою функцию spider (map). Это я делаю, чтобы очистить карту, прежде чем передать новые данные.
$( document ).ready(function() {
delMe();
var pdata = $js_array;
spider(pdata);
});
Теперь моя проблема в том, что все данные отображаются отлично, но после вызова функции delMe() она очищает маркеры на 100%, но моя карта перестает отвечать на запросы, она не загружает новые данные при вызове функции spider() с новыми данными.
Я могу преодолеть эту проблему, перезагрузив / создав карту снова, но я хочу избежать этого и использовать только статическую карту. И если я не удаляю маркеры, я просто заполняю карту сотнями маркеров, смешивая старое и новое.
Я немного нуб, когда дело доходит до javascript/jquery, любая помощь будет высоко ценится!
1 ответ
Похоже, вы пропустили OMS removeMarker
позвоните в ваш delMe
функция, которая должна выглядеть примерно так:
function delMe(){
if (delArray){
for (i =0; i <= delArray.length; i++){
oms.removeMarker(delArray[i]);
delArray[i].setMap(null);
}
this.delArray = [];
}
}
(Возможно, у вас есть и другие проблемы, но вот начало).
Из того, что вы пишете, не понятно, но используете ли вы консоль разработчика JS? Для получения дополнительной информации воспользуйтесь "консолью разработчика [вашего браузера]" - она позволяет узнать, не приводят ли ошибки к тому, что ваша карта перестает отвечать на запросы.