Geokodowanie adresów USA, których nie można wysłać przez Internet?

46

W przypadku jednorazowego projektu muszę geokodować kilka tysięcy adresów. W przeszłości korzystałem z różnych zasobów online do tego typu rzeczy (np. Google Maps API), ale adresy, z którymi pracuję, muszą być poufne - co oznacza, że ​​nie należy przesyłać ich przez Internet, chyba że jest trochę żelaza -clad gwarancja prywatności. Jakie inne opcje mam?

Matt Parker
źródło
4
Czy jest określona miejscowość, w której chcesz geokodować? Na przykład Australia, USA, określony stan itp.
fmark
Dobre pytanie - interesują mnie szeroko USA, szczególnie Kolorado, a dokładnie Front Front.
Matt Parker
1
Naprawdę otworzyłbym szybką dyskusję z RTD, wiem, że w tym obszarze mają one potężny GIS i prawdopodobnie mogą zapewnić ci bezpośrednie wsparcie. Inaczej; Geocoder :: US to świetna opcja. Możesz uruchomić go wewnętrznie i nie musisz ryzykować, że Twoje dane przechodzą przez sieć.
DEWright
@DEWright, to ciekawy pomysł - tym bardziej na moje inne pytanie . Dzięki!
Matt Parker

Odpowiedzi:

10

Jeśli wolisz korzystać z Google Geocoding API lub innego źródła online, a nie opcji lokalnych, sugeruję zajrzenie do Projektu Tor (łatwo instalowanego przez pakiet o nazwie „Pakiet Vidalia”).

Tor chroni cię, odbijając komunikację wokół rozproszonej sieci przekaźników obsługiwanych przez wolontariuszy na całym świecie: uniemożliwia ... odwiedzanym stronom poznanie twojej fizycznej lokalizacji.

Wraz z wprowadzaniem losowych adresów i używaniem ssl (https) do szyfrowania komunikacji do ich punktów końcowych (upewnij się, że to robisz), nie mogę wymyślić bardziej bezpiecznego sposobu na zdalne geokodowanie. Jakakolwiek usługa geokodowania, której używasz, nigdy nie będzie w stanie określić, skąd ostatecznie pochodzą żądania, a dzięki https nikt inny też tego nie zrobi. Uwaga: nie korzystaj z usługi geokodowania, która wymaga do tego klucza API, w przeciwnym razie nie będziesz już anonimowy. (Google nie wymaga już klucza API).

Dodatkową zaletą tej procedury jest to, że nie będziesz już ograniczany do dowolnej liczby żądań geokodowania, ponieważ Twoje żądania będą wyglądać, jakby pochodziły z wielu adresów IP. Jednak nie polecam ani nie popieram nadużywania tych uroczych bezpłatnych interfejsów API! Szybkość będzie nadal ograniczona, jeśli API ograniczy szybkość (chociaż prędkość transmisji przy użyciu Tora jest nieco wolniejsza niż bezpośrednie połączenie).

Studium przypadku w Pythonie - po zainstalowaniu pakietu Vidalia i uruchomieniu proxy na 127.0.0.1:8118 (domyślnie), w Pythonie 2.7 lub nowszym możesz skonfigurować proxy https urllib2 używając:

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

Zauważ, że serwery proxy urllib2 nie działają z protokołem https, dopóki przynajmniej Python 2.7 lub tak, więc ta metoda działa tylko z najnowszymi wersjami Pythona. Upewnij się, że masz „https” (nie „http”) w obu miejscach w powyższym przykładzie. Testowałem to tylko w Pythonie 2.7.1.

