2017-02-09 14 views
0

Глядя на эту функцию:Получить список признака в листовке layerGroup

function addNewFeatureToGeoJsonLayerGroup(newGeoJsonData) { 
    var newGeoJSONfeature = L.geoJson(newGeoJsonData); 
    myFeaturesMap[newGeoJsonData.properties.objectID] = newGeoJSONfeature; 
    myGeoJsonLayerGroup.addLayer(newGeoJSONfeature); 
} 

Источник: in-place Update Leaflet GeoJSON feature

Мне кажется, что вы должны:

  1. Создать новый слой
  2. Изменить слой как подходящий
  3. Добавьте этот слой в layerGroup (так что для каждой функции у вас есть один слой в layerGroup)

Я не могу увидеть что-либо на линиях getFeatures() для layerGroup. Нужно ли мне перебирать каждый слой для этого?

UPDATE: The L.geoJson API seems to be missing an API that would make it symmetric.

ответ

2

Не совсем уверен, что ваш вопрос ..

Если вы хотите, чтобы получить список дочерних слоев/функций в рамках данной группы слоев, то вы бы использовать layerGroup.getLayers() (работ? также с группой слоев GeoJSON).

Проблема возникает, когда вы хотите получить доступ к очень определенному дочернему слою без прямой ссылки на него, но только в некоторой форме идентификатора (обычно это свойство GeoJSON). В этой ситуации Leaflet не знает, какое свойство вы используете в качестве идентификатора, поэтому он не может предоставить метод «из коробки». Простым обходным путем является сохранение отдельного сопоставления/хеш-словаря ваших идентификаторов с соответствующими слоями в Листовке, как это делается в упоминавшемся вами source, а также в last post проблемы с листом, к которой вы ссылаетесь.

Обратите внимание, что он очень похож на то, как Layer Group работает внутри: он поддерживает хэш дочерних слоев, присваивая им внутреннее свойство _leaflet_id.

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

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