Geokoduj zbiorczo 20 milionów adresów w USA

34

Czy istnieją jakieś bezpłatne lub niedrogie bazy danych dla USA, które można przeszukiwać i zwracają informacje o szerokości i długości geograficznej?

Chris Muench
źródło
Szybki jest w porządku, ale dokładność jest wszystkim. - Wyatt Earp Kiedy masz do czynienia z geokoderem, są takie (takie jak te wymienione w tym wątku), które oferują niską cenę geokodowania wielu adresów, ale jeśli szukasz bardzo dokładnej dokładności w wielu różnych obszarach, musisz iść z geokoder klasy premium. Rezultaty będą bardziej spójne i wyjątkowo dokładne, szczególnie gdy mecz pocztowy nie nastąpi. Nie ma wielu rzeczy, z którymi możesz konkurować, jeśli chodzi o najdokładniejsze geokodowanie, w przeciwnym razie twoje obliczenia nie będą w stanie konkurować z innymi technologiami oferującymi użytkownikom t
2
Przedstawiasz swoją opinię na temat potrzeby wysokiej jakości, ale nie masz żadnych sugestii. Podaj niektóre swoje sugestie, w przeciwnym razie nie pomoże to odpowiedzieć na pytanie użytkowników.
RyanDalton

Odpowiedzi:

30

Przy tak wielu rekordach nawet nie rozważaj usługi internetowej. Przepchną cię lub odetną, zanim skończysz swoje zadanie.

Zatem twoja opcja staje się lokalna, a do tego masz kilka opcji komercyjnych lub bezpłatnych.

Darmowe opcje wykorzystają zestaw danych TIGER ze spisu ludności, który trzeba załadować do przestrzennej bazy danych. Możesz znaleźć biblioteki, które geokodują przeciwko TIGER dla PostGIS, a nawet sqlite . Heck, możesz nawet użyć ArcGIS do geokodowania przeciwko TIGER. Oczywiście ArcGIS nie jest darmowy, co prowadzi mnie do następnych opcji komercyjnych. Jeśli masz licencję ArcGIS, masz DVD StreetMap z TeleAtlas ( mam na myśli Tom Tom ) lub zestawem danych Navteq. To zależy, czy masz pakiet StreetMap Premium . Każdy z tych dwóch zestawów danych prawdopodobnie zapewni bardziej spójne wyniki niż TIGER.

Zrób sobie przysługę i zrób kilka kopii ulicznej bazy danych po załadowaniu danych i uruchom proces geokodowania na kilku komputerach z podzbiorem danych wejściowych. Nie próbuj uruchamiać go tylko na jednej maszynie, inaczej będziesz czekał kilka dni, aż zakończy się, nie wspominając, że najprawdopodobniej cokolwiek uruchomisz, prawdopodobnie wyciek pamięci i kilka razy ulegnie awarii, zanim zakończy się. Oznacza to, że chcesz mieć różne punkty kontrolne dla swojego procesu.

Ragi Yaser Burhum
źródło
2
Przekonałem się, że korzystne jest podzielenie danych wejściowych i adresowych na mniejsze części (takie jak stany). Dzięki temu lokalizatory są szybsze w użyciu, a procesy rzadziej blokują się po zbyt długim uruchomieniu. Zwykle nie jest zbyt trudno napisać pętlę opartą na stanie, aby wykonać lokalizator i geokodowanie za jednym zamachem.
Nathanus
26

Pracuję w SmartyStreets (firmie weryfikującej adresy). Nasza usługa jest bezpłatna dla wszystkich (do poziomu podstawowego). Startupy mogą również poprosić o korzystanie z naszej usługi całkowicie bezpłatnie przez pierwszy rok. Jeśli więc spełniasz tę klasyfikację, nie ponosimy opłaty za naszą nieograniczoną usługę przez rok ..

Ragi odradza korzystanie z usługi internetowej, jednak nasz interfejs API może łatwo wyczyścić, ustandaryzować i geokodować 20 milionów adresów w ciągu około 5 godzin (około 1000 na sekundę). Część tego czasu będzie zależeć od szybkości twojego komputera (ile posiadasz rdzeni) i twojego połączenia sieciowego (nie próbuj przez 3G, ale standardowe połączenie szerokopasmowe będzie w porządku).

Chciałem tylko zaznaczyć, że z pewnością jest to możliwe dzięki usłudze internetowej.

