Использование цикла для поиска данных в Leaflet - PullRequest
0 голосов
/ 20 декабря 2018

Есть ли способ найти данные из разных слоев и разных propertyName с?У меня есть несколько файлов данных GeoJSON с разными свойствами.На данный момент я могу искать только один GeoJSON.

Для зацикливания и вызова данных я использую этот код:

maplink_var = [source1.geojson,source2.geojson,etc]; 

var <?= $i['maplink_var']; ?> = new L.GeoJSON(<?= $i['maplink_var']; ?>, {
  style: function(feature) {
      ...
    },
  onEachFeature: function(feature, marker) {
      ...
    }
});

и ниже код для поиска данных:

var searchControl = new L.Control.Search({
  layer: source1,source2,source3,
  propertyName: ['propNameSource1','propNameSource2','propNameSource3'],
  marker: false,
  moveToLocation: function(latlng, title, map) {
    var zoom = map.getBoundsZoom(latlng.layer.getBounds());
    map.setView(latlng, zoom); // access the zoom
  }
});

searchControl.on('search:locationfound', function(e) {
  e.layer.setStyle({fillColor: '#3f0', color: '#0f0'});
  if(e.layer._popup) e.layer.openPopup();
}).on('search:collapsed', function(e) {
  featuresLayer.eachLayer(function(layer) { 
    featuresLayer.resetStyle(layer);
  }); 
});

map.addControl( searchControl ); 

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

enter image description here

1 Ответ

0 голосов
/ 21 декабря 2018

Как объяснено в документации layer является L.LayerGroup.Таким образом, вы можете передать несколько слоев следующим образом ( source ):

var searchControl = new L.Control.Search({
  layer: L.layerGroup([source1, source2, source3]),
  ...
})

Что касается propertyName: имя свойства должно быть одинаковым для всех файлов GeoJSON.Попробуйте сделать это при создании L.GeoJSON (не проверено):

onEachFeature: function(feature, layer) {
  const p = feature.properties
  p.title = p.propNameSource1 || p.propNameSource2 || p.propNameSource3 //create new property 'title'
}

title является значением по умолчанию для propertyName, поэтому вам даже не придется устанавливать его при создании L.Control.Search.

...