97 votes

Algorithme pour trouver tous Latitude Longitude endroits à l'intérieur d'une certaine distance à partir d'un Lat de Gnl emplacement

Étant donné une base de données de lieux avec la Latitude + Longitude endroits, tels que 40.8120390, -73.4889650, comment pourrais-je trouver tous les emplacements à l'intérieur d'une certaine distance d'un lieu spécifique?

Il ne semble pas très efficace pour sélectionner tous les emplacements à partir de la DB et ensuite passer par un par un, en obtenir la distance de l'emplacement de départ pour voir si elles sont à l'intérieur de la distance spécifiée. Est-il un bon moyen pour limiter le départ des endroits choisis à partir de la DB? Une fois que j'ai (ou pas?) une rétréci vers le bas emplacements, dois-je quand même passer par un par un pour vérifier la distance, ou est-il un meilleur moyen?

La langue je le fais ce dans n'importe pas vraiment. Merci!

43voto

Lior Kogan Points 8610

Commençons par Comparer la distance entre les latitudes. Chaque degré de latitude est d'environ 69 km (111 kilomètres) de distance. La gamme varie (en raison de la terre légèrement la forme ellipsoïde) à partir de 68.703 miles (110.567 km) au niveau de l'équateur à 69.407 (111.699 km) dans les pôles. La distance entre les deux endroits sera égale ou plus grande que la distance entre leurs latitudes.

Notez que ce n'est pas vrai pour les longitudes - la longueur de chaque degré de longitude est, dépend de la latitude. Toutefois, si vos données est limité à une certaine zone (un seul pays, par exemple) - vous pouvez calculer une valeur minimale et maximale des valeurs limites pour les longitudes ainsi.

Continuer une faible précision, rapide calcul de la distance qui supposent sphérique de la terre.

Voir ici

Cette méthode de calcul des exigences sont mimimal. Cependant, le résultat est très précis pour les petites distances.

Puis, si elle est à une distance donnée, plus ou moins, utiliser une méthode plus précise.

GeographicLib est la mise en œuvre plus précise, je sais, mais Vincenty formule d'inversion peut être utilisé aussi bien.

Si vous utilisez un SGBDR, définir la latitude de la clé primaire et la longitude comme une clé secondaire. Requête pour un intervalle de latitude, ou pour une latitude/longitude), comme il est décrit ci-dessus, puis calculer les distances exactes de l'ensemble des résultats.

Notez que les versions modernes de tous les principaux Sgbdr support géographique, les types de données et des requêtes en mode natif.

7voto

Gian Points 9459

PostgreSQL SIG extensions peuvent être utiles - comme dans, il peut déjà mettre en œuvre la plupart des fonctionnalités que vous pensez de la mise en œuvre.

5voto

Nikita Koksharov Points 1552

Essayez ceci pour la bonne solution:la Géolocalisation de Recherche

2voto

Alix Axel Points 63455

2voto

Zimbabao Points 5622

Ce que vous avez besoin est de la recherche spatiale. Vous pouvez utiliser Solr de la recherche Spatiale. Il a également obtenu de lat/type de données long construit dans, cochez ici.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X