Geocode massal 20 juta alamat AS


34

Apakah ada database gratis atau dengan harga terjangkau untuk AS yang dapat dicari dan mengembalikan informasi garis lintang dan bujur?


Cepat itu baik, tetapi akurasi adalah segalanya. - Wyatt Earp Ketika berhadapan dengan geocoder, ada beberapa (seperti yang direferensikan di utas ini) yang menawarkan harga murah untuk melakukan geocode pada banyak alamat, tetapi jika Anda mencari akurasi yang sangat baik di banyak bidang yang berbeda, Anda harus menggunakan geocoder premium. Hasilnya akan lebih konsisten dan sangat akurat, terutama ketika pencocokan pos tidak terjadi. Tidak banyak yang bisa Anda lawan saat datang ke geocoding paling akurat, jika tidak, perhitungan Anda tidak akan

2
Anda menawarkan pendapat Anda tentang perlunya kualitas tinggi, tetapi tidak ada saran. Harap berikan beberapa saran Anda, jika tidak itu tidak membantu menjawab pertanyaan pengguna.
RyanDalton

Jawaban:


30

Untuk banyak catatan, bahkan tidak mempertimbangkan layanan web. Mereka akan mencekik atau memotong Anda sebelum Anda bisa menyelesaikan tugas Anda.

Jadi, pilihan Anda menjadi menjalankannya secara lokal, dan untuk itu Anda memiliki beberapa opsi komersial atau gratis.

Opsi gratis akan menggunakan dataset sensus TIGER yang perlu Anda muat ke dalam basis data spasial. Anda dapat menemukan perpustakaan yang melakukan geocode terhadap TIGER untuk PostGIS atau bahkan sqlite . Heck Anda bahkan dapat menggunakan ArcGIS untuk melakukan geocode terhadap TIGER. Tentu saja, ArcGIS tidak gratis, yang membawa saya ke opsi komersial berikutnya. Jika Anda memiliki lisensi ArcGIS kemungkinan Anda memiliki StreetMap DVD dengan TeleAtlas ( maksud saya Tom Tom ) atau dataset Navteq. Itu tergantung jika Anda mendapatkan StreetMap Premium yang dibundel. Salah satu dari dua set data tersebut mungkin akan memberi Anda hasil yang lebih konsisten daripada TIGER.

Bantulah diri Anda sendiri dan buat beberapa salinan dari database jalan begitu data Anda dimuat dan jalankan proses geocoding pada beberapa mesin dengan subset dari data input. Jangan mencoba menjalankannya hanya pada satu mesin atau Anda akan menunggu berhari-hari sampai selesai belum lagi bahwa kemungkinan besar proses apa pun yang Anda jalankan mungkin akan membocorkan memori dan crash beberapa kali sebelum selesai. Ini berarti Anda ingin memiliki pos pemeriksaan yang berbeda untuk proses Anda.


2
Saya merasa bermanfaat untuk membagi input dan data alamat menjadi bagian-bagian yang lebih kecil (seperti negara bagian). Ini membuat pelacak lebih cepat digunakan dan prosesnya cenderung tidak terkunci setelah berjalan terlalu lama. Biasanya tidak terlalu sulit untuk skrip loop berbasis negara untuk melakukan pembuatan locator dan geocoding dalam satu gerakan.
Nathanus

26

Saya bekerja di SmartyStreets (perusahaan verifikasi alamat). Layanan kami gratis untuk semua orang (hingga tingkat dasar). Startup juga dapat meminta untuk menggunakan layanan kami sepenuhnya gratis untuk tahun pertama. Jadi, jika Anda memenuhi klasifikasi itu, tidak ada biaya untuk layanan tak terbatas kami selama setahun ..

Ragi merekomendasikan layanan web, namun API kami dapat dengan mudah membersihkan, menstandarisasi, dan membuat geocode 20 juta alamat untuk Anda dalam waktu sekitar 5 jam (sekitar 1000 per detik). Beberapa waktu itu akan tergantung pada kecepatan mesin Anda (berapa banyak core yang Anda miliki) dan koneksi jaringan Anda (jangan mencobanya melalui 3G, tetapi koneksi broadband standar akan baik-baik saja).

