Я пытаюсь создать приложение сопоставления с Bing-картами с помощью кнопки, которая будет извлекать строку 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() вызывается при загрузке тела.