Question

Je travaille sur une application dans laquelle l'une des exigences est que je puisse effectuer des opérations de géocodage inversé en temps réel sur la base de données GPS. En particulier, je dois être en mesure de déterminer l’état / la province dans lequel une paire latitude / longitude est cartographiée et de détecter le moment où nous sommes passés d’un état / d’une province à l’autre.

J'ai quelques idées jusqu'à présent, mais je me suis demandé si quelqu'un avait des idées sur l'un des points suivants:

  • Quelle est la meilleure approche pour traiter ce problème de manière efficace?
  • Où trouver un bon endroit et quel est le format approprié pour les frontières nord-américaines

Pour commencer, voici mes deux idées principales:

  1. Découpez l'Amérique du Nord en une grille avec chaque rectangle de la carte en correspondance avec une province particulière. Effectuez une recherche sur cette table (qui croît rapidement à mesure que vous souhaitez être plus précis) en fonction de la latitude puis de la longitude (ou inversement).
  2. Définissez des polygones pour chacun des états et effectuez une sorte de calcul pour déterminer dans quel polygone se trouve une paire lat / lon. Je ne sais pas exactement comment s'y prendre. Les cartes-images HTML me viennent à l’esprit comme un moyen de définir les limites d’un État ou d’une province.

Je travaille en python pour les personnes intéressées ou pour celles qui auraient une bibliothèque intéressante à suggérer.

Pour être clair ... Je ne dispose pas d'un accès Web, par conséquent, l'utilisation d'un service de géocodage inversé existant n'est pas une option à l'exécution

Était-ce utile?

La solution

Je suggère d'utiliser une variante de votre première idée: utilisez un index spatial . Un index spatial est une structure de données construite à partir de rectangles, mappant lat / long sur la charge utile. Dans ce cas, vous allez probablement mapper des rectangles sur des paires État-province. Un R-tree peut être une bonne option. Voici un package python R-tree . Vous pouvez détecter l'itinérance en comparant les résultats de recherches consécutives.

Autres conseils

J'ai créé un module de géocodage inversé hors ligne pour les pays: https://bitbucket.org/richardpenman/reverse_geocode

>>> import reverse_geocode 
>>> coordinates = (-37.81, 144.96), (31.76, 35.21)
>>> reverse_geocode.search(coordinates)
[{'city': 'Melbourne', 'code': 'AU', 'country': 'Australia'},
 {'city': 'Jerusalem', 'code': 'IL', 'country': 'Israel'}]

Je verrai si je peux ajouter des données pour les états.

Je voudrais éviter de mettre en œuvre votre propre solution à partir de zéro. C'est une très grosse entreprise et il existe déjà des outils pour le faire. Si vous recherchez une approche open source (lire: gratuit), consultez cet article de blog: Utilisation de PostGIS pour inverser le géocodage .

Si vous pouvez obtenir des limites d'état sous forme de polygones (par exemple, via OpenStreetMap), la détermination de l'état actuel n'est qu'un test de point dans un polygone.

Si vous avez besoin de données d'adresse, une solution hors connexion consisterait à utiliser Microsoft Mappoint.

Vous pouvez obtenir des données pour l’ensemble des États-Unis auprès de ouvrir un plan des rues . Vous pouvez ensuite extraire les données que vous avez tels que la ville ou l’état dans le format qui convient le mieux à votre application. Notez que bien que la qualité des données soit bonne, l’exactitude n’est pas garantie; vous devrez donc peut-être chercher ailleurs.

J'ai une base de données avec toutes ces données et des outils d'accès. J'ai créé les miens à partir des données du tigre du recensement. J'imagine qu'il s'agirait essentiellement d'une exportation de ma base de données vers SQLite et d'un peu de traduction de code.

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