Vidalia zmienia twoją tożsamość / pozorny początek adresu IP co 10 minut, ale jeśli napotkasz niskie stawki lub inne problemy (przekroczone limity kwot) lub jeśli jesteś szczególnie paranoikiem i chcesz częściej zmieniać swoją tożsamość, możesz zmienić swoją tożsamość Tora używając tutaj kodu python (nieco zmodyfikowany poniżej). Musisz zmienić hasło Tora na hasło statyczne (zamiast losowo generowanego), wprowadzając ustawienia Vidalii. Być może trzeba będzie zrestartować Vidalię po wszystkich zmianach.

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
źródło
4
To nie zapewnia poufności adresów, prawda? Fizyczna lokalizacja maszyny wysyłającej zapytanie nie ma tutaj znaczenia (nie jest poufna).
podmrok
4
W większości przypadków fizyczna lokalizacja maszyny wysyłającej zapytanie jest bardzo ważna dla ochrony anonimowości danych wysyłanych do usługi geokodowania. Powiedz, że komputer w Institute for Study of X wysyła żądanie geokodowania dla 1000 adresów. Można (przynajmniej teoretycznie) zidentyfikować te adresy jako zawierające osoby z chorobą X. Natomiast adresy pomieszane z tysiącami losowych żądań od wielu użytkowników i pochodzące z wielu adresów IP, które nie odpowiadają jednemu użytkownikowi (sytuacja Tora), nie są identyfikowalne pod względem celu.
Victor Van Hee
Przesyłanie danych do Google (przez Tor lub cokolwiek innego) jest podstawowym problemem prywatności. Google nie oferuje „żelaznej gwarancji prywatności”.
Nicolas Raoul
7

Jedną z opcji jest użycie Geo-Codera-US , który jest otwartym modułem Perla, który wykorzystuje dane Tiger / Line US Census do geokodu. Nie używałem go osobiście, ale wygląda doskonale. Powyższy link zawiera ładny przegląd i link do wersji, która ma już zgromadzone niezbędne pliki Spisu.

Matt Parker
źródło
6

Biblioteka Geokit może używać dowolnego z Google, Yahoo, Geocoder.us, Geocoder.ca i Geonames. Jest napisany w Ruby, a do twoich projektów Ruby on Rails jest także siostrzana biblioteka:

http://geokit.rubyforge.org/

Aby zachować prywatność, możesz rozpowszechniać zapytania do wszystkich dostawców, dzieląc je na zestawy, które rzadziej będą powiązane z twoimi działaniami. Możesz także wstrzykiwać szumy do swoich adresów, dodając rzeczywiste adresy z internetowej książki telefonicznej. Sugeruję uruchomienie tego skryptu z różnych miejsc, takich jak kawiarnie internetowe, łącząc wyniki na końcu.

Jedynym sposobem, aby naprawdę zachować swoją prywatność, jest pobranie pełnego zestawu danych i uruchomienie skryptu. Istnieje system Nominatim z OpenStreetMap. Nie jest to kompletne dla wszystkich miast, ale możesz użyć tego, aby zmniejszyć listę adresów wysyłanych do innych dostawców.

Nicolas Marchildon
źródło
5

Mimo że http://openaddresses.org/ wciąż znajduje się we wczesnej fazie rozwoju, stara się zapewnić otwartą bazę danych adresów na całym świecie oraz powiązanych usług geokodowania.

Chociaż nie jest prywatny, charakter otwartej bazy danych adresów może oznaczać, że można ją pobrać w całości (lub przynajmniej dla wybranych regionów), aby umożliwić geokodowanie offline.

geografia
źródło
3

Pomyślałem, że kod za http://geocoder.us/ jest dostępny do pobrania, więc możesz go pobrać, plik danych TIGER i mniej więcej skonfigurować własną instalację lokalną. Nie widzę tego od razu po ponownym odwiedzeniu tej witryny, ale możesz się trochę rozejrzeć.

Joe Germuska
źródło
3

Dlaczego nie użyć tych samych geokoderów, z których korzystałeś wcześniej, po prostu usuń wszystkie inne metadane?

Nie przesyłasz „Tajnej lokalizacji; 123 Main Street, Some City”, po prostu przesyłasz „123 Main Street, Some City”? Adresy i tak są informacjami publicznymi. Po prostu nie mów geokoderem, że masz listę baz nuklearnych lub wszystkich lokalizacji NSA. Wyniki będą w formacie tabeli, a następnie możesz ponownie dołączyć wszystkie inne tajne metadane.

