Как я могу получить ссылку на полигон нажал?(Google Maps API v3) - PullRequest
6 голосов
/ 28 сентября 2011

Я установил несколько полигонов, просто нарисовал их на карте.Мне также удалось запустить console.log, когда на них нажали.Тем не менее, как мне узнать, какой полигон был фактически нажат?

Как вы можете видеть в моем примере кода, я сохраняю каждый объект в коллекции "lot", однако, щелкая их, я получаю толькоширота кликаЯ подумал, что мне может понадобиться перебрать мои полигоны и проверить, пересекает ли их точка, и таким образом выяснить, какой это полигон ... Есть ли более простое решение?

var lot = new google.maps.Polygon({
    paths: me.area,
    strokeColor: 'black',
    strokeOpacity: 0.35,
    strokeWeight: 1,
    fillColor: fillcol,
    fillOpacity: 0.35
});

lot.setMap(map);
var obj = {
    'id':me.id,
    'rented':me.rented,
    'area':lot
};

google.maps.event.addListener(lot, 'click', function(event) {
    console.log(event);
});

lots.push(lot);

Ответы [ 3 ]

13 голосов
/ 05 октября 2011

Почему бы не назначить каждому многоугольнику какое-либо свойство id при их создании, а затем просто использовать this.myID ? По правде говоря, вы можете повесить всю необходимую информацию на этот многоугольник.

var lot = new google.maps.Polygon({
        paths: me.area,
        strokeColor: 'black',
        strokeOpacity: 0.35,
        strokeWeight: 1,
        fillColor: fillcol,
        fillOpacity: 0.35
    });

    lot.setMap(map);

    var obj = {
        'id':me.id,
        'rented':me.rented,
        'area':lot
    };
    lot.objInfo = obj;

    google.maps.event.addListener(lot, 'click', function(event) {
        console.log(this.objInfo);
    });

    lots.push(lot);

Это было бы более эффективно, чем сравнение путей в цикле, или я что-то упустил? :)

8 голосов
/ 21 августа 2012

Если я смогу немного опоздать с другим решением, у меня возникла та же проблема, и я обнаружил, что вы можете определить пользовательские свойства для многоугольника.

Мой пример (который создает состояние на карте США.)

poly = new google.maps.Polygon({
    map_state_id: map_state_id,
    paths: pts,
    fillColor: colour,
    fillOpacity: 0.66,
    strokeWeight: 1,
    clickable:true
    });

В этом случае "map_state_id" является пользовательским свойством. Я определил его как идентификатор штата (1 для Алабамы, 2 для Аляски и т. Д.)

Затем, когда конкретное состояние будет щелкнуто позже, этот "map_state_id" может быть передан в функцию события.

google.maps.event.addListener(poly, 'click', function() 
    {
    var map_state_id = this.map_state_id; //retrieve correct state_id

    $.ajax(
        {
        type: "POST",
        url: "http://www...get_state_info.php",
        data: {state_id : map_state_id},
        dataType: "html",
        success: function(data)
            {
            $("#state_info").html(data); //display some info
            }                       
        });
    });

Я нашел это конкретное понятие в http://dominoc925.blogspot.com/2011/12/add-your-own-property-field-to-google.html

0 голосов
/ 29 сентября 2011

Оказалось, getPath () работает как шарм.Я не осознавал, что на самом деле передал ссылку на полигон на событие click, чтобы сопоставить это с моими сохраненными «лотами», я просто перебираю свои сохраненные лоты и сравниваю this.getPath с other.getPath, если они совпадают, я знаю, какой лот былщелкнул и теперь может отображать информацию, относящуюся к этому конкретному объекту.

Вот пример кода: (где parking - это массив объектов моей парковки, которые сами имеют массивы, содержащие объекты парковки)

google.maps.event.addListener(lot, 'click', function(event) {

     var myPath = this.getPath();

          for(var i = 0; i < parking.length; i++){
            for(var j = 0; j < parking[i].lots.length; j++){
                var lot = parking[i].lots[j];

                var otherPath = lot.poly.getPath();

                if(otherPath == myPath){
                    console.log(lot);
                    break;
                }
            }
          }

        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...