Aktualizacja: od 1 sierpnia 2017 r. Zdalnie przetestowałem naszą usługę internetową i uzyskałem ciągłe 70 000 wyszukiwań na sekundę przy użyciu tylko jednego MacBooka Pro 2015 w sieci bezprzewodowej. Tak, jest dość szybki. Oznacza to, że mała lista, taka jak 20 milionów adresów, zajmie tylko około 5 minut.

Jeffrey
źródło
2
Cóż, jeśli pozwolisz mu geokodować 20 milionów rekordów bez obciążania go ani grosza i możesz wykonać 1000 / żądań na sekundę (bardzo imponujące), to oczywiście jest to lepsze rozwiązanie niż budowanie własnego stosu od zera.
Ragi Yaser Burhum
1
Absolutnie. 1000 / sekunda nie maksymalna. To tylko dobry standard. Wielowątkowość, wiele rdzeni i szybsze połączenia sieciowe mogą nawet zwiększyć tę przepustowość. Mamy niedawnego non-profit klienta, który właśnie wykorzystał naszą usługę do przetworzenia 180 milionów adresów. W obliczu zbliżających się wyborów krajowych wiele grup próbuje wyczyścić i geokodować swoje adresy.
Jeffrey,
1
@RagiYaserBurhum Pamiętaj, że Chris szuka również rozwiązań „w rozsądnej cenie”. Oczywiście budowanie własnego stosu od zera może być „darmowe”, ale czy to naprawdę, jeśli weźmie się pod uwagę koszt alternatywny? Korzyści, które zyskujesz, robiąc to wszystko sam: potencjalnie bez kosztów („za darmo”). Korzyści z korzystania z istniejącej usługi: Oszczędność wielu godzin. Co więcej, obecnie tysiące zapytań na sekundę jest rutyną w nowoczesnych architekturach internetowych (równoległość), aby poradzić sobie ze stałymi obciążeniami ruchu. W końcu myślę, że w tym przypadku „darmowy” i „niedrogi” jest kwestią preferencji.
Matt
1
@Matt Hands free „za darmo” nie zawsze jest za darmo. Nie będę się z tym kłócił (twój czas jest wart pieniędzy). Wiem, że koszt większości rozwiązań typu open source jest w rzeczywistości zmianą modelu kosztów z licencji użytkowania na usługi wsparcia. Nie próbowałem być ironiczny, myślę, że jeśli Jeffey może zaoferować rozwiązanie za darmo (lub nawet w rozsądnej cenie), jest to lepsze rozwiązanie. W najlepszej notowanej ceny od SmartyStreets punkty 20m kosztowałby $ 100,000. Jestem pewien, że nawet w przypadku zastosowań komercyjnych mogą one stanowić ułamek kosztów.
Ragi Yaser Burhum
1
Również 1000 / req na sekundę, co jest bardzo wykonalne we współczesnej architekturze, nadal wymagałoby niesamowitej inżynierii geokodowania . Dostają moje rekwizyty za to :)
Ragi Yaser Burhum
8

Skorzystałem z tego przewodnika, opisując, jak zbudować geokoder Postgis przy użyciu danych TigerLine z 2010 roku. Teraz go uruchamiam - nie jest szybki, ponieważ geokodowanie 2 milionów adresów zajmie 3 tygodnie.

Jest jednak darmowy, niezakłócony i zajął kogoś z minimalnymi umiejętnościami kodowania i postgres mniej niż 2 dni, aby skonfigurować i załadować dane jednego (dużego) stanu, aby rozpocząć geokodowanie. Nie zrobiłem też absolutnie żadnego strojenia postgres dla systemu i działa on z mocowaniami NFS, więc podejrzewam, że wzrost wydajności może być o jeden lub dwa rzędy wielkości, gdybym tego potrzebował.

Zamiast korzystać z usług internetowych, załadowałem wszystkie moje adresy do bazy danych Postgres, a następnie uruchamiam szybki i brudny skrypt perla, aby geokodować je wszystkie po jednym:

perl -e for ($i=1; $i<[max_key_value]; $i+=1) 
   {printf "UPDATE source_addresses
               SET (rating, new_address, lon, lat) 
                     = (g.rating, pprint_addy(g.addy), 
                       ST_X(g.geomout), ST_Y(g.geomout) ) 
              FROM (SELECT DISTINCT ON (address_id) address_id, (g1.geo).* 
                      FROM (SELECT address_id, (geocode(address)) As geo 
                              FROM source_addresses As ag 
                             WHERE ag.rating IS NULL and address_id = $i 
                           ) As g1 
                     ORDER BY address_id, rating LIMIT 1
                   ) As g WHERE g.address_id = source_addresses.address_id;\n"
  } | psql -d geocoder 

