Как фильтровать данные GeoJSON / TopoJSON по координатам?

1

У меня есть большие файлы (~ 100 мб каждый) с данными GeoJSON/TopoJSON.

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

Таким образом, сами файлы загружаются из сети и анализируются должным образом, но когда дело доходит до их размещения на карте Leaflet, оно зависает и падает.

В качестве решения мне интересно, могу ли я фильтровать функции по их координатам? Я могу получить границы области просмотра карты.

Существуют ли методы, которые можно фильтровать с координатами, находящимися внутри границ?

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

  • 0
    Я использую TufJS для всех моих геопространственных расчетов в GeoJSON . Проверьте inside функцию: turfjs.org/docs/#inside
Теги:
leaflet
geojson
topojson

1 ответ

0

Прежде всего, у Leaflet есть метод getBounds(), который вы можете использовать, чтобы загружать только те функции, которые находятся внутри Bounding Box. Это может быть сделано путем запуска метода getBounds(), когда карта "перемещается" (масштабирование, перетаскивание), используя событие moveend.

Итак, в основном:

map.on('moveend', function() {
map.getBounds()
//erase the features you had on the map
//Then load on the map only the features with coordinates inside the Bounging Box. 
}

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

Кроме того, вы можете поэкспериментировать с кодом, например, загружая новые функции и стирая старые. Кроме того, вы можете загружать функции для ящика больше, чем Bounding Box.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню