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?
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?
Odpowiedzi:
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.
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.
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.
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.
Lokalizacja twoich danych jest bardzo ważna, ponieważ zmienia się jakość usług internetowych (precyzja, skala itp.) Geokoduję swój adres z Google API, Facebook API i ex-simpleegeo z moją geobazą.
http://blog.programmableweb.com/2012/06/21/7-free-geocoding-apis-google-bing-yahoo-and-mapquest/
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.
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? ;-)
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,
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
AWS ma teraz do dyspozycji wiele serwerów do geokodowania. Zdobądź własny serwer i zrzuć tam swoje dane. https://aws.amazon.com/marketplace/search/results/ref=dtl_navgno_search_box?page=1&searchTerms=geocode
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.
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:
2. Odwróć kodowanie geograficzne
3. Począwszy od Google GeoCoding
mam nadzieję, że to ci pomoże