(łamanie wiersza wyłącznie dla czytelności)

Tak więc generuje „geokoduj adres o tej wartości identyfikatora i użyj instrukcji dopasowania najlepiej dopasowanej” i przesyła go do psql, aby to zrobić. Próbuje tylko geokodować adres bez oceny - tzn. Takich, które nie są jeszcze geokodowane. Można go więc uruchomić ponownie i każdy z nich jest wykonywany niezależnie.

Adam Musch
źródło
Czy uważasz, że dane TigerLine 2010 są niedokładne dla niektórych adresów?
Chris Muench,
W żadnym wypadku nie są to idealne dane; jednak dane adresowe, które mam, są septyczne z punktu widzenia jakości. Geokoder, jak napisano, zapewnia pole „oceny”, gdzie niższe jest lepsze. Dodaję przykład do mojej odpowiedzi.
Adam Musch,
@ChrisMuench: Jeśli dasz mi jeden lub dwa adresy w Kalifornii, chętnie sfotografuję je za pomocą mojego geokodera, aby ci pokazać - w ten sposób ich nie wybieram.
Adam Musch,
Cóż, próbowałem geokodera Postgis dla jakiegoś adresu w Nowym Jorku, a oni mogliby być od 500 stóp do 1 mili
Chris Muench
Jest to dla ciebie za późno, ale może się przydać komuś innemu ... Upewnij się, że adres się dobrze analizuje. Odkryłem, że mój zwykły konkatenowany „123 Oak St. Anytown ST 12345” został przyspieszony 550 razy, gdy dodałem przecinki: „123 Oak St., Anytown, ST, 12345”
aaryno
3

Zgaduję, że chcesz Geokodować, ale nie płacisz za to? Istnieje wiele usług, na których można geokodować 20 milionów rekordów, ale będzie to kosztować. Esri, Pitney Bowes i inne oferują te usługi w ramach subskrypcji lub na podstawie X geokodów. 20 milionów nie jest trywialne, ale zakładam, że jest na to uzasadnienie biznesowe.

James Fee
źródło
3

Ten post jest prawdopodobnie za późno, aby pomóc oryginalnemu plakatowi. Jednak dla innych, którzy szukają georeferencji za darmo, możesz sprawdzić moje oprogramowanie o nazwie „Easy Georeferencer”, które jest tworzone niezależnie, łatwe w użyciu, a jednocześnie wydajne (patrz zrzut ekranu na dole postu).

Program jest prosty i łatwy w użyciu i jest uruchamiany bezpośrednio z pliku exe nie wymagającego instalacji. Możesz wybrać geokodowanie między źródłem danych GNS lub GeoNames, i możesz robić to, czego nie potrafi żaden inny geokoder, prowincje geokodowane na podstawie bazy danych jednostek administracyjnych GADM, a także geokodować historyczne granice kraju z zestawu danych CShapes. Jedynym zastrzeżeniem jest to, że nie geokoduje danych adresowych. Wszystkie dane wyjściowe są w postaci plików kształtów gotowych do natychmiastowej wizualizacji / analizy w GIS.

Jeśli chodzi o wydajność i obsługę dużych danych, program został przetestowany pod kątem geokodowania 100 000 rekordów w zaledwie 3 godziny. W przypadku większych zestawów danych oczekiwany wzrost czasu przetwarzania powinien skrócić się krzywoliniowo, ponieważ znaczna część czasu przetwarzania trafia tylko do początkowej fazy, gdy zestawy danych referencyjnych kraju są ładowane, ale potem wzrasta. Ponadto, geokodowanie dużych zestawów danych nie wymaga obaw o wąskie gardła w Internecie lub problemy z łącznością, ponieważ oprogramowanie, zestawy danych referencyjnych i przetwarzanie są oparte na komputerze lokalnym. Wskaźniki dopasowania mogą wzrosnąć nawet do 80–90 procent, ponieważ są oparte na dopasowaniu nazw rozmytych do różnic w pisowni.

Więcej informacji, w tym dokument wprowadzający i przewodnik dla początkujących, znajduje się w pakiecie do pobrania. Nie musisz się wahać, ponieważ jest to prosty plik, który możesz umieścić i uruchomić na pulpicie bez żadnych zobowiązań lub bałaganu na komputerze.