Hanya ingin menunjukkan bahwa itu mungkin dilakukan dengan layanan web.

Pembaruan: Pada 1Aug2017, saya telah menguji dari jarak jauh layanan web kami dan mendapatkan 70.000 pencarian berkelanjutan per detik hanya menggunakan satu MacBook pro 2015 di jaringan nirkabel. Ya itu cukup cepat. Itu berarti daftar kecil seperti 20 juta alamat hanya akan memakan waktu sekitar 5 menit.


2
Nah, jika Anda akan membiarkannya melakukan geocode 20 juta catatan tanpa menagih sepeser pun kepadanya dan dapat melakukan 1000 / permintaan per detik (sangat mengesankan), maka tentu saja ini adalah solusi yang lebih baik daripada membangun tumpukan Anda sendiri dari awal.
Ragi Yaser Burhum

1
Benar. 1000 / detik bukan maks. Itu hanya standar yang bagus. Multithreading, multiple core, dan koneksi jaringan yang lebih cepat bahkan dapat meningkatkan throughput itu. Kami memiliki pelanggan nirlaba baru-baru ini yang baru saja menggunakan layanan kami untuk memproses 180 juta alamat. Dengan pemilihan nasional yang menjulang, banyak kelompok berusaha untuk membersihkan dan membuat geocode alamat mereka.
Jeffrey

1
@RagiYaserBurhum Perhatikan bahwa Chris juga mencari solusi "dengan harga terjangkau". Tentu, membangun tumpukan Anda sendiri dari awal mungkin "gratis," tetapi apakah itu benar-benar, ketika Anda mempertimbangkan biaya peluang Anda? Keuntungan yang Anda peroleh dengan melakukan semuanya sendiri: berpotensi tanpa biaya ("gratis"). Manfaat menggunakan layanan yang ada: Menghemat berjam-jam. Plus, seribu permintaan / detik mungkin rutin hari ini dengan arsitektur web modern (paralelisasi) untuk menangani beban lalu lintas yang konstan. Pada akhirnya, saya pikir untuk masalah ini, "gratis" dan "cukup murah" adalah masalah preferensi.
Matt

1
@Matt Hands down "gratis" tidak selalu gratis. Saya tidak akan membantah (waktu Anda bernilai uang). Saya sangat menyadari bahwa biaya untuk sebagian besar solusi open source sebenarnya adalah perubahan dalam model biaya dari lisensi penggunaan ke layanan pendukung. Saya tidak mencoba untuk menjadi ironis, saya pikir jika Jeffey dapat menawarkan solusi secara gratis (atau bahkan dengan harga terjangkau) ini adalah solusi yang lebih baik. Pada harga terbaik yang terdaftar dari SmartyStreets, 20 juta poin akan berharga $ 100.000. Saya yakin bahkan untuk kasus penggunaan komersial mereka dapat melakukan sebagian kecil dari biaya.
Ragi Yaser Burhum

1
Juga 1000 / req per detik, yang sangat bisa dilakukan dalam arsitektur kontemporer, masih memerlukan beberapa teknik yang luar biasa untuk geocoding . Mereka mendapatkan alat peraga saya untuk melakukan itu :)
Ragi Yaser Burhum

8

Saya menggunakan langkah - langkah ini menjelaskan bagaimana membangun geocoder postgis menggunakan data TigerLine 2010. Saya menjalankannya sekarang - ini tidak cepat, karena akan butuh 3 minggu untuk membuat geocode 2 juta alamat.

Namun, ini gratis, tidak dicekik, dan membutuhkan seseorang dengan keterampilan pengkodean dan postgres minimal kurang dari 2 hari untuk menyiapkan dan memuat dengan satu data negara (besar) untuk memulai geocoding. Saya juga sama sekali tidak melakukan penyetelan postgres untuk sistem dan itu berjalan di atas NFS mounts, jadi saya curiga ada satu atau dua perintah yang bernilai besar dari peningkatan kinerja yang bisa saya dapatkan dari itu jika saya perlu.

