20 milyon ABD adresinin toplu coğrafi kodu


34

ABD için aranabilen ve enlem ve boylam bilgileri döndüren ücretsiz veya uygun fiyatlı veri tabanları var mı?


Hızlı iyidir, ancak doğruluk her şeydir. - Wyatt Earp Bir coğrafi kodlayıcıyla uğraşırken, birçok adresi coğrafi olarak kodlamak için düşük bir fiyat sunan bazı (bu konudaki referanslar gibi) vardır, ancak birçok farklı alanda çok ince doğruluk arıyorsanız, birinci sınıf bir coğrafi kodlayıcı. Sonuçlar, özellikle posta eşleşmesi gerçekleşmediğinde, daha tutarlı ve olağanüstü derecede kesin olacaktır. En doğru coğrafi kodlama konusunda rekabet edebileceğiniz pek bir şey yok, aksi takdirde hesaplamalarınız kullanıcılara t

2
Yüksek kaliteye ihtiyaç duyulduğuna dair görüş bildirirsiniz ancak öneri yoktur. Lütfen önerilerinizden bazılarını belirtin, aksi takdirde kullanıcıların sorularını yanıtlamaz.
RyanDalton

Yanıtlar:


30

Bu kadar çok kayıt için, bir web servisini bile düşünmeyin. Görevinizi tamamlamadan önce sizi boğacak ya da kesecekler.

Böylece, seçeneğiniz yerel olarak çalıştırılabilir ve bunun için birkaç ticari veya ücretsiz seçeneğiniz var.

Ücretsiz seçenekler, uzamsal bir veritabanına yüklemeniz gereken sayım TIGER veri kümesini kullanır. PostGIS ve hatta sqlite için TIGER'e karşı coğrafi kodlayan kütüphaneleri bulabilirsiniz . HGER'de TIGER'e karşı kodlama yapmak için ArcGIS'i bile kullanabilirsiniz . Tabii ki, ArcGIS ücretsiz değil, bu da beni bir sonraki ticari seçeneklere getiriyor. Bir ArcGIS lisans şansınız varsa, TeleAtlas ( Tom Tom'u kastediyor ) veya Navteq veri setine sahip StreetMap DVD'niz var . Bu, StreetMap Premium'un paketlenmiş olup olmadığına bağlıdır . Bu iki veri kümesinden herhangi biri muhtemelen TIGER'den daha tutarlı sonuçlar verecektir.

Verileriniz yüklendikten sonra kendinize bir iyilik yapın ve sokak veritabanının birkaç kopyasını alın ve giriş verilerinin alt kümesi bulunan birkaç makinede coğrafi kodlama işlemini çalıştırın. Yalnızca bir makinede çalıştırmayı denemeyin, aksi takdirde, çalıştırdığınız işlemin muhtemelen bellek sızdırması ve bitmeden birkaç kez çökmesine neden olacağından bahsetmemesi için günlerce bekleyeceksiniz. Bu, işleminiz için farklı kontrol noktalarına sahip olmak istediğiniz anlamına gelir.


2
Girdiyi ve adres verilerini daha küçük bölümlere (eyaletler gibi) ayırmanın yararlı olduğunu gördüm. Bu, konumlandırıcıların kullanımını daha hızlı yapar ve çok uzun çalıştıktan sonra süreçlerin kilitlenmesi daha az olasıdır. Bulucu oluşturma ve coğrafi kodlamayı tek bir dokunuşta yapmak için durum tabanlı bir döngü oluşturmak genellikle zor değildir.
Nathanus

26

SmartyStreets'te (adres doğrulama şirketi) çalışıyorum. Hizmetimiz herkes için ücretsizdir (temel seviyeye kadar). Yeni başlayanlar, ilk yıl boyunca hizmetimizi tamamen ücretsiz kullanma talebinde bulunabilirler. Bu sınıflandırmaya uyursanız, bir yıl boyunca sınırsız hizmetimizden ücret alınmaz.

Ragi bir web servisine karşı tavsiyede bulunur, ancak API'mız sizin için yaklaşık 20 saat içinde 20 milyon adresi kolayca temizleyebilir, standartlaştırabilir ve coğrafi olarak kodlayabilir (saniyede yaklaşık 1000). Bu sürenin bir kısmı, makinenizin hızına (kaç çekirdeğiniz olduğunu) ve ağ bağlantınıza (3G'yi denemeyin, ancak standart bir geniş bant bağlantısı iyi sonuç verir) bağlıdır.