Oprogramowanie można pobrać ze strony: http://geocodeanything.wordpress.com/

Mam nadzieję, że to pomaga.

wprowadź opis zdjęcia tutaj

Karim Bahgat
źródło
Zawsze powinieneś ujawnić, że są autorami / programistami i / lub pracują dla firmy, która produkuje oprogramowanie.
RyanDalton
@RyanDalton Ujawniłem, że byłem autorem, pisząc „oprogramowanie, które stworzyłem”, chociaż widzę, jak mogło to pozostać niezauważone, ponieważ w zdaniu nie zwrócono szczególnej uwagi. Zmieniłem moje sformułowania, aby, mam nadzieję, wyjaśnić, że toleruję własne oprogramowanie.
Karim Bahgat
2

Ponieważ będziesz geokodował adresy w USA, myślę, że narzędzie Ulica adres do współrzędnych z zestawu narzędzi do nauki danych powinno działać dobrze.

This API takes either a single string representing a postal address, or a JSON-encoded  
array of addresses, and returns a JSON object with a key for every address. The value 
for each key is either null if no information was found for the address, or an object 
containing location information, including country, region, city and latitude/longitude 
coordinates.

Możesz jednak pobrać maszynę wirtualną i uruchomić ją z własnego sprzętu. W ten sposób nie musisz się martwić limitami API i też je kontrolujesz. Aha, czy powiedziałem, że to nic nie kosztuje? ;-)

RK
źródło
To całkiem niesamowite! Jestem zaskoczony, że nigdy wcześniej o tym nie słyszałem. Plus to wspaniałe, że możesz pobrać maszynę wirtualną i mieć ją już gotową do uruchomienia we własnym systemie.
RyanDalton,
To także open source. :) github.com/petewarden/dstk
RK
2

Nie widziałem żadnego odniesienia do wymaganego poziomu precyzji, ale zakładam, że chcesz mieć dach długi lub długi. Jakość adresu wejściowego również może być czynnikiem. Dobrze wyczyszczona lista adresów będzie kodować lepiej i szybciej niż lista niekompletnych lub złych adresów. Czy akceptowalny jest także współczynnik trafień wynoszący 90%, czy potrzebujesz wszystkich 20 milionów zakodowanych adresów? Nie mam darmowego rozwiązania, ale jest to stosunkowo niedrogie, które znam i z którego korzystam. ZP4 z Semaphore Corp, http://www.semaphorecorp.com/oferuje skruber adresów / geokoder i dodatki, które będą przetwarzać adresy i zwracać oczyszczony adres, flagę wskazującą, czy adres jest dostarczalny USPS, oraz długi lat dla ZIP + 4. Dokładność ZIP + 4 jest zasadniczo zbliżona do precyzji na dachu w obszarach zabudowanych (po prawej stronie ulicy i na właściwym bloku) i nie jest bliska na obszarach wiejskich. Koszt 30-dniowej licencji wynosi 120 USD. Po tym czasie skruber adresu będzie nadal działał, ale sprawdzanie poprawności punktu dostawy (DPV) i zwroty geograficzne nie będą działać. Dzięki stosunkowo szybkiemu komputerowi, zbudowanemu w ciągu ostatnich dwóch lat, a wszystkie dane przechowywane i dostępne lokalnie, 20 milionów rekordów powinno zostać zrobionych w ciągu około 10 dni. Adresy geokoduję od 15 lat i przez większość tego czasu używałem ZP4. Zanim zaoferowali Long-Lat lub DPV,

ktreiche
źródło
2

Geokoduję teraz 18 milionów adresów, więc chcę udostępnić moją konfigurację.

Zasadniczo użyłem odpowiedniego podręcznika, aby skonfigurować instancję Amazon EC2 jako serwer Geocodera PostGIS Tiger, a następnie użyć skryptu do grupowania adresów geokodów, mapowania ich na blok spisu.

Koszt Amazon EC2: minimalny wymóg 180G SSD kosztuje około 18 USD / miesiąc. Moja instancja t2.large kosztuje łącznie około 90 USD / miesiąc.

Jeśli masz Linux-a z dyskiem SSD> 180G, możesz go również używać w zasadzie za darmo.