Daripada menggunakan layanan web, saya memasukkan semua alamat saya ke dalam database postgres, dan kemudian saya menjalankan skrip perl yang cepat dan kotor untuk melakukan geocode pada mereka semua satu per satu:

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 

(baris hanya untuk dibaca)

Sehingga menghasilkan "geocode alamat dengan nilai ID ini dan menggunakan pernyataan pembaruan yang paling cocok", dan mengirimkannya ke psql untuk melakukannya. Hanya mencoba untuk melakukan geocode alamat tanpa peringkat - yaitu yang belum geocode. Jadi itu dapat dimulai kembali, dan masing-masing dilakukan secara independen.


Apakah Anda menemukan data TigerLine 2010 tidak akurat untuk beberapa alamat?
Chris Muench

Itu bukan data sempurna dengan cara apa pun; Namun, data alamat yang saya miliki adalah septik dari perspektif kualitas. Geocoder seperti yang tertulis menyediakan bidang "peringkat", di mana lebih rendah lebih baik. Saya akan menambahkan contoh untuk jawaban saya.
Adam Musch

@ChrisMuench: Jika Anda memberi saya satu atau dua alamat California, saya akan senang untuk menembak mereka melalui geocoder saya untuk menunjukkan kepada Anda - dengan cara itu saya tidak mengambilnya.
Adam Musch

Yah saya mencoba postgis geocoder untuk beberapa alamat di NY, dan mereka bisa lepas 500 kaki hingga 1 mil
Chris Muench

Ini terlalu sedikit terlambat untuk Anda tetapi orang lain mungkin menganggapnya berguna ... Pastikan alamat Anda diurai dengan baik. Saya menemukan bahwa dataran saya yang digabungkan "123 Oak St. Anytown ST 12345" dipercepat oleh 550x ketika saya menambahkan koma: "123 Oak St., Anytown, ST, 12345"
aaryno

3

Saya kira Anda ingin Geocode tetapi tidak membayar apa pun untuk itu? Ada banyak layanan yang dapat Anda geocode pada 20 juta catatan, tetapi Anda harus membayarnya. Esri, Pitney Bowes, dan lainnya menawarkan layanan ini melalui berlangganan atau dengan biaya per x geocode. 20 juta bukanlah hal sepele, tapi saya berasumsi ada kasus bisnis untuk ini.



3

Posting ini mungkin sudah terlambat untuk membantu poster aslinya. Namun, bagi orang lain yang ingin melakukan georeferensi data dalam jumlah besar secara gratis, Anda dapat memeriksa perangkat lunak saya yang disebut "Easy Georeferencer" yang dibuat secara independen, mudah digunakan, dan kuat (lihat tangkapan layar di bagian bawah pos).

Program ini sederhana dan mudah digunakan, dan dijalankan langsung dari file exe yang tidak memerlukan instalasi. Anda dapat memilih untuk melakukan geocode antara sumber data GNS atau GeoNames, dan Anda dapat melakukan apa yang sejauh ini tidak dapat dilakukan oleh geocoder lain, geocode provinsi berdasarkan basis data unit administrasi GADM, serta perbatasan negara bersejarah geocode dari dataset CShapes. Satu-satunya peringatan adalah bahwa ia tidak melakukan geocode data alamat. Semua output datang sebagai shapefile yang siap untuk visualisasi / analisis langsung dalam GIS.

Sejauh mengenai efisiensi dan penanganan data besar, program ini telah diuji coba geocode 100.000 catatan hanya dalam 3 jam. Untuk dataset yang lebih besar, peningkatan waktu pemrosesan yang diharapkan akan turun secara melengkung karena sebagian besar waktu pemrosesan hanya menuju tahap awal ketika dataset referensi negara dimuat, tetapi mengambil setelahnya. Juga, kita tidak perlu khawatir tentang leher botol internet atau masalah konektivitas ketika melakukan geocoding dataset besar karena perangkat lunak, set data referensi, dan pemrosesan semuanya didasarkan pada komputer lokal. Tingkat kecocokan bisa mencapai 80-90 persen karena didasarkan pada akuntansi pencocokan nama fuzzy untuk perbedaan ejaan.