Sadece bir web servisiyle kesinlikle mümkün olduğunu belirtmek istedim.

Güncelleme: 1Aug2017 tarihinden itibaren, web servisimizi uzaktan test ettim ve kablosuz ağda yalnızca tek bir 2015 MacBook pro kullanarak saniyede 70.000 sürekli arama yaptım. Evet, oldukça hızlı. Bu, 20 milyon adres gibi küçük bir listenin sadece 5 dakika alacağı anlamına geliyor.


2
Eh, eğer sen izin vereceğimizi onu ona bir kuruş şarj etmeden 20 milyon kayıt coğrafi kod ve Tabii bu sıfırdan kendi yığını bina daha iyi bir çözümdür sonra, (son derece etkileyici) saniye başına 1000 / istekleri yapabilirsiniz.
Ragi Yaser Burhum

1
Kesinlikle. 1000 / saniye, maks. Bu sadece iyi bir standart. Çoklu okuma, çoklu çekirdekler ve daha hızlı ağ bağlantıları bu verimi artırabilir. 180 milyon adresin işlenmesinde hizmetimizi kullanan yeni kar amacı gütmeyen bir müşterimiz var. Ulusal seçimler yaklaşırken, birçok grup adreslerini temizlemeye ve coğrafi olarak kodlamaya çalışıyor.
Jeffrey

1
@RagiYaserBurhum Chris’in de “makul fiyatlı” çözümler aradığını unutmayın. Tabii ki, kendi başlığınızı sıfırdan inşa etmek "özgür" olabilir, ancak fırsat maliyetinizi düşündüğünüzde gerçekten öyle mi? Hepsini kendiniz yaparak kazanacağınız fayda: potansiyel olarak ücretsiz ("bedava"). Mevcut bir hizmeti kullanmanın yararı: Saatlerce ve saatlerce tasarruf edin. Ayrıca, bugünlerde binlerce istek / saniye, sürekli web yükleri ile başa çıkmak için modern web mimarileri (paralelleştirme) ile muhtemelen rutindir. Sonunda, bu mesele için "özgür" ve "uygun fiyatlı" bir tercih meselesi olduğunu düşünüyorum.
Matt

1
@Matt Eller serbest "serbest" her zaman ücretsiz değildir. Buna karşı çıkmayacağım (zamanınız paradır). Açık kaynak kodlu çözümlerin çoğunun maliyetinin aslında maliyet modelinde kullanım lisanslarından destek hizmetlerine doğru bir kayma olduğunun farkındayım. Ben ironik olmaya çalışıyorum değildi, ben Jeffey ücretsiz (hatta makul fiyatlı) için çözüm sunabilir eğer bu olduğunu düşünüyorum olduğunu daha iyi bir çözüm. SmartyStreets'in listelenen en iyi fiyata, 20 milyon puan 100.000 dolara mal olacak. Ticari kullanım durumlarında bile maliyetin bir kısmını yapabileceklerinden eminim.
Ragi Yaser Burhum,

1
Ayrıca çağdaş mimarilerde çok uygulanabilir olan saniyede 1000 / req, yine de coğrafi kodlama için harika bir mühendislik gerektirecektir . Bunu yapmak için benim aksesuarımı
alıyorlar

8

2010 TigerLine verilerini kullanarak bir postgis geocoder inşasını açıklayan bu çözümü kullandım. Şu anda çalıştırıyorum - 2 milyon adresin coğrafi kodunun belirlenmesi 3 hafta alacağı için hızlı değil.

Bununla birlikte, ücretsiz, engellenmemiş ve coğrafi kodlamaya başlamak için bir (büyük) devletin verilerini kurmak ve yüklemek için en az kodlama ve postgres becerilerine sahip 2 günden az bir süre aldı. Ayrıca, sistem için hiçbir postgres ayarlaması yapmadım ve NFS bağlantılarının üzerinden geçiyor, bu yüzden gerekirse ihtiyacım olursa alabileceğim bir veya iki büyüklükte performans kazancı değerinde olduğundan şüpheleniyorum.