Moja średnia wydajność wynosi około 170 ~ 300 ms / adres dobrej jakości, 400 ~ 600 ms / adres złej jakości. Przez złą jakość mam na myśli, że wiele z nich ma zaginione miasto, kod pocztowy lub po prostu zły adres. Ten rodzaj adresu zajmuje dużo więcej czasu na geokodowanie, więc wydajność zależy od jakości danych wejściowych. Użyta przeze mnie instancja Amazon EC2 może geokodować około 4 milionów naprawdę źle sformatowanych adresów w ciągu jednego miesiąca.

Aby uzyskać więcej informacji, zobacz mój blog na temat konfiguracji systemu i skryptów

dracodoc
źródło
1

Jeśli Twój przepływ pracy odbywa się w języku Python, geopy to świetne rozwiązanie. Możesz napisać swoją abstrakcyjną logikę geokodowania w sposób abstrakcyjny, a następnie wybrać jednego z wielu dostawców (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, Yahoo! BOSS Place Finder, What3Words, Yandex ... uff). Możesz nawet użyć ich wszystkich i ostatecznie wybrać punkt, który ma największą pewność, że jest poprawny dzięki weryfikacji przez wiele usług geokodowania. Wiele z tych usług wymaga rejestracji (ale nie wszystkich). Mogą nie być równie odpowiednie do użycia w USA, ale zaletą robienia tego przy pomocy czystej funkcji Pythona jest to, że powinieneś być w stanie to kontrolować.

Oto krótki przykład:

from geopy.geocoders import Nominatim
geolocator = Nominatim(country_bias='New Zealand', timeout=4)
geocoded = geolocator.geocode('Raglan, Waikato', exactly_one=True)
if geocoded is not None:
    # success
    lat = geocoded.latitude
    lon = geocoded.longitude

https://geopy.readthedocs.org/en/1.10.0/

Naprawdę jedyną trudną częścią jest upewnienie się, że adresy nie są źle sformułowane. Geokodowanie 20 milionów lokalizacji prawdopodobnie potrwa jednak dużo czasu ... i taki ładunek prawdopodobnie naruszy czyjeś warunki świadczenia usług. Mam nadzieję, że to komuś pomaga.

zupa alfabetyczna
źródło
czy mogę użyć CSV z tym?
Salman,
Jasne, jeśli przeczytasz to w Pythonie.
alphabetasoup
0

jeśli twoje żądanie geokodu nie przekracza 2500 dziennie, możesz użyć interfejsu API Google Geocoding . powinieneś rzucić okiem na interfejs API, może powrócić do wyników jako json lub xml.

Limit użytkowania:

Korzystanie z Google Geocoding API podlega limitowi zapytań wynoszącemu 2500 żądań geolokalizacji dziennie. (Użytkownik interfejsu API Map Google dla Firm może wykonać do 100 000 żądań dziennie).

Przykład:

http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA

Przykład wyniku:

{
  "name": "520 3rd Street San Francisco CA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "520 3rd St, San Francisco, Kaliforniya 94107, Amerika Birleşik Devletleri",
    "AddressDetails": {
   "Accuracy" : 8,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "CA",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "San Francisco",
               "PostalCode" : {
                  "PostalCodeNumber" : "94107"
               },
               "Thoroughfare" : {
                  "ThoroughfareName" : "520 3rd St"
               }
            },
            "SubAdministrativeAreaName" : "San Francisco"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 37.7826364,
        "south": 37.7799384,
        "east": -122.3942267,
        "west": -122.3969247
      }
    },
    "Point": {
      "coordinates": [ -122.3955757, 37.7812874, 0 ]
    }
  } ]
}

i możesz sprawdzić przykładowy link do geokodowania z Google:

1. Jeden kod

2. Odwróć kodowanie geograficzne

3. Począwszy od Google GeoCoding

mam nadzieję, że to ci pomoże

Aragonia
źródło
15
Geokodowanie 20 milionów lokalizacji zajęłoby około 22 lat (8 000 dni). Całkowicie rozsądne rozwiązanie.
Andy W
wiem o tym i wyraziłem, że jeśli jego żądanie geokodu nie przekracza 2500 dziennie, może z niego skorzystać ... jest to opcja, jeśli nie może znaleźć żadnego rozwiązania
Aragon
4
Narusza to warunki świadczenia usług. Jest to nielegalne, chyba że wyświetlasz wyniki na mapie Google. Nawet jeśli tak, uważam, że „argument buforowania”, który niektórzy używają, jest nieco rozciągnięty na 20 milionów funkcji!
Ragi Yaser Burhum