Rincian lebih lanjut, termasuk makalah pengantar dan panduan pemula termasuk dalam paket unduhan. Tidak perlu ragu untuk mencobanya, program ini hanyalah sebuah file sederhana yang dapat Anda tempatkan dan jalankan di desktop Anda tanpa komitmen atau kekacauan komputer Anda.

Perangkat lunak ini dapat diunduh dari: http://geocodeanything.wordpress.com/

Semoga itu bisa membantu.

masukkan deskripsi gambar di sini


Anda harus selalu mengungkapkan bahwa itu adalah penulis / pengembang dan / atau pekerjaan untuk perusahaan yang menghasilkan produk perangkat lunak.
RyanDalton

@RyanDalton Saya memang mengungkapkan bahwa saya adalah penulis ketika saya menulis "perangkat lunak yang saya buat", meskipun saya bisa melihat bagaimana itu mungkin tidak diketahui karena tidak banyak ditekankan dalam kalimat. Saya telah mengubah kata-kata saya agar mudah-mudahan menjadi lebih jelas bahwa saya menyetujui perangkat lunak saya sendiri.
Karim Bahgat

2

Karena Anda akan melakukan geocoding alamat AS, saya pikir alat Street Address to Coordinates dari Data Science Toolkit akan berfungsi dengan baik untuk Anda.

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.

Anda mungkin ingin mengunduh mesin virtual dan menjalankannya dari perangkat keras Anda sendiri. Dengan begitu, Anda tidak perlu khawatir tentang batas API plus Anda mengendalikannya juga. Oh dan apakah saya mengatakan bahwa ini gratis? ;-)


Itu luar biasa! Saya terkejut saya belum pernah mendengarnya sebelumnya. Plus bagusnya Anda dapat mengunduh VM dan sudah siap dijalankan di sistem Anda sendiri.
RyanDalton

Ini open source juga. :) github.com/petewarden/dstk
RK

2

Saya belum melihat referensi ke tingkat presisi yang Anda butuhkan, tetapi saya berasumsi bahwa Anda ingin atap panjang atau dekat dengan itu. Kualitas alamat input dapat menjadi faktor juga. Daftar alamat yang dibersihkan dengan baik akan memberikan kode yang lebih baik dan lebih cepat daripada daftar alamat yang tidak lengkap atau buruk. Juga, apakah hit rate 90% dapat diterima atau Anda membutuhkan semua 20 juta alamat yang dikodekan? Saya tidak memiliki solusi gratis, tetapi ada yang relatif murah yang saya ketahui dan gunakan. ZP4 dari Semaphore Corp, http://www.semaphorecorp.com/menawarkan scrubber alamat / geocoder dan add-on yang akan memproses alamat dan mengembalikan alamat yang dibersihkan, sebuah bendera yang menunjukkan apakah alamat tersebut dapat dikirimkan oleh USPS, dan lat panjang untuk ZIP + 4. Presisi ZIP + 4 umumnya dekat dengan presisi atap di area bawaan (sisi jalan yang benar dan di blok yang benar) dan tidak menutup di area pedesaan. Biaya untuk lisensi 30 hari adalah $ 120. Setelah waktu itu, scrubber alamat masih akan berfungsi, tetapi Validasi Poin Pengiriman (DPV) dan pengembalian geo tidak akan berfungsi. Dengan komputer yang relatif cepat, dibangun dalam dua tahun terakhir, dan semua data hte disimpan dan diakses secara lokal, 20 juta catatan harus dilakukan dalam waktu sekitar 10 hari. Saya telah alamat geocoding selama 15 tahun terakhir dan saya telah menggunakan ZP4 untuk sebagian besar waktu itu. Sebelum mereka menawarkan long-lat atau DPV,


2

Saya melakukan geocoding 18 juta alamat saat ini sehingga saya ingin membagikan pengaturan saya.

Pada dasarnya saya menggunakan buku pedoman yang memungkinkan untuk mengatur instance Amazon EC2 sebagai server PostGIS Tiger Geocoder, kemudian menggunakan skrip untuk mengumpulkan alamat geocode, memetakannya ke blok sensus.