Web servislerini kullanmak yerine, tüm adreslerimi postgres veritabanına yükledim ve ardından bir kerede hepsini coğrafi olarak kodlamak için hızlı ve kirli bir perl betiği çalıştırıyorum:

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 

(satır yalnızca okunabilirlik için kesiliyor)

Böylece, "bu ID değerine sahip bir adresi coğrafi olarak kodlayın ve en iyi eşleşmeyi kullanın" update deyimi ve bunu yapmak için psql'ye yönlendirir. Yalnızca derecelendirme yapmadan adres kodlama girişiminde bulunur; yani önceden kodlanmamış. Böylece yeniden başlatılabilir ve her biri bağımsız olarak yapılır.


2010 TigerLine verilerinin bazı adresler için yanlış olduğunu buldunuz mu?
Chris Muench

Hiçbir şekilde kusursuz veri değil; Bununla birlikte, sahip olduğum adres verileri, kalite açısından septiktir. Yazılan coğrafi kodlayıcı, alt seviyenin daha iyi olduğu bir "derecelendirme" alanı sağlar. Cevabımı bir örnek ekleyeceğim.
Adam Musch

@ChrisMuench: Bana bir ya da iki California adresi verirseniz, size göstermem için onları coğrafi kodlayıcımdan vurmaktan memnuniyet duyarım - bu şekilde onları seçmiyorum.
Adam Musch

Ben de NY’daki bir adres için postgis geocoder'ı denedim, ve 1 metreye 500 fit uzakta olacaklardı
Chris Muench

Bu sizin için çok geç ama bir başkası yararlı bulabilir ... Adresinizin iyi ayrıştırıldığından emin olun. Odamın "123 Oak St. Anytown ST 12345" i birleştirdiği sırada virgül eklediğimde 550x hızlandım: "123 Oak St., Anytown, ST, 12345"
aaryno 19

3

Sanırım Geocode'a girmek istiyorsun ama bunun için para ödemiyor musun? 20 milyon kaydı coğrafi olarak kodlayabileceğiniz bir sürü hizmet var, ancak size mal olacak. Esri, Pitney Bowes ve diğerleri, bu hizmetleri abonelik yoluyla veya x coğrafi kod başına ücret karşılığında sunmaktadır. 20 milyon önemsiz değildir, ancak bunun için bir iş vakası olduğunu varsayıyorum.



3

Bu yazı muhtemelen asıl afişe yardımcı olmak için çok geç. Ancak, büyük miktarda veriyi coğrafi olarak değerlendirmek isteyenler için, bağımsız olarak oluşturulan, kullanımı kolay ve yine de güçlü olan "Kolay Georeferencer" adlı yazılımımı inceleyebilirsiniz (yazının altındaki ekran görüntüsüne bakın).

Programın kullanımı basit ve doğrudandır ve doğrudan kurulum gerektirmeyen bir exe dosyasından çalıştırılır. GNS veya GeoNames veri kaynağı arasında coğrafi kodlamayı seçebilir ve şimdiye kadar başka hiçbir coğrafi kodlayıcının yapamadığını, GADM yönetim birimleri veritabanına dayanan coğrafi kodları ve CShapes veri kümesinden tarihi ülke sınırlarını coğrafi kodlamayı seçebilirsiniz. Tek uyarı, adres verilerini coğrafi kodlamamasıdır. Tüm çıktılar, bir CBS'de anında görselleştirme / analiz için hazır şekil dosyaları olarak gelir.

Büyük verilerin verimliliği ve işlenmesi ile ilgili olarak, program sadece 3 saat içinde 100.000 kayıt coğrafi kodlamak için test edildi. Daha büyük veri kümeleri için, işlem süresindeki beklenen artış, eğri olarak düşmelidir, çünkü işlem zamanının çoğu, yalnızca ülke referans veri setleri yüklendiğinde ilk aşamaya gider, ancak daha sonra toplanır. Ayrıca, büyük veri setlerini coğrafi kodlarken internet şişe bağları veya bağlantı sorunları hakkında endişelenmenize gerek yoktur, çünkü yazılım, referans veri setleri ve işlemlerin tümü yerel bilgisayara dayanır. Yazım farkları için belirsiz ad eşleştirme hesaplamasına dayandığından, eşleşme oranları yüzde 80-90'a kadar çıkabilir.

