Domanda

Sto lavorando ad un'applicazione in cui uno dei requisiti è che sono in grado di eseguire operazioni di geocodifica inversa in tempo reale basate su dati GPS. In particolare, devo essere in grado di determinare lo stato / provincia su cui una coppia di latitudine, longitudine mappa e rilevare quando ci siamo spostati da uno stato / provincia a un altro.

Finora ho un paio di idee ma mi chiedevo se qualcuno avesse qualche idea su uno dei seguenti:

  • Qual è l'approccio migliore per affrontare questo problema in modo efficiente?
  • Dove si trova un buon posto per trovare e qual è il formato appropriato per i confini dello stato / provincia del Nord America

Come antipasto, ecco le due idee principali che ho:

  1. Suddividi il Nord America in una griglia con ciascun rettangolo nella griglia mappato a una particolare provincia di stato. Esegui una ricerca su questa tabella (che cresce rapidamente quanto più preciso vorresti essere) in base alla latitudine e quindi alla longitudine (o viceversa).
  2. Definisci i poligoni per ciascuno degli stati ed esegui una sorta di calcolo per determinare in quale poligono si trova una coppia lat / lon. Non sono sicuro di come procedere. Le mappe di immagini HTML vengono in mente come un modo per definire i limiti di uno stato / provincia.

Sto lavorando in Python per gli interessati o quelli che potrebbero avere una bella biblioteca che vorrebbero suggerire.

Per essere chiari ... Non ho accesso al web disponibile per me, quindi l'utilizzo di un servizio di geocodifica inversa esistente non è un'opzione in fase di esecuzione

È stato utile?

Soluzione

Suggerisco di utilizzare una variante della prima idea: utilizzare un indice spaziale . Un indice spaziale è una struttura di dati costruita da rettangoli, mappando lat / long al payload. In questo caso probabilmente mapperai i rettangoli su coppie stato-provincia. Un R-tree può essere una buona opzione. Ecco un pacchetto R-tree python . È possibile rilevare il roaming confrontando i risultati delle ricerche consecutive.

Altri suggerimenti

Ho creato un modulo di geocodifica inversa offline per i paesi: 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'}]

Vedrò se posso aggiungere dati per gli stati.

Starei lontano dall'implementare la tua soluzione da zero. Questa è un'impresa piuttosto grande e ci sono già degli strumenti là fuori per farlo. Se stai cercando un approccio open source (leggi: gratuito), dai un'occhiata a questo post del blog: Utilizzo di PostGIS per invertire il codice geografico .

Se riesci a ottenere i confini dello stato come poligoni (ad esempio, tramite OpenStreetMap), determinare lo stato corrente è solo un test point-in-poligono.

Se hai bisogno di dati di indirizzo, una soluzione offline sarebbe usare Microsoft Mappoint.

Puoi ottenere dati per tutti gli stati uniti da apri mappa stradale Potresti quindi estrarre i dati che bisogno come città o località in quale formato mai funziona meglio per la tua applicazione. Nota, sebbene la qualità dei dati sia buona, non è garantito che sia completamente accurato, quindi se hai bisogno di una precisione assoluta potresti dover cercare altrove.

Ho un database con tutti questi dati e alcuni strumenti di accesso. Ho ricavato il mio dai dati della tigre del censimento. Immagino che sarebbe sostanzialmente un'esportazione del mio database in sqlite e un po 'di traduzione del codice.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top