Я пытаюсь создать картографическое приложение с Bing Maps с помощью кнопки, которая будет извлекать строку JSON и размещать булавки на карте в зависимости от центра карты.
Это работает нормально, но я столкнулся с двумя проблемами, которые мне трудно диагностировать.
Во-первых, когда я перемещаю карту после размещения булавок, большинство из них исчезают с карты, кроме 1-3. Я понял, что булавки все еще хранятся в map.entities, но не все отображаются.
Вторая проблема заключается в том, что у меня есть событие щелчка на булавке, и иногда, когда я нажимаю на булавку, она исчезает (а иногда снова появляется в другом месте на карте).
Вот мой код:
function addPin() {
map.entities.clear();
var pinImg = "images/MapPin.jpg";
var latLong = {};
var name;
for (var i = 0; i < factualJson.response.data.length; ++i) {
latLong['latitude'] = factualJson.response.data[i].latitude;
latLong['longitude'] = factualJson.response.data[i].longitude;
name = factualJson.response.data[i].name;
var pin = new Microsoft.Maps.Pushpin(latLong, {
icon: pinImg,
anchor: new Microsoft.Maps.Point(latLong['latitude'], latLong['longitude']),
draggable: true,
width: 48,
height: 48
});
Microsoft.Maps.Events.addHandler(pin, 'click', displayName);
pin.title = name;
pin.id = 'pin' + i;
map.entities.push(pin);
}
document.getElementById("arrayLength").innerHTML = "Number of locations: " + map.entities.getLength();
}
function displayName(e) {
document.getElementById("name").innerHTML = "";
if (this.target.id != -1) {
document.getElementById("name").innerHTML = this.target.title;
}
}
function boot() {
Microsoft.Maps.loadModule('Microsoft.Maps.Overlays.Style', { callback: getMap });
}
function getMap() {
map = new Microsoft.Maps.Map($gel("bingMap"), {
credentials: getKey(),
customizeOverlays: true,
enableClickableLogo: true,
enableSearchLogo: true,
showDashboard: true,
showBreadcrumb: true,
showCopyright: true,
zoom: 10,
labelOverlay: Microsoft.Maps.LabelOverlay.hidden
});
setGeoLocation();
//setTimeout(optimizeMap, 100);
window.onresize = resizeWin;
resizeWin();
}
В настоящее время я делаю ajax-вызов с кнопки, а функция обратного вызова вызывает «AddPin», который добавляет контакты на карту. Я подумал, что добавлю код инициализации карты на случай, если это будет уместно. В настоящее время boot() вызывается при загрузке тела.