Geokodierung von USA-Adressen, die nicht über das Internet gesendet werden können?

46

Für ein einmaliges Projekt muss ich einige tausend Adressen geocodieren. In der Vergangenheit habe ich verschiedene Online-Ressourcen für diese Art von Dingen verwendet (z. B. Google Maps API), aber die Adressen, mit denen ich arbeite, müssen vertraulich behandelt werden -geschützte Garantie der Privatsphäre. Welche anderen Optionen habe ich?

Matt Parker
quelle
4
Gibt es einen bestimmten Ort, an dem Sie geokodieren möchten? Zum Beispiel Australien, USA, ein bestimmter Staat usw.
Uhr
Gute Frage - Ich interessiere mich allgemein für die USA, insbesondere für Colorado, die Front Range Counties.
Matt Parker
1
Ich würde wirklich eine kurze Diskussion mit RTD eröffnen. Ich weiß, dass sie in diesem Bereich ein leistungsfähiges GIS haben und Sie wahrscheinlich direkt unterstützen könnten. Andernfalls; Der Geocoder :: US ist eine großartige Option. Sie können es intern ausführen und müssen nicht riskieren, dass Ihre Daten über die Leitung gehen.
DEWright
@DEWright, das ist eine interessante Idee - vor allem für eine andere Frage von mir . Vielen Dank!
Matt Parker

Antworten:

10

Wenn Sie lieber die Google Geocoding-API oder eine andere Online-Quelle als lokale Optionen verwenden, sollten Sie sich das Tor-Projekt ansehen (das einfach über das Paket namens "Vidalia-Paket" installiert werden kann).

Tor schützt Sie, indem es Ihre Kommunikation über ein verteiltes Netzwerk von Relais leitet, die von Freiwilligen auf der ganzen Welt betrieben werden: Es verhindert, dass ... die besuchten Standorte Ihren physischen Standort erfahren.

Neben der Eingabe von zufälligen Adressen und der Verwendung von SSL (https) zum Verschlüsseln der Kommunikation zu ihren Endpunkten (stellen Sie sicher, dass Sie dies auch tun), gibt es keine sicherere Möglichkeit, die Geocodierung per Fernzugriff durchzuführen. Unabhängig davon, welchen Geokodierungsdienst Sie verwenden, können Sie niemals feststellen, woher die Anforderungen letztendlich stammen, und mit https wird dies auch niemand anderes tun. Hinweis: Verwenden Sie keinen Geokodierungsdienst, für den ein API-Schlüssel erforderlich ist, da Sie sonst nicht mehr anonym sind. (Google benötigt keinen API-Schlüssel mehr).

Ein Nebeneffekt dieses Verfahrens ist, dass Sie nicht mehr auf eine beliebige Anzahl von Geokodierungsanforderungen beschränkt sind, da Ihre Anforderungen so aussehen, als stammten sie von mehreren IP-Adressen. Ich empfehle oder befürworte jedoch nicht , diese schönen kostenlosen APIs zu missbrauchen! Die Übertragungsrate ist immer noch begrenzt, wenn die API die Übertragungsrate begrenzt (obwohl die Übertragungsgeschwindigkeit mit Tor etwas langsamer ist als bei der direkten Verbindung).

Fallstudie in Python - Sobald Sie das Vidalia-Bundle installiert haben und der Proxy unter 127.0.0.1:8118 (Standardeinstellung) ausgeführt wird, können Sie in Python 2.7 oder höher einen https urllib2-Proxy einrichten, indem Sie Folgendes verwenden:

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")

Beachten Sie, dass urllib2-Proxys erst ab Python 2.7 oder höher mit https funktionieren. Daher funktioniert diese Methode nur mit neueren Python-Versionen. Stellen Sie sicher, dass Sie im obigen Beispiel an beiden Stellen "https" (nicht "http") angegeben haben. Ich habe es nur mit Python 2.7.1 getestet.

