9
votes

Coordonnées données, comment puis-je obtenir tous les codes postaux dans un rayon de 10 milles?

J'ai un endroit (latitude et longitude). Comment puis-je obtenir une liste de codes postaux qui sont partiellement ou complètement dans le rayon de 10 milles de mon emplacement?

La solution peut être un appel à un service Web bien connu (Google Maps, Bing Maps, etc ...) ou une solution de base de données locale (le client a SQL Server 2005) ou un algorithme.

J'ai vu le quelque peu Question similaire , mais toutes les réponses relatifs à l'utilisation de fonctionnalités géographiques SQL Server 2008 qui ne sont pas disponibles pour moi.


1 commentaires

Dans quel pays essayez-vous de trouver des codes postaux?


3 Réponses :


5
votes

La plupart des recherches travaillent avec des centroïdes. Afin de travailler avec des codes postaux partiels étant dans les 10 milles, vous devrez acheter une base de données de polygones de code-zip (*). Ensuite, implémentez un algorithme qui vérifie les codes postaux avec des sommets dans votre rayon de 10 milles. Pour être effectué correctement, vous utilisez la formule Haversine pour la mesure de la distance. Avec certaines structures de données intelligentes, vous pouvez réduire considérablement l'espace de recherche. De même, les recherches peuvent être grandement accélérées en stockant et en comparant initialement contre des étendues zipcoe (nord, ouest, est, sud).

(*) Remarque: Les codes postaux techniquement ne sont pas des polygones! Je sais que nous pensons tous qu'ils comme ça, mais ils sont vraiment des collections de points de données (adresses de rue) et c'est ainsi que l'USPS les utilise vraiment. Cela signifie que les codes postaux peuvent inclure d'autres codes postaux; Les codes postaux peuvent être constitués de plusieurs "polygones"; et les codes postaux peuvent chevaucher d'autres codes postaux. La plupart de ces situations ne devraient pas être un problème, mais vous devrez gérer des codes postaux pouvant être définis comme plusieurs polygones.


0 commentaires

5
votes

Premièrement, vous aurez besoin d'une base de données de tous les codes postaux et de leurs latitudes et longitudes correspondantes. En Australie, il n'y a que quelques milliers d'entre eux (et les informations sont facilement disponibles), mais je suppose que c'est probablement une tâche plus difficile aux États-Unis.

Deuxièmement, étant donné que vous savez où vous êtes, et vous connaissez le rayon Vous recherchez, vous pouvez rechercher tous les codes postaux qui tombent dans ce rayon. Quelque chose de simple écrit en PHP serait comme suit: (excuses ce n'est pas en C #) xxx


1 commentaires

Angryhacker: Luke a posté une implémentation PHP de la formule Haversine que j'ai mentionnée.



10
votes

Démarrer avec une base de données de code postal contenant des codes postaux et leurs coordonnées de latitude et de longitude correspondantes:

http://www.zipcodedownload.com/products/product/z5commercial/standard/overview/

Pour obtenir la distance entre la latitude et la longitude, vous aurez besoin d'un Formule de bonne distance. Ce site a quelques variations:

http://www.meridianworlddata.com / Distance-Calculation /

La formule "Grande Distance du cercle" est un peu extrême. Celui-ci fonctionne assez bien de mon expérience: xxx

Votre requête SQL ressemblera à ce que ceci: xxx

bien chance!


4 commentaires

C'était en fait une bonne réponse ... Toutes les distances sont dans un quart de mile que j'ai imaginé ... +1


Superbe réponse +1 - Pouvez-vous me dire où vient les mathématiques? Que représentent les nombres décimaux?


Le lien vers Meridianworld.com n'est plus valide, alors je l'ai mis à jour à une version mise en cache. Je crois que les nombres magiques proviennent d'une approximation de distance qui calcule les distances à la surface d'une sphère. Il existe des formules plus précises, mais pour votre scénario de base de "localisateur de magasins", celui-ci a bien fonctionné pour moi.


@dana on dirait que le lien fonctionne toujours si vous déposez la prolongation .asp ( MeridianworldData.com/Distance- Calcul )