Tanıtım belgesi ve başlangıç ​​kılavuzu dahil olmak üzere daha fazla ayrıntı indirme paketine dahil edilmiştir. Denemekte tereddüt etmenize gerek yok, program, bilgisayarınızın herhangi bir taahhüdü veya karmaşası olmadan masaüstünüze yerleştirebileceğiniz ve çalıştırabileceğiniz basit bir dosyadır.

Yazılım şu adresten indirilebilir: http://geocodeanything.wordpress.com/

Umarım yardımcı olur.

görüntü tanımını buraya girin


Her zaman bir yazılım ürünü üreten şirket için yazar / geliştirici ve / veya iş olduğunu açıklamalısınız.
RyanDalton

@RyanDalton "Oluşturduğum yazılımı" yazdığımda yazar olduğumu açıklamıştım, ancak cümle içinde çok fazla vurgulanmadığı için fark edilmeden nasıl geçtiğini görebiliyorum. Kendi yazılımımı kınadığımı daha açık bir şekilde ifade etmek için ifadelerimi değiştirdim.
Karim Bahgat

2

ABD adreslerini coğrafi olarak kodlayacağınız için , Veri Bilim Araç Seti'nden Koordinatlara Yönelik Sokak Adresinin sizin için iyi çalışması gerektiğini düşünüyorum.

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.

Yine de sanal makineyi indirmek ve kendi donanımınızdan çalıştırmak isteyebilirsiniz . Bu şekilde, API sınırları konusunda endişelenmenize gerek yok, siz de onu kontrol edebilirsiniz. Oh ve ücretsiz olduğunu söyledim mi? ;-)


Bu oldukça şaşırtıcı! Daha önce hiç duymadığım için şaşırdım. Ayrıca, VM'yi indirebilmeniz ve kendi sisteminizde çalışmaya hazır hale getirmeniz harika.
RyanDalton

O da açık kaynak. :) github.com/petewarden/dstk
RK

2

İhtiyacınız olan hassasiyet seviyesine bir referans görmedim, ancak çatı katının uzun lat veya buna yakın olmasını istediğinizi farz ediyorum. Giriş adresinin kalitesi de bir faktör olabilir. İyi temizlenmiş bir adres listesi eksik veya hatalı adres listesinden daha iyi ve daha hızlı kodlanır. Ayrıca,% 90 isabet oranı kabul edilebilir mi yoksa kodlanmış 20 milyon adresin tümüne mi ihtiyacınız var? Ücretsiz bir çözümüm yok ama bildiğim ve kullandığım nispeten ucuz bir çözüm var. Semaphore Corp'dan ZP4, http://www.semaphorecorp.com/bir adres temizleyici / coğrafi kodlayıcı sunar ve adresleri işleyen ve temizlenmiş bir adres, adresin USPS'nin teslim edilip edilemeyeceğini belirten bir bayrak ve ZIP + 4 için uzun olanı döndüren ekler sunar. ZIP + 4 hassasiyeti genellikle inşaat alanlarında (caddenin doğru tarafı ve doğru blokta) çatı hassasiyetine yakındır ve kırsal alanlarda yakın değildir. 30 günlük lisansın ücreti 120 ABD Dolarıdır. Bu sürenin sonunda adres temizleyici çalışmaya devam eder, ancak Teslim Noktası Doğrulama (DPV) ve coğrafi iadeler çalışmayacaktır. Son iki yıl içerisinde oluşturulmuş nispeten hızlı bir bilgisayarla ve yerel olarak depolanan ve erişilen tüm veri verilerinde 20 milyon kayıt yaklaşık 10 gün içinde yapılmalıdır. Son 15 yıldır coğrafi kodlama adresleri oldum ve çoğu zaman ZP4 kullanıyorum. Uzun lat veya DPV teklif etmeden önce,


2

Şu anda 18 milyon adrese coğrafi kod veriyorum, bu yüzden kurulumumu paylaşmak istiyorum.