Vadim
źródło
1
Tak myślę o sytuacji. Mój pracodawca nie tak myśli o tej sytuacji. Aby zyskać wątpliwości, jeśli otrzymujesz listę adresów z rozpoznawalnego adresu IP, nietrudno jest wyobrazić sobie, że ktoś może dowiedzieć się, do czego odnoszą się adresy.
Matt Parker,
1
@Matt To jedna rzecz, do której konsultanci są dobrzy :-). Inną opcją jest mieszanie różnych adresów z tymi, które wysyłasz. Jasne, to zwiększa koszty, ale i tak są tak niskie ...
whuber
3

Wyszukiwanie na stronie głównej OpenStreetMap to system o nazwie Nominatim . Możesz go nazwać usługą geokodowania (jeśli jesteś łagodny), ale jest to oprogramowanie typu open source, więc możesz skonfigurować go również na własnym serwerze.

Wykorzystuje to dane OpenStreetMap załadowane do bazy danych postGiS. Jest stosunkowo nowy i wciąż w fazie rozwoju, a proces konfigurowania i ładowania danych nie jest wcale taki prosty i wymaga dużo zasobów. ... ale jest darmowy i otwarty!

Harry Wood
źródło
3

Większość odpowiedzi prowadzi do lokalnej bazy danych. Chociaż to z pewnością zadziała, musisz również rozważyć, czy gecoding jest twoją podstawową domeną. (Czy to jest to, w czym jesteś dobry? Jeśli tak, prawdopodobnie masz już dane, które oni polecają. Jeśli nie, A TY CHCESZ BYĆ, to powinieneś pobrać dane i po prostu zrobić to lokalnie. Jeśli jednak potrzebujesz aby rozwiązać problem i nie chcieć poświęcać niezliczonej ilości godzin na produkcję, nadal istnieją opcje wykonania tego przez interfejs API bez narażania bezpieczeństwa.

Najpierw nalegaj na HTTPS, ponieważ potrzebujesz bezpieczeństwa danych w drodze do interfejsu API, a następnie w drodze do ciebie. Po drugie, upewnij się, że wykonujesz żądanie POST zamiast żądania GET do interfejsu API. Korzystając z POST, po prostu przekazujesz żądanie adresu URL z ładunkiem, a jedynym wynikiem, który uderzyłby w dziennik serwera, jest fakt, że prośba o weryfikację adresu i geokodowanie została wykonana w określonym czasie i z określonego adresu IP. Ani przesłany, ani zwrócony adres nie zostanie zapisany na dysku ani zapisany w dzienniku serwera. To nie staje się o wiele bardziej bezpieczne.

Tak więc, chociaż lokalna skrzynka byłaby z pewnością bezpieczna, może wymagać wielu prac rozwojowych, aby zrobić to, czego potrzebujesz. Ponieważ obawy dotyczące bezpieczeństwa można rozwiązać, warto rozważyć (ponownie) opcję użycia interfejsu API.

Pracuję dla firmy weryfikującej adresy, która specjalizuje się w bezpiecznym geokodowaniu API - SmartyStreets .

Jeffrey
źródło
1

Stary wątek, ale warto o nim wspomnieć. http://www.tigergeocoder.com/ przy użyciu danych TIGER 2013, gotowy do uruchomienia własnego wystąpienia serwera w chmurze Amazon EC2.

Biba
źródło
1

Skonfiguruj Geocoder PostGIS Tiger w swoim lokalnym systemie Linux. Jest to zdecydowanie bardziej kłopotliwe niż internetowy interfejs API, ale być może najlepszy wybór w Twojej sytuacji. W razie potrzeby można go skalować do milionów adresów.

Za pomocą ansible playbooka skonfigurowanie serwera w systemie Linux jest znacznie łatwiejsze niż wcześniej. Pisanie zapytań SQL prawdopodobnie zajmie więcej czasu, jeśli nie znasz SQL lub PostGIS.

Możesz sprawdzić moją konfigurację systemu i skrypt, aby uzyskać więcej informacji. Powinien zawierać wszystkie potrzebne informacje.

dracodoc
źródło