Vidalia ändert Ihre Identität / scheinbare IP-Adresse alle 10 Minuten. Wenn Sie jedoch auf langsame Raten oder andere Probleme stoßen (die Quote überschreitet die Fehlerquote) oder wenn Sie besonders paranoid sind und Ihre Identität häufiger ändern möchten, können Sie Ihre Tor-Identität ändern Verwenden Sie hier den Python-Code (unten leicht modifiziert). Sie müssen das Tor-Passwort durch Eingabe der Vidalia-Einstellungen in ein statisches (und kein zufällig generiertes) Passwort ändern. Möglicherweise muss Vidalia nach allen Änderungen neu gestartet werden.

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
Victor Van Hee
quelle
4
Damit werden die Adressen nicht vertraulich behandelt, oder? Der physische Standort des Computers, der die Abfrage sendet, ist hier irrelevant (nicht vertraulich).
Underdunkel
4
In den meisten Fällen ist der physische Standort des Computers, der die Abfrage sendet, sehr wichtig, um die Anonymität der Daten zu schützen, die an einen Geokodierungsdienst gesendet werden. Angenommen, ein Computer im Institut für das Studium von X sendet eine Geokodierungsanforderung für 1000 Adressen. Man könnte diese Adressen (zumindest theoretisch) als Personen mit der X-Krankheit kennzeichnen. Im Gegensatz dazu sind Adressen, die mit Tausenden von zufälligen Anfragen von vielen Benutzern gemischt sind und von mehreren IP-Adressen stammen, die keinem Benutzer entsprechen (die Tor-Situation), hinsichtlich des Zwecks nicht identifizierbar.
Victor Van Hee
Das Senden von Daten an Google (über Tor oder irgendetwas) ist ein grundlegendes Datenschutzproblem. Google bietet keine "eiserne Garantie der Privatsphäre" an.
Nicolas Raoul
7

Eine Option ist die Verwendung von Geo-Coder-US , einem Open-Source-Perl-Modul, das die Tiger / Line-Daten der US-Volkszählung zur Geokodierung verwendet. Ich habe es nicht persönlich benutzt, aber es sieht ausgezeichnet aus. Der obige Link enthält eine schöne Übersicht und einen Link zu einer Version, die bereits die erforderlichen Census-Dateien zusammengestellt hat.

Matt Parker
quelle
6

Die Geokit-Bibliothek kann Google, Yahoo, Geocoder.us, Geocoder.ca und Geonames verwenden. Es ist in Ruby geschrieben und es gibt auch eine Schwesterbibliothek für Ihre Ruby on Rails-Projekte:

http://geokit.rubyforge.org/

Um die Privatsphäre zu schützen, können Sie Anfragen an alle Anbieter verteilen, indem Sie sie in Gruppen aufteilen, bei denen die Wahrscheinlichkeit geringer ist, dass sie mit Ihren Aktivitäten verknüpft sind. Sie können Ihren Adressen auch Rauschen hinzufügen, indem Sie echte Adressen aus einem Online-Telefonverzeichnis hinzufügen. Und ich schlage vor, Sie führen dieses Skript an verschiedenen Stellen aus, z. B. in Internetcafés, und kombinieren die Ergebnisse am Ende.

Die einzige Möglichkeit, Ihre Privatsphäre wirklich zu schützen, besteht darin, den gesamten Datensatz herunterzuladen und Ihr Skript dagegen auszuführen. Es gibt das Nominatim-System von OpenStreetMap. Es ist nicht für alle Städte vollständig, aber Sie können dies verwenden, um die Liste der Adressen zu reduzieren, die an andere Anbieter gesendet werden.

Nicolas Marchildon
quelle
5

Obwohl sich http://openaddresses.org/ noch in einem frühen Entwicklungsstadium befindet, zielt es darauf ab, eine offene Datenbank mit weltweiten Adressen und den damit verbundenen Geokodierungsdiensten bereitzustellen.

Eine offene Adressdatenbank ist zwar nicht privat, kann jedoch aufgrund ihrer Beschaffenheit als Download (oder zumindest für ausgewählte Regionen) für die Offline-Geokodierung zur Verfügung stehen.

geographika
quelle
3

Ich dachte, dass der Code hinter http://geocoder.us/ zum Herunterladen verfügbar ist, sodass Sie ihn und eine TIGER-Datendatei erhalten und quasi Ihre eigene lokale Installation einrichten können. Ich sehe das nicht sofort nach dem erneuten Besuch dieser Website, aber Sie möchten sich vielleicht ein bisschen umschauen.

Joe Germuska
quelle
3

Warum nicht die gleichen Geocodierer verwenden, die Sie zuvor verwendet haben? Entfernen Sie einfach alle anderen Metadaten.