Temel olarak Amazon EC2 örneğini PostGIS Tiger Geocoder sunucusu olarak ayarlamak için uygun bir oyun kitabı kullandım, daha sonra coğrafi kod adreslerini toplu halde tutmak için komut dosyası kullandım, sayım bloğuna eşledim.

Amazon EC2'nin maliyeti: minimum gereksinim 180G SSD'nin maliyeti yaklaşık 18 $ / ay. T2.large örneğim, toplamda yaklaşık 90 $ / ay tuttu.

SSD> 180G olan bir linux kutunuz varsa, temelde ücretsiz de kullanabilirsiniz.

Ortalama performansım yaklaşık 170 ~ 300 ms / iyi kalite adres, 400 ~ 600 ms / kötü kalite adres. Kötü kaliteyle, birçoğunun eksik veya yanlış şehir, posta kodu veya hatta sadece yanlış adresleri var. Bu tür bir adresin coğrafi kodlaması çok uzun zaman alıyor, bu nedenle performansınız girdi kalitesine bağlı. Kullandığım Amazon EC2 örneği bir ayda yaklaşık 4 milyon gerçekten kötü biçimlendirilmiş adresleri coğrafi olarak kodlayabilir.

Daha fazla ayrıntı için, sistem kurulumu ve komut dosyaları hakkında blog yazıma bakın



1

İş akışınız Python'da ise, coğrafi harika bir çözümdür. Temel coğrafi kodlama mantığınızı soyut olarak yazabilir ve daha sonra birçok sağlayıcıdan birini (ArcGIS, Baidu, Bing, DataBC, GeocodeFarm, GoecoderDotUS, GeoNames, Google, IGN Fransa, LiveAddress, NaviData, Nominatim (OSM), OpenCap, OpenMapQuest, BOSS Yer Bulucu, What3Words, Yandex ... phew). Hepsini bile kullanabilirsiniz ve nihayetinde birden fazla coğrafi kodlama servisi tarafından doğrulama ile doğru olma konusunda en yüksek güvene sahip olan noktayı seçebilirsiniz. Bu hizmetlerin çoğu kayıt gerektirir (ancak hepsini değil). ABD'de kullanım için eşit derecede uygun olmayabilirler, ancak temiz bir Python işlevi ile yapmanın faydası, bunun için kontrol edebilmeniz gerektiğidir.

İşte kısa bir örnek:

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/

Gerçekten de zor olan tek şey, adreslerinin kötü bir şekilde oluşturulmamasını sağlamak. Ancak, 20 milyon lokasyonun coğrafik olarak kodlanması muhtemelen çok zaman alacaktır, ancak ... bu tür bir yük muhtemelen birinin hizmet şartlarını ihlal edecektir. Umarım bu olsa birine yardımcı olur.


ile CSV kullanabilir miyim?
Salman,

Tabii, Python ile okursanız.
alphabetasoup

0

coğrafi kod isteğiniz günde 2,500'ü geçmezse, Google Geocoding API'sini kullanabilirsiniz . api'ye bir göz atmalısınız, sonuçlara json veya xml olarak dönebilirsiniz.

Kullanım Sınırı:

Google Geocoding API'sinin kullanımı, günlük 2500 coğrafi konum istek sorgusuna tabidir. (İşletmeler için Google Haritalar API'sı kullanıcısı günde 100.000 adede kadar istekte bulunabilir.)

Örnek:

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

Örnek Sonuç:

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

ve coğrafi kodlama için bazı linkleri google’dan kontrol edebilirsiniz:

1. Tek Kod

2. Ters GeoCoding

3. Google GeoCoding ile Başlarken

umarım sana yardım eder


15
Bu, 20 milyon lokasyonun coğrafi kodlanması için sadece 22 yıl (8.000 gün) sürer. Tamamen makul bir çözüm.
Andy W

bunu biliyorum ve coğrafi kod talebi günde 2.500'ü geçmezse, kullanabileceğini ifade ettim ... herhangi bir çözüm bulamazsa bu bir seçenek
Aragon

4
Bu hizmet şartlarını ihlal ediyor. Sonuçları bir Google Haritasında görüntülemiyorsanız, ilegal'dir. Yapsanız bile, bazı insanların 20 milyon özellik için biraz kullandığı "önbellek argümanı" nı buluyorum!
Ragi Yaser Burhum, 7:12
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.