Question

De nos jours, la plupart des restaurants et autres commerces ont un " Trouver des lieux " fonctionnalité sur leurs sites Web qui répertorie les emplacements les plus proches pour une adresse donnée / Zip. Comment cela est-il mis en œuvre? Faire correspondre le code postal à la base de données est un moyen simple, mais ne fonctionne pas toujours. Par exemple, il peut y avoir une branche plus proche de l’emplacement donné, mais elle peut se trouver dans un zip différent. Une approche qui me vient à l’esprit est de convertir le code postal / l’adresse donnée en coordonnées cartographiques et de répertorier toutes les branches tombant dans un rayon prédéfini. Vos commentaires sur la manière dont cela aurait été mis en place sont les bienvenus. Si possible, fournissez des détails plus détaillés sur la mise en œuvre, tels que tous les services Web utilisés, etc.,

.
Était-ce utile?

La solution

De nombreux cadres géospatiaux vous aideront à résoudre ce problème. Dans le monde géospatial, un code postal est juste un "polygone", qui est juste une zone sur une carte qui définit des limites claires (pas un polygone au sens mathématique). Dans SQL 2008 spatial, par exemple, vous pouvez créer un nouveau polygone basé sur votre polygone d'origine. Vous pouvez ainsi créer dynamiquement un polygone qui est votre code postal prolongé d’une certaine distance à chaque point. Il prend en compte la forme originale du code postal. Avec une adresse, c’est simple, vous créez simplement un polygone, qui est un cercle autour du point. Vous pouvez ensuite faire des requêtes vous donnant tous les points dans le nouveau polygone que vous avez créé dans les deux méthodes.

Beaucoup de ces sites ne font que cela. Ils vous donnent tous les points dans un polygone étendu de 5 milles, et ensuite peut-être un polygone étendu de 10 milles, et ainsi de suite. Ils ne calculent pas réellement la distance. La plupart des contenus Web ne sont pas du tout sophistiqués.

Vous pouvez voir quelques exemples de base ici pour obtenir l'idée générale de ce dont je parle.

Autres conseils

Il existe une base de données standard de code postal / emplacement disponible. Voici une version au format Access qui inclut le lat / long de le code postal ainsi que d'autres informations. Vous pouvez ensuite utiliser les extensions SIG PostgreSQL pour effectuer des recherches sur les emplacements, par exemple.

(en supposant bien sûr que vous extrayiez la base de données d'accès et l'insériez dans une base de données plus conviviale comme PostgreSQL)

Commencez par géocoder l'adresse en la traduisant (généralement) en latitude et en longitude. Ensuite, vous effectuez une requête sur le voisin le plus proche sur votre base de données pour les points d'intérêt.

La plupart des index spatiaux ne supportent pas directement les requêtes du voisin le plus proche. Par conséquent, l'approche habituelle consiste à interroger un cadre de sélection de taille raisonnable avec le point géocodé au centre, puis à trier les résultats en mémoire pour sélectionner le plus proche. les uns.

Comme vous l'avez dit. Convertissez une adresse / un fichier ZIP en coordonnées universelles 2D et comparez-les à d'autres emplacements connus. Choisissez le plus proche. :) Je pense que certaines bases de données (Oracle, MSSQL 2008) offrent même des fonctions qui peuvent aider, mais je ne les ai jamais utilisées.

Je pense que c'est assez universel. Ils prennent l’adresse ou le code postal et le transforment en une "coordonnée cartographique". (diffère selon l’implémentation, probablement un lat / long) puis en utilisant les "coordonnées de la carte" des éléments de la base de données, il est facile de calculer une distance.

Notez que certaines implémentations médiocres convertissent le code postal en une coordonnée représentant le centre de la zone du code postal, ce qui donne parfois de mauvais résultats.

Vos idées sur la manière de procéder sont la suivante: je le ferais probablement. Vous pouvez géocoder le co-oridiné pour le zip, puis faire des calculs en fonction de cela. Je sais que SQL Server 2008 dispose de nouvelles fonctionnalités spéciales pour faciliter les requêtes basées sur ces coordonnées lon / lat géocodées.

Il existe des algorithmes géométriques et / ou des infrastructures de données qui prennent en charge les requêtes O (...) inférieures les plus proches sur des données de points, de lignes et / ou de régions.

Voir ce livre pour obtenir un exemple d'informations sur certains d'entre eux, comme: Diagrammes de Voronoï, arbres quadrilatères, etc.

Cependant, je pense que les autres réponses apportées ici sont correctes dans la plupart des cas que vous trouvez dans les logiciels actuels:

  1. géocoder (un seul point dans) la zone de recherche
  2. requête du cadre de sélection pour obtenir un premier stade
  3. en mémoire tri / sélection

J'avais une table pour compiler une table de base de données tous les 6 mois. Elle contenait 3 colonnes. Je l'utilisais pour quelques clients en Australie. Elle contenait environ 40 000 lignes, très légère pour exécuter une requête. cela est assez rapide, si vous cherchez simplement à obtenir quelque chose de concret pour un client

  1. Code postal de
  2. Code postal à
  3. Distance

    SELECT Store_ID, Store_AccountName, Store_PostalCode, Store_Address, Store_Suburb, Store_Phone, Store_State, Code_Distance FROM Store, (SELECT Code_To comme Code_To, Code Code à partir de WHERE code_From = @PostalCode UNION PostalCode UNION ALL SELECT @PostalCode As Code_To, 0 As Code_Distance) As Code WHERE Store_PostalCode = Code_To AND Code_Distance < = @Distance ORDER BY Code_Distance

Il existe peut-être de nombreuses optimisations pour accélérer cette requête!.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top