Biaya Amazon EC2: persyaratan minimum 180G SSD berharga sekitar $ 18 / bulan. Total biaya t2.large saya sekitar $ 90 / bulan.

Jika Anda memiliki kotak linux dengan SSD> 180G, Anda juga dapat menggunakannya secara gratis.

Kinerja rata-rata saya adalah sekitar 170 ~ 300 ms / alamat berkualitas baik, 400 ~ 600 ms / alamat kualitas buruk. Dengan kualitas yang buruk maksud saya banyak dari mereka memiliki kota yang hilang atau salah, kode pos, atau bahkan hanya salah alamat. Alamat semacam ini membutuhkan waktu lebih lama untuk melakukan geocode, sehingga kinerja Anda bergantung pada kualitas input. Contoh Amazon EC2 yang saya gunakan dapat melakukan geocode sekitar 4 juta alamat yang diformat sangat buruk dalam satu bulan.

Untuk detail lebih lanjut, lihat posting blog saya tentang pengaturan sistem dan skrip



1

Jika alur kerja Anda menggunakan Python, geopy adalah solusi yang bagus. Anda dapat menulis logika geocoding dasar secara abstrak, dan kemudian memilih dari satu dari banyak penyedia (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN France, LiveAddress, NaviData, Nominatim (OSM), OpenCage, OpenMapQuest, BOSS Place Finder Yahoo !, What3Words, Yandex ... phew). Anda bahkan dapat menggunakan semuanya dan akhirnya memilih titik yang memiliki kepercayaan diri tertinggi untuk diperbaiki melalui validasi oleh beberapa layanan geocoding. Banyak dari layanan ini memerlukan pendaftaran (tetapi tidak semua). Mereka mungkin tidak sama-sama cocok untuk digunakan di AS, tetapi manfaat melakukannya dengan fungsi Python yang rapi adalah Anda harus dapat mengontrolnya.

Ini contoh singkatnya:

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/

Sungguh satu-satunya bagian yang sulit adalah memastikan bahwa alamat Anda tidak terbentuk dengan buruk. Akan tetapi, mungkin masih perlu banyak waktu untuk melakukan geocode pada 20 juta lokasi ... dan jenis beban itu mungkin akan melanggar ketentuan layanan seseorang. Semoga ini bisa membantu seseorang.


dapatkah saya menggunakan CSV dengan ini?
Salman

Tentu, jika Anda membacanya dengan Python.
alphabetasoup

0

jika permintaan geocode Anda tidak melebihi 2.500 per hari, Anda dapat menggunakan Google Geocoding API . Anda harus melirik api, ia dapat kembali ke hasil sebagai json atau xml.

Batas Penggunaan:

Penggunaan Google Geocoding API tunduk pada batas permintaan 2.500 permintaan geolokasi per hari. (Pengguna Google Maps API for Business dapat melakukan hingga 100.000 permintaan per hari.)

Contoh:

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

Hasil Contoh:

{
  "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 ]
    }
  } ]
}

dan Anda dapat memeriksa beberapa contoh tautan untuk geocoding dari google:

1. Kode Tunggal

2. Membalikkan GeoCoding

3. Mulai dengan Google GeoCoding

Saya harap ini membantu Anda


15
Itu hanya akan memakan waktu sekitar 22 tahun (8.000 hari) untuk membuat geocode 20 juta lokasi. Solusi yang sangat masuk akal.
Andy W

saya tahu ini dan saya telah menyatakan jika permintaan geocode-nya tidak melebihi 2.500 per hari, dia dapat menggunakannya ... ini adalah pilihan jika dia tidak dapat menemukan solusi apa pun
Aragon

4
Ini melanggar ketentuan layanan. Itu ilegal kecuali jika Anda menampilkan hasilnya di Google Map. Bahkan jika Anda melakukannya, saya menemukan "argumen caching" yang digunakan oleh beberapa orang sedikit untuk 20 juta fitur!
Ragi Yaser Burhum
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.