Geocodifica degli indirizzi USA che non possono essere inviati su Internet?


46

Per un progetto unico, devo geocodificare alcune migliaia di indirizzi. In passato ho usato varie risorse online per questo tipo di cose (ad esempio, l'API di Google Maps), ma gli indirizzi con cui sto lavorando devono essere mantenuti riservati, il che significa che non è possibile inviarli su Internet, a meno che non ci sia un po 'di ferro garanzia di privacy privata. Quali altre opzioni ho?


4
Esiste una località specifica in cui desideri geocodificare? Ad esempio, Australia, Stati Uniti, uno stato specifico, ecc.
segna il

Bella domanda: sono interessato in generale agli Stati Uniti, in particolare al Colorado, alle contee di Front Range.
Matt Parker,

1
Vorrei davvero aprire una rapida discussione con RST, so che in quell'area hanno un potente GIS e probabilmente potrebbero darti supporto diretto. Altrimenti; Geocoder :: US è un'ottima opzione. Puoi eseguirlo internamente e non devi rischiare che i tuoi dati passino attraverso il cavo.
DEWright,

@DEWright, questa è un'idea interessante - ancora di più per un'altra mia domanda . Grazie!
Matt Parker,

Risposte:



10

Se l'utilizzo dell'API di geocodifica di Google o di un'altra fonte online è la tua preferenza piuttosto che le opzioni locali, ti suggerirei di esaminare il Tor Project (facilmente installabile tramite il pacchetto chiamato "Bundle Vidalia").

Tor ti protegge facendo rimbalzare le tue comunicazioni su una rete distribuita di relè gestiti da volontari in tutto il mondo: impedisce ... ai siti che visiti di apprendere la tua posizione fisica.

Insieme all'iniezione di indirizzi casuali e all'utilizzo di ssl (https) per crittografare le comunicazioni ai loro endpoint (assicurati di farlo anche tu), non riesco a pensare a un modo più sicuro per geocodificare in remoto. Qualunque sia il servizio di geocodifica che stai usando non sarà mai in grado di identificare da dove provengono le richieste, e con https nessun altro lo farà. Nota: non utilizzare un servizio di geocodifica che richiede una chiave API per questo, o non sarai più anonimo. (Google non richiede più una chiave API).

Un 'vantaggio' secondario di questa procedura è che non sarai più limitato a nessun numero di richieste di geocodifica, poiché le tue richieste sembreranno provenire da più indirizzi IP. Tuttavia, non consiglio o approvo l'abuso di queste adorabili API gratuite! La velocità sarà comunque limitata se l'API limita la velocità (sebbene la velocità di trasmissione tramite Tor sia un po 'più lenta rispetto alla connessione diretta).

Case study in Python - Dopo aver installato il bundle Vidalia e aver eseguito il proxy su 127.0.0.1:8118 (impostazione predefinita), in Python 2.7 o versioni successive è possibile impostare un proxy https urllib2 utilizzando:

import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")

Nota che i proxy urllib2 non funzionano con https almeno fino a Python 2.7 o giù di lì, quindi questo metodo funziona solo con le versioni recenti di Python. Assicurati di avere 'https' (non 'http') in entrambe le posizioni nell'esempio sopra. L'ho provato solo con Python 2.7.1.

Vidalia cambia la tua identità / origine dell'indirizzo IP apparente ogni 10 minuti, ma se riscontri tassi lenti o altri problemi (errori di quota superata) o se sei particolarmente paranoico e vuoi cambiare la tua identità più frequentemente, puoi cambiare la tua identità Tor usando qui il codice python (leggermente modificato di seguito). Dovrai cambiare la password Tor in una statica (piuttosto che una generata casualmente) inserendo le impostazioni di Vidalia. Potrebbe anche essere necessario riavviare Vidalia dopo tutte le modifiche.

p = "MySuperSecurePassword"
def renewTorIdentity():
    success = False
    try:
        s = socket.socket()
        s.connect(('localhost', 9051))
        s.send('AUTHENTICATE "' + p + '"\r\n')
        resp = s.recv(1024)
        if resp.startswith('250'):
            s.send("signal NEWNYM\r\n")
            resp2 = s.recv(1024)
            if resp2.startswith('250'):
                success = True
    except:
        success = False
    return success

4
Questo non mantiene gli indirizzi riservati, vero? La posizione fisica della macchina che invia la query è irrilevante (non riservata) qui.
underdark

4
Per la maggior parte degli scopi, la posizione fisica della macchina che invia la query è molto importante per proteggere l'anonimato dei dati inviati a un servizio di geocodifica. Supponiamo che un computer dell'Istituto per lo studio di X invii una richiesta di geocodifica per 1000 indirizzi. Si potrebbe (almeno teoricamente) identificare quegli indirizzi come contenenti individui con malattia X. Al contrario, gli indirizzi mescolati con migliaia di richieste casuali da molti utenti e provenienti da più indirizzi IP che non corrispondono a nessun utente (la situazione Tor) non sono identificabili rispetto allo scopo.
Victor Van Hee,

L'invio di dati a Google (tramite Tor o altro) è un problema di privacy fondamentale. Google non offre la "garanzia ironica della privacy".
Nicolas Raoul,

7

Un'opzione è utilizzare Geo-Coder-US , che è un modulo Perl open source che utilizza i dati Tiger / Line del censimento degli Stati Uniti per geocodificare. Non l'ho usato personalmente, ma sembra eccellente. Il link sopra include una bella panoramica e un link a una versione che ha già i file del censimento necessari assemblati.


6

La libreria Geokit può utilizzare qualsiasi Google, Yahoo, Geocoder.us, Geocoder.ca e Geonames. È scritto in Ruby e c'è anche una biblioteca gemella per i tuoi progetti Ruby on Rails:

http://geokit.rubyforge.org/

Per preservare la privacy, è possibile diffondere le query a tutti i fornitori separandole in set che hanno meno probabilità di essere collegati alle proprie attività. Puoi anche iniettare rumore nei tuoi indirizzi aggiungendo indirizzi reali da una rubrica telefonica online. E ti suggerisco di eseguire questo script da vari luoghi, come gli internet café, combinando i risultati alla fine.

L'unico modo per preservare veramente la tua privacy è scaricare l'intero set di dati ed eseguire lo script contro di esso. C'è il sistema Nominatim di OpenStreetMap. Non è completo per tutte le città, ma è possibile utilizzarlo per ridurre l'elenco di indirizzi inviati ad altri fornitori.


5

Sebbene sia ancora nelle prime fasi di sviluppo, http://openaddresses.org/ mira a fornire un database aperto di indirizzi in tutto il mondo e servizi di geocodifica associati.

Sebbene non privato, la natura di un database di indirizzi aperto potrebbe significare che è disponibile per il download nella sua interezza (o almeno per le regioni selezionate) per consentire il geocoding offline.



3

Ho pensato che il codice dietro http://geocoder.us/ fosse disponibile per il download in modo da poterlo ottenere e un file di dati TIGER e più o meno impostare la propria installazione locale. Non lo vedo immediatamente dopo aver rivisitato quel sito, ma potresti voler guardarti attorno.


3

Perché non usare gli stessi geocoder che hai usato prima, basta rimuovere tutti gli altri metadati?

Non inviare su "Posizione segreta; 123 Main Street, Some City", basta inviare su "123 Main Street, Some City"? Gli indirizzi sono comunque informazioni pubbliche. Basta non dire al geocoder che hai un elenco di basi nucleari o di tutte le sedi NSA. I risultati saranno in formato tabella, quindi potrai ricollegare tutti gli altri metadati segreti.


1
Questo è quello che provo per la situazione. Non è questo il modo in cui il mio datore di lavoro sente la situazione. Per dare il vantaggio del dubbio, se si ottiene un elenco di indirizzi da un indirizzo IP riconoscibile, non è un gran che immaginare che qualcuno possa capire a cosa si riferiscono gli indirizzi.
Matt Parker,

1
@Matt Questa è una cosa per cui i consulenti sono bravi :-). Un'altra opzione è quella di mescolare indirizzi vari con quelli che invii. Certo, aumenta i costi, ma sono comunque così bassi ...
whuber

3

La ricerca nella homepage di OpenStreetMap è un sistema chiamato Nominatim . Puoi chiamarlo come servizio di geocodifica (se sei gentile) ma è tutto open source, quindi puoi configurarlo anche sul tuo server.

Questo sta usando i dati OpenStreetMap caricati nel database postGiS. È relativamente nuovo e ancora in fase di sviluppo e il processo di impostazione e caricamento con i dati non è poi così semplice e abbastanza affamato di risorse. ... ma è gratuito e aperto!


3

La maggior parte delle risposte ti indirizza verso un database locale. Anche se sicuramente funzionerebbe, devi anche considerare se gecoding è il tuo dominio principale. (È quello che sei bravo? In tal caso, probabilmente hai già i dati che stanno raccomandando. In caso contrario, E VUOI ESSERE, allora dovresti scaricare i dati e semplicemente farlo localmente. Tuttavia, se hai solo bisogno per risolvere un problema e non voler dedicare innumerevoli ore alla produzione, ci sono ancora opzioni per farlo attraverso un'API senza compromettere la sicurezza.

Innanzitutto, insistere su HTTPS perché è necessario che i dati siano sicuri sulla strada per l'API e poi sulla via del ritorno. In secondo luogo, assicurarsi di eseguire una richiesta POST anziché una richiesta GET all'API. Usando POST, stai semplicemente passando una richiesta URL con un payload e gli unici risultati che potrebbero colpire il registro del server sono il fatto che una richiesta di verifica dell'indirizzo e geocodifica è stata effettuata in un determinato momento e da un determinato IP. Né l'indirizzo inviato né l'indirizzo restituito verrebbero archiviati su disco o scritti in un registro del server. Non è molto più sicuro di così.

Quindi, mentre un box locale sarebbe sicuramente sicuro, potrebbe richiedere molto sviluppo per fare ciò di cui hai bisogno. Poiché i problemi di sicurezza possono essere pacificati, potresti voler considerare (di nuovo) l'opzione di utilizzare un'API.

Lavoro per un'azienda di verifica degli indirizzi specializzata in geocodifica API sicura: SmartyStreets .



1

Installa PostGIS Tiger Geocoder nella tua casella Linux locale. È sicuramente più ingombrante dell'API online, ma forse la soluzione migliore per la tua situazione. E può ridimensionare a milioni di indirizzi se necessario.

Con l'aiuto del playbook Ansible, configurare il server in Linux è molto più semplice di prima. Scrivere query SQL probabilmente richiederà più tempo se non si ha familiarità con SQL o PostGIS.

Puoi controllare la mia configurazione del sistema e il mio script per maggiori dettagli. Dovrebbe includere tutte le informazioni necessarie.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.