Executando verificação de segurança...
1

Como falaram, para conseguir fazeru buscas mais rápidas, você vai precisar mudar a estrutura de dados que você salva os dados, e para isso vai ter um pré processamento para criar essa estrutura nova.

Se for er que fazer muitas queries desse tipo, faz sentido fazer esse pré processamento, se forem poucas queries, uma busca linear já resolve seu problema

Agora, vamos falar sobre os algoritmos a serem utilizados.

Não sou expert em geometria computacional, que é a área da computação que estuda problemas desse tipo, mas existem tipos de árvores específicas para esse problema, e os algoritmos podem ficar complexos. Recomendo dar uma olhada nessa página da wikipedia https://en.wikipedia.org/wiki/Nearest_neighbor_search#Space_partitioning e nessa resposta do Stack Overflow https://stackoverflow.com/a/1901885

Como você está usando node, imagino que alguma biblioteca no NPM com esses algoritmos já resolvam, dá uma olhada em https://www.npmjs.com/search?q=nearest+neighbor, mas lembra que no seu caso o cálculo da distância não é a distância euclidiana, esse cálculo envolve cálculos trigonométricos, e a biblioteca tem que levar isso em conta ou ser flexível para você poder criar a função de distância que vc queira.

Bônus:
O chat GPT ainda deu essas sugestôes:

Árvore KD (k-dimensional tree): Uma estrutura de dados comum para problemas de nearest neighbor search é a árvore KD. Ela divide os dados em uma estrutura de árvore binária, permitindo que você faça buscas mais rápidas do que uma busca linear. No caso de coordenadas geográficas, essa árvore pode ser ajustada para trabalhar com distâncias geográficas (não euclidianas). Há implementações em Node.js, como a kd-tree-javascript que você pode personalizar para usar a função de Haversine.

  1. Bibliotecas Node.js:

turf.js: Embora você já esteja usando o turf, que é excelente para cálculos geoespaciais, você pode combiná-lo com uma estrutura de dados mais eficiente como as mencionadas acima. Há também o módulo turf.nearestPoint que pode ser usado se os pontos estiverem pré-processados.

geokdbush: Outra biblioteca recomendada é o geokdbush, que combina uma árvore KD com uma implementação otimizada para buscas de nearest neighbor em coordenadas geográficas. Ele usa flatbush para indexação espacial e é muito rápido.

Carregando publicação patrocinada...
1