Turf - получить все функции геоджсона, которые находятся в пределах досягаемости точки

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

Как я мог сделать это с газоном? Я думал перебрать все точки и сравнить расстояние с turf.distance(from, to, options);.

Но, возможно, есть лучший способ сделать это.

Это база с картой на заднем плане, но я хотел бы рассчитать ее без использования какой-либо структуры карты.

В этом примере он должен возвращать характеристику улицы + ближайшее расстояние.

введите здесь описание изображения

Спасибо!


person vinni    schedule 29.04.2019    source источник
comment
Вы разобрались с этим, и если да, то не могли бы вы опубликовать какое-нибудь решение?   -  person Elijah    schedule 03.02.2020
comment
@Elijah К сожалению, я не нашел лучшего решения. Итак, я сделал: let centerDistance = turf.distance(centerNet, currentPosition, { units: 'meters' }); и перебрал все точки.   -  person vinni    schedule 07.02.2020


Ответы (1)


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

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

Например (при условии, что центр вашего круга находится в [centerLong, centerLat]):

const KDBush = require('kdbush');
import * as geokdbush from 'geokdbush';

getLong = (p) => p.geometry.coordinates[0];
getLat = (p) => p.geometry.coordinates[1];

//build an index from all interesting (point) features  
const geoIndex = new KDBush(interestingFeaturesGeoJson.features, getLong, getLat);

//find the nearest ones to a specific point
const nearestPoints = geokdbush.around(geoIndex, centerLong, centerLat, 
        maxFeaturesToReturn, radiusInKm);
person etov    schedule 26.05.2020