Filtrer par code postal ou d'autres stratégies de récupération de données basées sur la localisation

StackOverflow https://stackoverflow.com/questions/12823

  •  08-06-2019
  •  | 
  •  

Question

Mon petit site devrait regrouper la liste des éléments d'une table en utilisant l'emplacement de l'utilisateur actif comme filtre.Pense Liste Craigslist, où vous recherchez "dvd" mais les résultats ne proviennent pas de toute la base de données, ils sont filtrés par un emplacement que vous sélectionnez.Ma question comporte 2 niveaux :

  1. devrais-je aller à la Craigslist et demander aux utilisateurs d'utiliser un emplacement au niveau de la ville ?Mon problème avec cela est que vous devez générer ce qui me semble une liste d’emplacements codée en dur et faite à la main.
  2. devrais-je aller à la-zipCode.L'idée de simplement demander à l'utilisateur de saisir son code postal, puis de regrouper tous les éléments qui se trouvent au même endroit ou à une certaine distance de son code postal.

Il me semble préférer la méthode du code postal car elle semble une solution plus élégante, mais comment diable créer une base de données de tous les codes postaux et implémenter la fonction qui, étant donné le code postal 12345, obtient tous les codes postaux à 1 mile de distance ?

cela devrait être une "tâche" assez courante car de nombreux sites ont un besoin similaire au mien, j'espère donc ne pas réinventer la roue ici.

Était-ce utile?

La solution

Obtenir une base de données de codes postaux ne pose aucun problème.Vous pouvez essayer celui-ci gratuitement :http://zips.sourceforge.net/

Bien que je ne sache pas à quel point il est actuel, vous pouvez également utiliser l'un des nombreux fournisseurs.Nous avons un abonnement annuel à ZipCodeDownload.com, et pour peut-être 100 $, nous recevons des mises à jour mensuelles avec les dernières données du code postal avec la latitude/longitude du centroïde du code postal.

En ce qui concerne l'interrogation de tous les zips dans un certain rayon, vous aurez besoin d'une sorte de bibliothèque spatiale.Si vous disposez simplement d'une table de zips avec lats/longs, vous aurez besoin d'un mécanisme orienté base de données.SQL Server 2008 intègre cette fonctionnalité, et il existe bibliothèques open source et bibliothèques commerciales cela ajoutera de telles fonctionnalités à SQL Server 2005.La base de données open source PostgreSQL possède un projet, PostGIS, qui ajoute cette fonctionnalité à cette base de données.C'est ici: http://postgis.refractions.net/

D'autres plates-formes de bases de données ont probablement des projets similaires, mais ce sont ceux-là que je connais.Avec l'une de ces bibliothèques basées sur une base de données, vous devriez pouvoir interroger directement n'importe quel code postal (ou toute ligne de toute sorte comportant des colonnes lat/longue) dans un rayon donné.

Si vous souhaitez emprunter un itinéraire différent, vous pouvez utiliser des outils spatiaux avec une bibliothèque de cartographie.Il existe également des options open source, telles que SharpCarte et beaucoup d'autres (Google peut vous aider) qui peut utiliser les cartes gratuites Tiger pour les États-Unis comme source de données.Cependant, cet itinéraire est un peu plus compliqué et peut-être moins performant si vous n'avez besoin que d'une recherche de rayon.

Enfin, vous souhaiterez peut-être vous tourner vers un service Web.Ceci, comme vous le dites, est un besoin courant, et j'imagine qu'il existe un certain nombre de services Web ob auxquels vous pouvez vous abonner et qui peuvent fournir tous les codes postaux dans un rayon donné à partir d'un code postal fourni.Une recherche rapide sur Google a donné ceci :http://www.zip-codes.com/free-zip-code-tools.asp#radiusMais il y a BEAUCOUP de ressources disponibles pour la recherche à propos de ce sujet.

Autres conseils

comment diable peut-on [...] implémenter la fonction qui, étant donné le code postal 12345, obtient tous les codes postaux à 1 mile de distance ?

Voici un exemple sur la façon de procéder :

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

Juste pour être technique...PostGIS n'est pas un projet de la communauté Postgres...il s'agit d'un projet autonome construit sur Postgres.Si vous avez besoin d'aide ou d'assistance avec PostGIS, vous souhaiterez accéder à sa communauté plutôt qu'à Postgres.

Vous pouvez utiliser PostGIS.De plus, j'ai utilisé les bibliothèques de cartographie de deCarta.Ils disposent d’une technologie qui vous permet de géolocaliser n’importe quel type de données arbitraire.Ensuite, vous pouvez les interroger spatialement.

clause de non-responsabilité:Je travaille pour deCarta

Ne serait-il pas plus efficace de simplement déterminer quelles villes se trouvent dans un rayon de 1,6 km et de stocker ces informations dans un tableau ?Vous n’êtes alors pas obligé d’effectuer des calculs dans la base de données en permanence.

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