Информационное окно о полигонах в Bing Maps Android SDK

Я использую Bing Maps Android SDK и ищу способ щелкнуть по созданным мной многоугольникам и показать информационное окно. Я смог сделать это для канцелярской кнопки, но не для многоугольника. Я видел этот ответ , но мое приложение должно создавать сотни таких полигонов, и я ищу более быстрое решение, используя метод addHandler для полигонов. Я знаю, что это возможно для варианта AJAX v7 SDK, который является базовой основой Android SDK.

Код, который я попробовал для версии AJAX (, тестировался с использованием этого эмулятора .)

map.entities.clear(); 
latlon = map.getCenter(); 

var polygon = new Microsoft.Maps.Polygon([new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude+0.15), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15)], null);  
Microsoft.Maps.Events.addHandler(polygon, 'click', DisplayInfo);

map.setView( {zoom:10}); 
map.entities.push(polygon);

function DisplayInfo (e) {
    var vertices = e.target.getLocations();
    var verticeCenter = new Microsoft.Maps.Location(0,0);

    //Calculating location of center
    for (i=0; i

Однако я отправил аналогичный код в BingMapsAndroid.js из папки ресурсов SDK, но это не работает. Обработчик прилагается, как я проверял методом hasHandler. Прикосновения записываются, и их значения широты и долготы отправляются в журнал, но событие многоугольника не вызывается, даже если касание находится внутри многоугольника.

Функция проверки полигонов в BingMapsAndroid.js:

this.PolygonTest = function() {
    _map.entities.clear(); 
    latlon = new Microsoft.Maps.Location(1,1); 
    console.log("Polygon test function");
    var polygon = new Microsoft.Maps.Polygon([new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude+0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude+0.15), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude+0.05), new Microsoft.Maps.Location(latlon.latitude-0.1, latlon.longitude-0.05), new Microsoft.Maps.Location(latlon.latitude, latlon.longitude-0.15)], null);  

    try {
    Microsoft.Maps.Events.addHandler(polygon, 'click', function(e) { console.log("Polygon click!"); }); //This is never evoked
    Microsoft.Maps.Events.addHandler(_map, 'click', function(e) { var point = new MM.Point(e.getX(), e.getY()); var loc = e.target.tryPixelToLocation(point); console.log("lat: " + loc.latitude + ", lon: " + loc.longitude); });

    } catch(e) {
        alert("Error");
    }

    _map.setView( {zoom:10}); 
    _map.entities.push(polygon);

    if (Microsoft.Maps.Events.hasHandler(polygon,'click')) {
        console.log("Polygon has click handler."); //This works
    }

    //This function should be added to the click handler for polygon. I'll add it when I know the handler works.
    function DisplayInfo (e) {
        console.log("Polygon has been clicked.");
        var vertices = e.target.getLocations();
        var verticeCenter = new Microsoft.Maps.Location(0,0);
        for (i=0; i

5
задан Community 23 May 2017 в 11:50
поделиться