Я использую Leaflet Search and Fuse. js для поиска по нескольким слоям листовок и множеству свойств feature.properties в каждом из них. Наконец-то код заработал (но он действительно беспорядочный). Единственная проблема в том, что поскольку я использую filterData, он показывает ВСЕ маркеры, когда я ищу что-либо, а не точные совпадения.
Любой способ показать только точные совпадения?
var fuseOptions = {
shouldSort: true,
tokenize: true,
threshold: 0,
location: 0,
maxPatternLength: 32,
minMatchCharLength: 2,
keys: ['properties.myKey']
};
var fuse = new Fuse(city.features.concat(village.features.concat(gateway.features.concat(trade.features.concat(danger.features.concat(connect.features.concat(forest.features.concat(mine.features.concat(office.features.concat(farm.features.concat(fish.features.concat(annex.features)))))))))), fuseOptions), {
keys: [
'properties.name',
'properties.prod1',
'properties.extraprod1',
'properties.extraprod2',
'properties.extraprod3',
'properties.extraprod4',
'properties.extraprod5',
'properties.buff',
//'properties.operator'
]
});
L.control.search({
initial: false,
layer: allLayers,
collapsed: false,
casesensitive: false,
propertyName: 'name',
container: 'findbox',
filterData: function(text, records) {
var jsons = fuse.search(text),
ret = {}, key;
for(var i in jsons) {
key = jsons[i].properties.name;
ret[ key ]= records[key];
}
console.log(jsons,ret);
return ret;
}
})
.on('search:locationfound', function(e) {
e.layer.openPopup();
})
.addTo(map);