Senden Sie nicht "Secret Location; 123 Main Street, Some City", sondern nur "123 Main Street, Some City"? Die Adressen sind sowieso öffentlich bekannt. Sagen Sie dem Geocodierer nur nicht, dass Sie eine Liste der Nuklearstützpunkte oder aller NSA-Standorte haben. Die Ergebnisse werden im Tabellenformat angezeigt. Anschließend können Sie alle anderen geheimen Metadaten erneut anhängen.

Vadim
quelle
1
So fühle ich mich in der Situation. So sieht es mein Arbeitgeber nicht. Um den Vorteil des Zweifels zu geben, wenn Sie eine Liste von Adressen von einer erkennbaren IP-Adresse erhalten, ist es nicht so schwer sich vorzustellen, dass jemand herausfinden könnte, worauf sich die Adressen beziehen.
Matt Parker
1
@Matt Das ist eine Sache, für die Berater gut sind :-). Eine andere Möglichkeit besteht darin, verschiedene Adressen mit den von Ihnen übermittelten Adressen zu mischen. Sicher, es erhöht die Kosten, aber sie sind sowieso so niedrig ...
whuber
3

Die Suche auf der OpenStreetMap-Homepage ist ein System namens Nominatim . Sie können es als Geokodierungsdienst bezeichnen (wenn Sie vorsichtig sind), aber es ist alles Open Source, sodass Sie es auch auf Ihrem eigenen Server einrichten können.

Hierbei werden OpenStreetMap-Daten verwendet, die in die postGiS-Datenbank geladen wurden. Es ist relativ neu und noch in der Entwicklung, und der Prozess des Einrichtens und Ladens von Daten ist nicht ganz einfach und ziemlich ressourcenhungrig. ... aber es ist kostenlos und offen!

Harry Wood
quelle
3

Die meisten Antworten lenken Sie zu einer lokalen Datenbank. Das würde sicherlich funktionieren, aber Sie müssen auch überlegen, ob Gecoding Ihre Kerndomäne ist. (Kannst du das? Wenn ja, hast du wahrscheinlich bereits die Daten, die sie empfehlen. Wenn nicht, und du willst es sein, dann solltest du die Daten herunterladen und einfach lokal machen. Allerdings, wenn du sie nur brauchst Um ein Problem zu lösen und nicht unzählige Stunden für die Produktion aufwenden zu müssen, gibt es immer noch Möglichkeiten, dies über eine API zu tun, ohne die Sicherheit zu gefährden.

Bestehen Sie zunächst auf HTTPS, da die Daten auf dem Weg zur API und anschließend auf dem Weg zu Ihnen sicher sein müssen. Stellen Sie zweitens sicher, dass Sie eine POST-Anforderung anstelle einer GET-Anforderung an die API ausführen. Mit POST übergeben Sie lediglich eine URL-Anfrage mit einer Nutzlast. Das einzige Ergebnis, das im Serverprotokoll angezeigt wird, ist die Tatsache, dass zu einem bestimmten Zeitpunkt und von einer bestimmten IP aus eine Anfrage zur Adressüberprüfung und Geokodierung eingegangen ist. Weder die übermittelte Adresse noch die zurückgegebene Adresse werden auf der Festplatte gespeichert oder in ein Serverprotokoll geschrieben. Sicherer geht es nicht.

Obwohl eine lokale Box auf jeden Fall sicher ist, kann es eine Menge Entwicklung erfordern, um das zu tun, was Sie benötigen. Da die Sicherheitsbedenken beseitigt werden können, sollten Sie (erneut) die Verwendung einer API in Betracht ziehen.

Ich arbeite für ein Adressprüfungsunternehmen, das sich auf sichere API-Geokodierung spezialisiert hat - SmartyStreets .

Jeffrey
quelle
1

Richten Sie PostGIS Tiger Geocoder in Ihrer lokalen Linux-Box ein. Es ist definitiv umständlicher als die Online-API, aber vielleicht die beste Wahl für Ihre Situation. Und es kann bei Bedarf auf Millionen von Adressen skaliert werden.

Mit Hilfe von Ansible Playbook ist das Einrichten des Servers unter Linux viel einfacher als zuvor. Wenn Sie mit SQL oder PostGIS nicht vertraut sind, wird das Schreiben von SQL-Abfragen wahrscheinlich mehr Zeit in Anspruch nehmen.

Sie können mein System-Setup und mein Skript für weitere Details überprüfen . Es sollte alle benötigten Informationen enthalten.

dracodoc
quelle