Добавить прослушиватель кликов для нескольких объектов geojson-javascript

#javascript #google-maps

#javascript #google-карты

Вопрос:

Я хочу установить прослушиватели кликов для множества разных фигур на моей карте. Каждая фигура содержит кучу данных, которые я хочу показать, когда я нажимаю на нее.

 var newData = new google.maps.Data({
    map: map,
    style: map.data.getStyle()
});
for (var i = 0; i < shapes.length; i  ) {
    var userObject = JSON.parse(shapes[i].area);
    newData.addGeoJson(userObject);

    // It would be simplest to add a clicklistener here since i got access to the shapes[i] with the data to act on
    google.maps.event.addListener( /* ??? */, 'click', function (event) {
            alert("y");
        });
}
map.data.setMap(null);
map.data = newData;
  

Я попытался установить прослушиватель кликов для возвращаемого массива из addGeoJson (…), но, возможно, я неправильно подхожу к этому. Может быть, мне нужно как-то получить полигоны, а затем сделать это, как в этом официальном примере, или я думаю, что я мог бы сделать что-то хакерское с разными слоями.

Как бы вы это сделали, учитывая, что вы не можете изменить, что вы получаете кучу отдельных фрагментов GeoJSON? Могу ли я получить свой GeoJSON в виде полигонов при их добавлении?

Ответ №1:

Дальнейший путь, который я буду использовать, который, я думаю, сработает хорошо, это:

addGeoJson возвращает массив объектов. Используйте setProperty(name, newVal) для них и добавьте информацию позже, необходимую для действия щелчка. Извлеките данные с помощью getProperty(name)

Добавьте прослушиватель щелчков для всего объекта данных:

 google.maps.event.addListener(newData, 'click', function (event) {
    event.feature.forEachProperty(function (value, name) {
        alert("name: "   name   "value: "   value);
    })
});