Daha çox

PostGIS ilə tərs geokodlaşdırmanın ən yaxşı yolu nədir?

PostGIS ilə tərs geokodlaşdırmanın ən yaxşı yolu nədir?


PostGIS ilə tərs geokodlaşdırmanın bir yolu varmı? İnternetdə çox məlumat var, amma çox qarışıq olduğunu gördüm ...

Mən PostGIS verilənlər bazası ilə öz Postgres -ə osm məlumatlarını idxal etdim. İndi verilənlər bazamla coğrafi kodlaşdırma və tərs geokodlaşdırma etmək istəyirəm. Saxlanılan Prosedurların, yoxsa bir yerdə problemimi həll edən bir layihənin olub olmadığını bilmirəm.

Etmək istədiyim növbəti addım bu cür istəkləri idarə edə biləcək bir veb xidməti yaratmaqdır, amma bu başqa bir sualdır.


Nəhayət, PostGIS verilənlər bazamla coğrafi kod və tərs geokod etmənin yolunu başa düşürəm. Bir nöqtəyə yaxın olan həndəsə növlərini tapan saxlanılan bir prosedur etdim. Bu saxlanılan prosedur ən yaxın nöqtələri əldə etmək üçün məsafə funksiyasından istifadə edir. Bundan sonra, tərs geocoding istəklərini həll etmək üçün bu saxlanılan proseduru çağıran bir RESTful API yaratdım.

Səhv edirəmsə, məni düzəlt, amma başa düşdüm ki, Nominatim layihəsi OSM -dən idxal edilmiş verilənlər bazası üçün API yaradır. Beləliklə, tərs geocoding və coğrafi kodlaşdırma üçün hər hansı bir saxlanmış prosedur yaratmağa ehtiyac yoxdur. İstəkləri veb üzərindən həll etmək üçün heç bir veb xidməti etmək məcburiyyətində deyilsiniz.

Ümid edirəm bu kiməsə kömək edəcək.

FUNKSİYASI YARADIN VƏ DEĞİŞTİRİN reverse_geocode (lat ikiqat dəqiqlik, ikiqat dəqiqlik) Mətni $ BODY $ elan nöqtəsi həndəsəsi olaraq qaytarır; rekord qeyd; coğrafi kod mətni; başlanğıc nöqtəsi: = geomfromtext ('POINT (' || lat || "|| uzun || ')', 4326); dist asc limiti 1 ilə mapserverdb_point sırasından rec daxilində ad, məsafə (yol, nöqtə) seçin; coğrafi kod: = rec.name; geocode qayıt; end; $ BODY $ LANGUAGE plpgsql;

PostGIS 2.0 tiger geocoder, Tiger məlumatlarından istifadə edərək tərs bir geokoderə malikdir. Coğrafi kodlayıcı PostGIS 1.5 8.4+ və ya daha yüksək bir versiyaya gözəl bir şəkildə quracaq.

ABŞ -da olsanız, hamısı plpgsql funksiyaları olaraq paketləndiyindən istifadə etmək ən asan ola bilər.

http://www.postgis.org/documentation/manual-svn/Extras.html#Tiger_Geocoder http://www.postgis.org/documentation/manual-svn/Reverse_Geocode.html


Nominatim tərs

Ters Coğrafi Kodlaşdırma Ters coğrafi kodlaşdırma, bir enlem və boylamdan və ya bir OSM obyektindən bir ünvan yaradır. Parametrlər Əks API -nin əsas formatıdır. https://nominatim.openstreetmap.org/reverse?<query> Tələb olunan məkanın necə təyin olunmasının iki yolu var: lat = & ltvalue & gt lon = & ltvalue & gt Ünvan yaratmaq üçün coğrafi yer. Coordiantes WGS84 formatında olmalıdır Əks API -nin əsas formatıdır. https://nominatim.openstreetmap.org/reverse?<query>. Tələb olunan yeri necə təyin etməyin iki yolu var: lat = & ltvalue & gt lon = & ltvalue & gt. Bir ünvan yaratmaq üçün coğrafi bir yer. Coordiantes WGS84 formatında olmalıdır. osm_type = [N | W | R] osm_id = & ltvalue & gt Nominatim, OpenStreetMap məlumatlarından istifadə edərək Yerdəki yerləri ad və ünvana görə (coğrafi kodlaşdırma) tapmaq üçün istifadə edir. Həm də tərsini edə bilər, planetin hər hansı bir yeri üçün bir ünvan tapa bilərəm Bildiyimə görə, Nominatim tərs geokodundan bir dəstə məlumat göstərə bilərsiniz. Bu bir nümunədir: geopy.geocoders idxal Nominatim lokator = Nominatim (user_agent = myGeocoder) koordinatları = 53.480837, -2.244914 yer = locator.reverse (koordinatlar) location.ra javascriptdə (və ya php ) Enlem və Boylamı qəbul edən və Ünvan qaytaran. Mümkünsə Nominatim ilə işləmək istərdim. Google, Bing və ya CloudMade və ya digər xüsusi həllərdən istifadə etmək istəmirəm

Nominatim, format = html istənildikdə birbaşa axtarış interfeysini təmin etmək üçün istifadə olunurdu. /Tərs və /axtarış istisna olmaqla bütün son nöqtələr üçün bu hətta standart olaraq istifadə olunurdu. Aşağıdakı bölmədə, istifadəçilərinizin əvvəllər UI təqdim etdiyi URL-ə girdikləri zaman nominatim-ui-yə yönləndirilməsi üçün Apache və ya nginx-in necə qurulacağı təsvir olunur. Çoxlu sayda müraciət edirsinizsə, müraciətlərinizi müəyyən etmək üçün uyğun bir e -poçt ünvanı daxil edin. Daha ətraflı məlumat üçün Nominatim İstifadə Siyasətinə baxın. debug = [0 | 1] Müxtəlif geliştirici ayıklama məlumatlarını çıxarın. Nominatim -in Search Loop məntiqinin daxili məlumatları və SQL sorğuları. Çıxış (kobud) HTML formatıdır. Bu, göstərilən maşında oxunan formatı ləğv edir. (Varsayılan: 0 Bu, hazırda "Nominatim" coğrafi kodunu yükləyir və nümunəsini götürərək qaytarır

2 bizi. '' 'geolocator yoxdursa qlobal geolokator: cəhd edin: geopy.geocoders -dən ImportError istisna olmaqla Nominatim idxal edin: qayıt Yox geolocator = Nominatim (user_agent = geolocator_user_agent) qayıt geolokator qayıt geolokator. Misal 11 Problemləri bildirmək üçün github üzərindəki Nominatim problemlərindən istifadə edin. Zəhmət olmasa istifadə etdiyiniz axtarış sorğusu, nəticədəki problem və problemin itkin məlumatlarla əlaqəli olması halında, osm tipini (qovşaq, yol, münasibət) və elementin kimliyi daxil olmaqla problemin tam təsvirini daxil etdiyinizə əmin olun. bu itkin

Nominatimə xoş gəldiniz. Bu, OpenStreetMap saytında istifadə olunan axtarış motoru üçün ayıklama interfeysi. Daha çox məlumat Nominatim həm irəli, həm də tərs geokodlaşdırma edə bilər və dünyanın bütün ölkələrini, dillərini və ünvan formatlarını dəstəkləyir. OpenStreetMap icması tərəfindən hazırlanır və saxlanılır və OSM məlumatları üçün standart bir coğrafi kodlaşdırma xidməti olaraq istifadə olunur. Nominatim müsbət və mənfi cəhətləri İndiyə qədər yaxşı səslənir Nominatim (Latın dilindən 'adı ilə') OSM məlumatlarını ad və ünvana görə axtarmaq və OSM nöqtələrinin sintetik ünvanlarını (tərs geocoding) yaratmaq üçün bir vasitədir. Nominatim.openstreetmap.org saytında tapa bilərsiniz. Nominatim, OpenStreetMap ana səhifəsindəki axtarış qutusunun mənbələrindən biri olaraq da istifadə olunur. Bir neçə şirkət, bir API vasitəsilə sorğu göndərə biləcəyiniz Nominatim nümunələrini təqdim edir, faylı konfiqurasiya etdikdən sonra Nominatim qovluğunuzdan aşağıdakı əmri işlədin altındakı Alternativlər bölməsinə baxın. bash ./utils/update_database.sh. Bu, replikasiya serverindən fərqlər, idxal fərqləri və verilənlər bazasını indeksləşdirəcək. Skriptdəki standart replikasiya serveri (Geofabrik) gündəlik yeniləmələri təmin edir

2. Ters axtarış edərkən ünvan detallarında yuxarı baxdığım nöqtəni ehtiva etməyən hissələr var. Nominatim -də tərs API çağırışının necə işlədiyinə dair ümumi bir yanlış fikir var. Ters sizə istədiyiniz nöqtənin ünvanını vermir. Ters ən yaxın obyekti istədiyiniz nöqtəyə qaytarır və sonra ünvanını qaytarır. Nominatim istifadə edərək, bir ad və ya ünvan təqdim edərək coğrafi obyektləri axtarmağa imkan verir. Əksinə coğrafi kodlaşdırma aparmaq da mümkündür, bunun əvəzinə coğrafi koordinatları təqdim etməklə bir ünvan tapılır. Mənə lazım olan budur, çünki artıq koordinatlarım var idi və bu koordinatlarda yerlər haqqında əlavə məlumat tapmaq istəyirdim


Tez-tez soruşulan suallar

Coğrafi kodlaşdırma coğrafi koordinatları (enlik və uzunluq) coğrafi bir istinada çevirir - məsələn, ünvan, bir yer adı və ya bir yer və ya əksinə. Vikipediyadakı yaxşı insanlar bunu bacardığımızdan daha yaxşı izah edirlər.

İrəli geocoding edirsiniz?

Bəli, API ilə bir ünvanı və ya yer adını koordinatlara çevirmək prosesi olan "irəli geokodlaşdırma" edə bilərsiniz.

Ters geokodlaşdırma haqqında nə demək olar?

Bəli, məmnuniyyətlə "tərs geokodlaşdırma" da edə bilərik ki, bu da koordinatları insan tərəfindən başa düşülən bir yer adına və ya ünvana çevirmək deməkdir. Koordinatları vergül və ya (URL kodlu) bir boşluqla ayrılmış bir enlem və boylam olaraq keçin və API avtomatik olaraq geokodu geri çevirmək istədiyinizi işləyəcək. Budur bir nümunə:

Ters coğrafi kodlaşdırma haqqında daha çox məlumat əldə etmək istəyirsinizsə, əks coğrafi kodlaşdırma ilə bağlı hərtərəfli bələdçimizi faydalı tapa bilərsiniz.

Xəritələr edirsiniz?

Xeyr. Bir şeyi yaxşı etməyə diqqət edirik - bir geocoding API. Xüsusi xəritələrə ehtiyacınız varsa, orada bir çox əla xidmət var. Thunderforest və Stadia Xəritələrini tövsiyə edirik.

Marşrutlaşdırma təmin edirsinizmi?

Xeyr. Yuxarıda göstərildiyi kimi, bir şeyi yaxşı etməyə diqqət edirik - coğrafi kodlaşdırma API. Marşrutlaşdırmaya ehtiyacınız varsa, Graphhopper və Verso -ya (marşrutlaşdırma optimallaşdırmasına diqqət yetirən) nəzər salmağı məsləhət görürük. Hər ikisi də açıq mənbəli / açıq məlumat əsaslı şirkətlərdir.

"Yola yapış" API təmin edirsiniz?

Bizim API istək başına yalnız bir yeri (koordinat cütü) qəbul edir, biz parçaları və ya bir sıra nöqtələri qəbul etmirik. İsteğe bağlı yol məlumatı ayarını istifadə edərək sizə ən yaxın yola coğrafi kod yazmağa icazə veririk. Zəhmət olmasa API sənədlərində müvafiq detallara baxın.

Axtarış formaları üçün "məkan avtomatik təklif" verirsiniz?

Xeyr, hazırda bir coğrafi axtarış və ya "avtomatik təklif" funksiyası təmin etmirik. İnşaat prosesindəyik və 2021 -ci ilin payızında istifadəyə verəcəyimizi ümid edirik.

Xidmətin nə vaxt başladığını bilmək istəyirsinizsə, məlumatlı qalmağın fərqli yollarına baxın.

Yerə IP ünvanı verirsinizmi (tez -tez "geoip" və ya "ip2location" adlanır)?

Xeyr. Bir şeyi yaxşı etməyə diqqət edirik - bir geocoding API. Yer axtarışı üçün IP lazımdırsa, orada bir neçə pulsuz və pullu xidmət var. IPinfo, IP Sidekick və ya IP Vigilante -ə baxın. Blogumuzdakı bu yazıda izah edildiyi kimi ipinfo istifadə edirik.

Veb saytımı ziyarət edən birinin yerini təyin etmək üçün OpenCage -dən istifadə edə bilərəmmi?

Bu, brauzer geolokasiyası olaraq bilinən bir prosesdir, coğrafi kodlaşdırmadan fərqli bir anlayışdır. Brauzerin coğrafi yerləşməsi və coğrafi kodlaşdırma ilə birlikdə necə istifadə ediləcəyi ilə bağlı ətraflı bir bələdçimiz var.

İstək başına birdən çox sorğu (yer) dəstəkləyirsinizmi (bəzən "toplu geokodlaşdırma" və ya "toplu coğrafi kodlaşdırma" olaraq da bilinir)?

Hansı ölkələr üçün coğrafi kod yaza bilərsiniz?

Hamısı dünyada, qlobal əhatə dairəsindədir. Amma ölkədən ölkəyə, hətta ölkələr daxilində də dəyişəcək. Əhatə dairəsi istifadə etdiyimiz məlumat mənbələrindən asılı olacaq. Ən azından biz OpenStreetMap qədər yaxşıyıq və OpenStreetMap hər gün milyonlarla redaktə etməklə daim yaxşılaşır (OSM könüllüləri sayəsində!).

Geocoder API -nin arxasında nə dayanır?

Digər geokoderlər və çoxlu açıq məlumatlar.

İstifadə etdiyimiz bəzi tanınmış açıq mənbəli geokoderlər Nominatim, Data Science Toolkit və Two Fishes geocoderdir, lakin digərləri də var.

Bütün bunlar OpenStreetMap, Yahoo! GeoPlanet, Təbii Yer Məlumatları, Tematik Xəritəçəkmə, Ordnance Survey OpenSpace, Statistika Yeni Zelandiya, Zillow, MaxMind, GeoNames, ABŞ Siyahıyaalma Bürosu və Flickr'in şəkil sənədləri və daha çox şeylər. İşdə məlumat mənbələrinin tam siyahısı.

Elə isə niyə o açıq mənbəli geokoderləri birbaşa istifadə etməməliyəm?

Birincisi, öz proqramınızı yerləşdirmək və onu yeniləmək (və əsas məlumatları günümüzə qədər saxlamaq) əhəmiyyətsiz bir texniki problem ola bilər. Sizə vaxt və səy sərf edəcək. Əgər opsiya problemi sizin işinizdirsə, bunun üçün gedin. Yoxsa bunu həll etməyimizə icazə verin və bunun əvəzinə coğrafi kodlamaya davam edin.

OpenStreetMap -ın öz Nominatim xidməti olan digər açıq geocoding xidmətləri var. Bununla birlikdə, müəssisə səviyyəsində bir coğrafi kodlaşdırma xidməti olaraq deyil, eşleyiciler tərəfindən bir vasitə olaraq istifadə etmək üçün hazırlanmışdır və həqiqətən də istifadə siyasəti açıq şəkildə "çox məhdud bir qabiliyyətə sahib olduğunu" söyləyir və istifadəçilər çox tez -tez istədikdə bloklana bilər.

Həm də sizə göndərdiyimiz nəticələrin artırılması üçün çox şey edirik, güvən qolu, şərhlər, yaxşı formatlı gözəl adlar əlavə edirik.

Nəhayət, açıq geo tədbirlərinə mütəmadi olaraq sponsorluq etməyimizdən (Geomob görüşməsini Geomob -dan idarə edirik), əsas OSM proqram layihələrinə kod töhfə verdiyimizdən, bir çox öz layihələrimizi açaraq (pls yamaq göndər!) və OpenStreetMap Vəqfinin korporativ üzvləridir.

Artıq Google -un coğrafi kodlaşdırma API -dən istifadə edirəm, niyə OpenCage coğrafi kodlayıcısına keçməliyəm?

İki əsas səbəb daha yaxşı istifadə şərtləri (açıq məlumatlardan istifadə etdiyimiz üçün) və əhəmiyyətli dərəcədə aşağı qiymətdir.

Zəhmət olmasa, xidmətlər arasındakı dəqiq fərqlər haqqında daha ətraflı məlumat verən Google Xəritə coğrafi kodlaşdırma ilə köçürmənin tam icmalına baxın.

Bununla yanaşı, yalnız xidmətimizdən istifadə etməyiniz tələb olunmur. Bir çox insan xidmətimizdən və Google kimi digər xidmətlərdən istifadə edir. Bu adətən Google kimi bahalı bir xidmətdən daha sərfəli olacaq.

Gələcəkdə daha çox coğrafi kodlayıcı əlavə edəcəksinizmi?

Bəli, müntəzəm olaraq daha çox geokoder əlavə edirik, adətən ölkəyə xas olan geokoderlər. Xüsusi bir təklifiniz varsa əlaqə saxlayın.

Nəticələr necə sıralanır?

Nəticələr ən uyğunundan ən kiçiyinə qədər sıralanır. Zəhmət olmasa API səhifəsindəki sıralamanın təfərrüatlarına baxın.

Əsas məlumatlar nə qədər tez -tez yenilənir?

Hal -hazırda OpenStreetMap -dən hər gün yeniləyirik. Təcrübələrimiz göstərdi ki, daha tez -tez edilən yeniləmələr o qədər də faydalı olmur, çünki onlar verilənlər bazası sürətinə zərbə vurur. OpenStreetMap gündə ortalama bir neçə milyon redaktə edir.

API sahələr üçün dəqiq sərhədlər və ya çoxbucaqlı qaytarır?

Xeyr. Mümkün olduğunda məhdudlaşdırıcı qutunu qaytarırıq (nəticənin güvən hesabını hesablamaq üçün istifadə edirik). Çoxbucaqlıları geri qaytarmamağımızın bir neçə səbəbi var. Əvvəla, bir çox fərqli coğrafi kodlayıcıları birləşdiririk və bəzilərinin əsas məlumatlarında bəzi çoxbucaqlar olsa da, bəzilərində yoxdur və ya yalnız qismən əhatə dairəsi var. İkincisi, çoxbucaqlar məlumat ölçüsü baxımından tamamilə kütləvi ola bilər.

API -ni təhlükəsizlik duvarının arxasında və ya istifadəçilərin qeydiyyatdan keçməsini tələb edən proqramda istifadə edə bilərəmmi?

Bəli. API -dən ictimai və özəl layihələr üçün istifadə edə bilərsiniz.

Masaüstü proqramında API istifadə edə bilərəmmi?

Bəli. Proqramınızın internetdə ictimaiyyətə görünməsinə ehtiyac yoxdur.

API-dən qapalı mənbə proqramında istifadə edə bilərəmmi?

API -ni Google Sənədlərdə və ya Excel -də istifadə edə bilərəmmi?

Bəli, Google Cədvəllərdə və ya Excel -də coğrafi kodlayıcının necə istifadə olunacağına dair təlimatımıza baxın.

Elektron cədvəliniz bir az daha mürəkkəbdirsə və ya sadəcə başqasının idarə etməsinə icazə verməyi üstün tutursunuzsa, məlumatların təmizlənməsi üzrə mütəxəssis olan və sizin xidmətimizdən istifadə edərək coğrafi kodlaşdırma edə bilən Clean Cədvəllərdəki dostlarımızla danışmağınızı məsləhət görürük.

Mənə verdiyiniz nəticələr səhvdir, bir səhv tapdım?

Mümkündür. API -də bir səhv tapmış ola bilərsiniz, ancaq əsas məlumatlarda bir deşik də tapa bilərsiniz. Bizə bildirin (əlaqə formumuz vasitəsilə) və problemin nə olduğunu anlayacağıq. mümkünsə, bütün əlavə parametrlər daxil olmaqla, etdiyiniz dəqiq sorğunu daxil edin. Sizə daha tez cavab verməyimizə kömək edəcək.

Düzəlişləri bizə qaytarmağı və əlbəttə OpenStreetMap -ə qaytarmağı daha da asanlaşdırmaq üçün davamlı olaraq çalışırıq. OpenStreetMap -a necə bir ünvan əlavə edəcəyinizi izah edən bir dərslik.


Necə qurulacaq və istifadə ediləcək

Mənbə kodunu GitHub -dan alın və hər hansı bir XS layihəsində 3 fayl yaradın (qovluğun adı vacib deyil):

Üç fayl aşağıdakı kimidir:

  • geocodeApiGoogle.xsjslib: Google Geocode API -ni (və aşağıdakı təyinat faylını) salan və sadə JS funksiyası zəngindən tərsinə coğrafi kodlaşdırılmış nəticələr verən XSJS Kitabxana faylı.
  • geocodeApiGoogleDest.xshttpdest: HTTP təyinat faylı, bu xarici URL -lərə zəng etmək üçün XS mühərriki tərəfindən tələb olunur.
  • geodataEnrich.xsjs: əsas XS xidməti, yuxarıdakı XSJS kitabxanasından istifadə edərək, masalarınızı oxumaq və yazmaq işinə deyilir.

GeocodeApiGoogle.xsjslib faylında hər şeyi düzgün bir şəkildə düzəltmək üçün kiçik bir düzəliş etməlisiniz, 22 -ci sətrə gedin və layihə yolunuzu ilk parametri olaraq ehtiva etmək üçün bu sətri redaktə edin (beləliklə “geodataenrich.services ”) layihənin adı və yolu ilə):

Tamam, bu işlə biz getməyə hazırıq.

Fərziyyələr

İstifadə edilə bilən cədvəllər və sahələr haqqında bir çox fərziyyələr etdim. Birincisi, ortaya çıxan ünvan məlumatlarını yazdığınız sahələr bütün sətirlərdir. Ünvan məlumatlarını yazdığınız sahələr də ortaya çıxan ünvan məlumatlarını saxlamaq üçün kifayət qədər uzun olmalıdır. Etmək istəyə biləcəyiniz sonrakı təhlilləri poza biləcək kor -koranə kəsmək əvəzinə, hər hansı bir hədəf sahəsi çox kiçik olarsa, proqram səhv salır. Testdə 50 nəticə hər hansı bir nəticəni saxlamaq üçün kifayət olduğunu gördüm. Son fərziyyə, oxunan və yazılan cədvəlin bir əsas açara malik olmasıdır. Əsas açarın göstərilməsinə ehtiyac yoxdur, ancaq SQL UPDATE zənglərinin işləməsinə icazə vermək üçün mövcud olmalıdır.

Təklif olunan İstifadə

Məlumat kütləsinə görə xidməti söndürmək əvəzinə, bunu bir sıra addımlarla etməyi daha təhlükəsiz hesab etdim. Bu addımları atmadan əvvəl, URL parametrlərinin tam dəstinə və nə etdiklərinə baxaq:

Yazmaq istədiyiniz qeydləri müəyyən etmək üçün istifadə olunan mənbə cədvəlindəki sahənin adı, eyni qeydlərin təkrar -təkrar yazılmasının qarşısını almaq üçündür. Bir qeyddə bu sahədə NULL dəyəri varsa, bu xidmət bütün hədəf sahələrə yazmağa çalışacaq. Bu sahə NULL olmayan bir şeylə doldurulsa, qeyd seçilməyəcək. Bu xananın doldurulması məcburidir.

Yaxşı, indi məlumatlarınızın coğrafi kodunu təhlükəsiz şəkildə geri çevirmək üçün addımlar atsınlar.

Əvvəlcə URL -dəki parametrlərin düzgün olduğundan əmin olmaq üçün ekrana daxil olaraq simulyasiya rejimində (parametre simüle = aktiv) kiçik bir məlumat nümunənizdə (maxrecs = 10 parametri) işə salın. İşləmə sürəti saniyədə 2 xarici API çağırışı ilə məhdudlaşır, bu da API zəngləri arasında 500 millisaniyə gecikmə deməkdir, ancaq bunu mindelayms parametri ilə dəyişə bilərsiniz. XS xidməti, lazımi vaxt bitənə qədər yatır. Giriş etdiyimiz üçün, nələrin baş verəcəyini ətraflı şəkildə görürük:

Sonra xidməti canlı rejimdə işlədin (simulyasiya parametrini buraxın) 10 qeyd üçün ekrana daxil olun. Bu səhvsiz tamamlanarsa, daha böyük bir qaçışa getməyimiz yaxşıdır.

Nəhayət, xidməti tam 2500 qeyd və ya daha çoxunu qeyd etmədən canlı rejimdə işlədin (qeyd parametrini buraxın).

Burada bir neçə nümunə URL var. Bütün URL -lər həmişəki kimi başlayacaq:

Aşağıdakı URL, zənglər, ekrana giriş və saxlama arasında 400 ms gecikmə ilə 10 qeydin masa və#8220GEODATA ”.

STATUS sahəsindəki geocode API zənginin nəticəsi. Seçiləcək sahə COUNTRY (yəni COUNTRY = NULL olan qeydləri axtarın) və yazılacaq sahələr ZIP və COUNTRY -dir:

Aşağıdakı URL, qeydlər olmadan zənglər arasında 100ms gecikmə ilə 2000 qeydin canlı bir yeniləməsini edəcək. Seçiləcək sahə ÜLKƏDİR və yazılacaq sahələr POSTKOD, BÖLGƏ və SUBREGION:

Google API məhdudiyyətləri

Yazılarkən Google xidmətlərinə bəzi məhdudiyyətlər qoyur. Bir iş lisenziyanız yoxdursa, gündə 2500 zənglə məhdudlaşmalısınız. Üstəlik onları çox tez -tez etməməlisiniz (baxmayaraq ki, nə qədər tez -tez icazə verildiyini dəqiq göstərməsələr də). Nəticələrin Google xəritəsində istifadə edilməli olduğunu bildirirlər. Bu blog yazıldıqdan sonra yaxşı dəyişə biləcək mövcud məhdudiyyətləri əldə etmək üçün API sənədlərini oxuyun.


Ters geokoder API nə edir?

Android Geocoder. Coğrafi kodlaşdırma küçə ünvanını və ya hər hansı bir ünvanı enlem ve boylama çevirmək deməkdir. Tərs Geocoding Enlem və Boylamın uyğun küçə ünvanına çevrilməsini nəzərdə tutur. Ünvan sinfi, küçə ünvanını, bölgəni, alt bölgəni, şəhəri, ölkəni, simvolu və s.

Eynilə, geokoder necə işləyir? Coğrafi kodlaşdırma Fiziki ünvanı kimi bir yerin təsvirini xəritədə dəqiq bir yerə, yəni bir cüt koordinata çevirmək prosesidir. Coğrafi kodlaşdırma bir və ya birdən çox yer, məkan təhlili üçün istifadə edilə bilən xüsusi xüsusiyyətlərə malik coğrafi xüsusiyyətlər çıxaracaq.

Həm də bilmək üçün, coğrafi kodlaşdırma ilə tərs geokodlaşdırma arasındakı fərq nədir?

The aralarındakı fərq "Coğrafi kodlaşdırma"və"Geolokasiya" Coğrafi kodlaşdırma - 'Ünvanları coğrafi koordinatlara çevirmək və ya tərs'. Əks geokodlaşdırmaDigər tərəfdən coğrafi koordinatları bir yerin təsvirinə çevirir, ümumiyyətlə bir yerin və ya ünvanlı bir yerin adını.

Google Geocoding API pulsuzdur?

Aylıq 200 dollar ilə pulsuz üçün kredit Xəritələr, Marşrutlar və ya Yerlər, müştərilərin böyük əksəriyyəti istifadə hallarının tamamilə uyğun olduğunu düşünür pulsuz. İstifadəniz bir ay ərzində 200 dolları keçməyincə sizdən heç bir ödəniş alınmayacaq. Tətbiq Xəritələr Daxil edin API, Xəritələr SDK Android və iOS üçün də pulsuz kreditinizi istifadə etmədən.


Poçt Kodlarından Həqiqətən İstifadə Etmisiniz?

Poçt Kodları, bu məqsədlə faydalı olmağa davam edən poçtu səmərəli şəkildə işlətmək və çatdırmaq üçün 20-ci əsrin ortalarında əla bir həll idi. Populyasiyalar və ya insan fəaliyyətinin digər formalarını öyrənmək üçün daha az idealdır. Ölçü, forma və populyasiyada çox fərqlidirlər ki, bu da onları bir analiz vahidi olaraq uyğunsuz edir. Poçt göndərməkdən başqa heç bir hüquqi və ya inzibati mənası və ya funksiyası yoxdur. Bütün amerikalılar onlarla tanış olsa da, heç bir müvafiq sosial mənası yoxdur. Məhəllələri təmsil etmirlər və kimdən haradan gəldiyini soruşduqda � ” deməyəcəklər.

Bəs başqa seçimləriniz nələrdir?

  1. Layihəniz üçün Poçt Kodu və ya ZCTA məlumatlarından istifadə etmək məcburiyyətində deyilsinizsə, bunu etməyin. Ümumilikdə Birləşmiş Ştatlar üçün, əyalətlərdən, PUMA'lardan və ya metropol bölgələrindən istifadə etməyi düşünün. Ştatlar daxilində: mahallar, PUMAlar və ilçe bölmələri. Kiçik sahələr üçün: bələdiyyələr, siyahıyaalma yolları və ya siyahıyaalma yollarının məcmuları.
  2. Xam, ünvana əsaslanan məlumatlarınız varsa, onu coğrafi kodlaşdırmağı düşünün. Bir ünvanı coğrafi kodlaşdırdıqdan sonra, GIS -dən istifadə edərək sərhəd sənədiniz olan hər hansı bir coğrafiya növünə təyin edə bilərsiniz və sonra onu həmin coğrafiyaya birləşdirə bilərsiniz. Bəzi coğrafi kodlaşdırıcılar, matç nəticəsindəki ölkələr və ya traktlar kimi coğrafiyanı belə təmin edir. Veriləriniz həssasdırsa, şəxsiyyət vəsiqəsi olaraq istifadə etmək üçün ünvan və seriya tamsayı istisna olmaqla bütün atributları çıxarın və coğrafi kodlaşdırmadan sonra nəticələri həmin identifikatordan istifadə edərək orijinal məlumatlarınızla əlaqələndirə bilərsiniz. Census Geocoder pulsuzdur, heç bir giriş tələb etmir, bir anda 1000 ünvandan ibarət qruplar etməyə imkan verir və bu təhlükəsizlik tədbirlərindən istifadə etməyə məcbur edir. Daha böyük işlər üçün bir API var.
  3. Bəzən seçim etmək imkanınız yoxdur və öyrənmək istədiyiniz şey yalnız bu xülasə formasında verilirsə və ya xam ünvan məlumatlarının coğrafi kodlaşdırılması ilə bağlı məxfilik narahatlıqları varsa, Poçt Kodu / ZCTA məlumatlarından istifadə etməlisiniz. Bölgəniz üçün ZCTA coğrafiyasını həm vizual görüntü, həm də statistik analiz üçün daha kiçik ZCTA -ları daha böyük olanlara birləşdirmək üçün dəyişdirmək istəyə bilərsiniz. Məsələn, Nyu York şəhərində bir çox şəhəri və siyahıyaalma blokunu əhatə edən bir neçə ZCTA var, çünki onlar çoxlu poçtu emal edən böyük bir ofis binası tərəfindən tutulur (və beləliklə öz poçt nömrələrinə malikdirlər). Ayrıca, əksər siyahıyaalma coğrafiyalarından fərqli olaraq, ZCTA -ların içərisində böyük deliklər var. Küçəsi olmayan və buna görə də ünvanı olmayan hər hansı bir sahə ZCTA -ya daxil edilmir. Şəhər yerlərində bu böyük parklar və qəbiristanlıqlar deməkdir. Kənd yerlərində, əhalisiz meşə, səhra və ya dağlıq ərazilərin geniş əraziləri. Və hər yerdə böyük su hövzələri.

Manhattan, NYC-də ya aşağı və ya sıfır əhalisi olan bir bloklu ZCTA-lar.


Bir RO sistemi seçərkən nəzərə alınmalıdır

Sistem növü

Bu gün bazarda tapılan bir neçə fərqli RO sistemi var, buna görə axtarışınızda nə axtardığınız sualını verməyə dəyər. Bəli, lavabonun altındakı musluk suyu qurğuları ən populyardır, ancaq bütün eviniz üçün təhlükəsiz və təmiz su əldə etmək istəyirsinizsə, bir giriş sistemini nəzərdən keçirə bilərsiniz.

Son illərdə bir çox tezgah RO məhsulları da havaya qalxdı. Bu sistemlər daha portativ bir həll olaraq yaxşı işləyir və bunlar kirayədə yaşayan insanlar üçün faydalı ola bilər.

Büdcəniz

Ən azından, tərs osmos vahidi üçün ən az 300 dollar büdcə etməlisiniz. Bəzi sistemlərin qiyməti 1000 dollara yaxın ola bilər. Öncədən satın alma ən böyük xərcdir, ancaq illik filtr dəyişdirmələrinizi sifariş etmək üçün bir az pul saxlamağı unutmayın ki, bu da hər paket üçün 30-60 dollardır.

Effektivlik nisbəti

Daha əvvəl də qeyd etdiyim kimi, tipik RO səmərəliliyi nisbəti 4 galon çirkab su ilə 1 galon təmiz sudur. Ancaq son illərdə istehsalçılar çirkab su ilə 3: 1, 2: 1 və hətta 1: 1 nisbətində çirkab su ilə daha səmərəli sistemlərin təmin edilməsi üzərində işləməyə başladılar. Bu qurğular əvvəlcədən daha çox pula meylli olsalar da, sonda uzunmüddətli istifadə ilə əldə etdiyiniz qənaət zamanla sizin üçün dəyərli bir sərmayə edə bilər.

Su keyfiyyətiniz

Su sisteminizin səmərəliliyinə təsir göstərə biləcəyi üçün suyunuzun keyfiyyəti də axtarışda nəzərə alınmalıdır. Yüksək bir çirkləndirici səviyyəsi, ehtimal ki, filtrasiya prosesinə təsir edəcək və filtr və membranın ömrünün qısalması ilə nəticələnəcək. Ancaq su təzyiqiniz kifayət qədər yüksəkdirsə, suyun keyfiyyəti filtrasiya sürətinə təsir etməməlidir.

Əlavə UV əlavə

RO, bakteriya və virusların əksəriyyətini aradan qaldırmağa qadir olsa da, bir UV işığı istifadə edərək, su mənbəyiniz bu çirkləndiricilərdə yüksəkdirsə, əlavə əminlik verməyə kömək edə bilər. UV eklentisi, suyunuzun içilməsinin 100% təhlükəsiz olduğunu təmin edən kimyəvi tərkibsiz bir məhsuldur, çünki müalicə prosesi patogenləri aradan qaldırmaq əvəzinə öldürməkdən ibarətdir.

Brian Campbell haqqında

Üzərində Ayda 100.000 oxucu, mənim missiyam, su keyfiyyəti ehtiyaclarınızı həll etmək üçün məlumat, məhsul və həll tapmağınıza kömək etməkdir.

Su təmizləyici sistem araşdırmalarım real dünya təcrübəsindən və amp araşdırmalarından (və simasız bir markadan deyil) ibarətdir.


Bunun daha asan bir yolu varmı? (tərs-coğrafi kodlaşdırma / ünvan axtarışı)

Ohayo ştatındakı golf sahələrinin siyahısını ünvanları ilə birlikdə almaq mənə tapşırıldı. İnternetdə tapa bildiyim yalnız adı və şəhəri olan məlumat dəstləri idi. Beləliklə, burada bitirdiklərim:

Ohayoda yalnız adı, şəhəri və əyaləti olan golf sahələrinin CSV.

Lat/lon koordinatları əldə etmək üçün QGIS -də (MMQGIS plaginindən istifadə etməklə) coğrafi kodlaşdırılmışdır.

Google Places API -ni vurmaq üçün bu lat/lon koordinatlarından istifadə edən bir Python skript yazdı. Poçt kodundan başqa hər şeyin API cavabına daxil olduğunu kəşf edirəm, buna görə də tam ünvanı (poçt kodu daxil olmaqla) əldə etmək üçün PID (yer identifikatoru) tutmalı və Places API -yə başqa bir zəng etməliyəm.

Tam ünvanı əldə etmək üçün PID istifadə edərək Places API -yə başqa bir zəng edin.

Uğurlu oldu (ilk API çağırışı ilə həll olunmayan bir neçə golf sahəsi), amma kömək edə bilmirəm, amma bunun daha asan bir yolunun olduğunu düşünürəm. Hər hansı bir məsləhət və ya məsləhət?

2 -ci addımda QGIS -də necə coğrafi kodlaşdırdığınızı izah edə bilərsinizmi? Geocode ünvanlarını haradan aldığınızı görmürəm.

QGIS -də MMQGIS plaginindən istifadə etdim. & QuotGoocode CSV ilə Google / Açıq Küçə Xəritələri & quot seçimindən istifadə etdim, sonra & quot; ünvan & quot sahəsi üçün golf sahəsinin adını və müvafiq sahələri üçün şəhər və əyaləti bağladım. Küçə ünvanlarını mənim üçün həll edəcəyinə ümid edirdim, ancaq mənə yalnız lat/lon koordinatları verdi.

Ənənəvi olaraq, coğrafi kodlaşdırmanın başqa istiqamətdə işləməsi nəzərdə tutulur: küçə ünvanlarını lat/lon koordinatlarına çevirmək. Bunun əksini etməliydim: qismən ünvanları (və ya lat/lon coordları) tam küçə ünvanlarına çevirin.

Beləliklə, oradan Google API -lərinə PID almaq üçün lat/lon koordinatları ilə zəng etdim və sonra tam küçə ünvanlarını əldə etmək üçün yenidən PID ilə əlaqə saxladım.

Əlavə etmək üçün düzəliş edin: Google bu prosesi & quot; əks geokodlaşdırma & quot; və ya & quot; ünvan axtarışı & quot; çağırır


Üzgüçülük Hovuzları üçün Tərs Osmos!

Bir üzgüçülük hovuzu sahibi olaraq kalsiumunuzun, ümumi həll olunan qatı maddələrinizin (TDS) və siyanurik turşunuzun (CYA) səviyyənizin çox yüksək olduğunu eşitmisinizmi? Bu səviyyələrin yüksək olması ilə heç kim sizə üzgüçülük hovuzunuzu boşaltmağınızı və yenidən doldurmağınızı söyləyibmi? Cənubi Kaliforniyadakı mövcud quraqlıq şərtlərimizlə dəli görünmür? Pool Water Recycling -də sizinlə həmfikirik və xidmətlərinizlə əlaqədar olaraq üzgüçülük hovuzlarınız üçün Ters Osmos mobil filtrasiyası və bəzi tez -tez verilən suallar haqqında sizə məlumat vermək istəyirik. Los -Anceles bölgəsindəki krandan çıxan su, təxminən yüzdə 400 (ppm) hissəsidir ki, bu da üzgüçülük hovuzunuzda qəbul edilə bilən su sərtliyi səviyyəsinin ən yüksək ucundadır. Su hovuzda buxarlandıqda bu sərtlik mineralları məhlulda qalır və tədricən konsentrasiyada yığılır. Konsentrasiya səviyyələri nə qədər yüksəkdirsə, su kafel xəttinizdə, daxili səthinizdə, filtrasiya avadanlıqlarınızda, tökmə yollarında və su xüsusiyyətlərində miqyaslama şansı daha yüksəkdir. Bu baş verdikdə, üzgüçülük hovuzunuzu çıxarmaq çox bahalı və hətta daha çətin ola bilər.

Beləliklə, mobil filtrasiya Ters Osmos (RO) necə işləyir?

Etməyiniz lazım olan yeganə qərar bizi yaşayış yerinizə və ya kommersiya mülkünüzə aparmağa qərar verdiyiniz üçün nisbətən sadədir? Mobil treylerimizdə kalsium sərtliyi, TDS, CYA, fosfatlar, duzlar və su yoluxucu xəstəlikləri azalda bilən sənaye RO qurğusu var. Hovuzdan su süzülür və hovuza qaytarılır. Su təmiz içməli sudur və məqsədimiz sizə krandan daha yaxşı su buraxmaqdır.

Nə qədər çəkir?

Hər şey zamanın funksionallığıdır. Əksər yaşayış işləri bir gündən az müddətdə başa çatdırıla bilər və işlərin əksəriyyəti həmişə boşaltma və doldurmaqdan daha az vaxt aparacaq.

Tamamilə! Suyumuz ən yaxşısıdır və astar heç vaxt açılmır ki, bu da ona mümkün zərərin qarşısını alır.

Filtrləmə zamanı hovuzda üzməyə icazə verilirmi?

Bu, bacardığınız qədər sizə ən böyük faydalarımızdan biridir. Hovuzda filtrasiya zamanı üzməyi təhlükəsiz edən elektrik naqilləri yoxdur.

Quraqlıq şəraitində bu filtrasiya niyə tövsiyə olunur?

Filtrəmiz yüksək təzyiqlə işlədiyi üçün RO ilə minimum su itkisinə imkan verir. İşi bitirdikdən sonra ümumiyyətlə 85% su qənaət edirik, bu da su itkisinin minimal olduğunu göstərir.

İşiniz bitdikdə su fərqli hiss edirmi?

Düşünürük və biləcəyiniz yeganə yol, görüş təyin etmək üçün bu gün bizimlə əlaqə qurmaqdır.


Python Coğrafi Kodlaşdırma 2 – ABŞ Ünvanı Alın

Python Geocoding Take 1 - Beynəlxalq Ünvanlar ABŞ xaricindəki coğrafi kodlaşdırma ünvanları ilə son macəralarımı müzakirə etdim. Bunun əksinə olaraq, ABŞ daxilində toplu coğrafi kodlaşdırma üçün saysız -hesabsız variantlar mövcuddur. Bu variantlardan bir neçəsini burada müzakirə edəcəyəm, amma əsasən öz API -lərindən istifadə edərək ünvanları toplu şəkildə yazmaq üçün yazdığım ABŞ Census Geocoder və Python skriptinə diqqət yetirəcəyəm. Kod və sənədlər laboratoriyamın ’s qaynaq səhifəmdə mövcuddur.

Bir neçə fərqli seçim

ESRI ’s coğrafi kodlaşdırma xidmətləri (hesabla) ArcToolbox -dakı vasitələr vasitəsilə coğrafi kodlaşdırma serverlərinə daxil olmağa imkan verir və ya bir skript yazıb API vasitəsilə əldə edə bilərsiniz. QGIS, Google xidmətlərinə (gündə 2500 qeyd pulsuz) və ya Açıq Küçə Xəritəsinə daxil olmaq üçün üçüncü tərəf plagininə malikdir. Hələ də coğrafi kodlaşdırılmış küçə sənədlərini yükləyərək uyğun bir xidmət yaratmaqla işləri köhnə qaydada edə bilərsiniz.

Alternativ olaraq, bir fayl yükləyə, uyğunlaşdıra biləcəyiniz və nəticələrini yükləyə biləcəyiniz istənilən sayda kommersiya və ya akademik xidmətə abunə ola bilərsiniz. İllərdir Texas A & ampM -də bunu etməyə imkan verən coğrafi kodlaşdırma xidmətlərindən istifadə etdim. Onların dərəcələri məqbuldur və ya bir akademik müəssisə və onlarla ortaq olsanız (xidmətlərinə bəzi bağlantıları veb saytlarında yerləşdirsəniz), partiyalarla uyğunluq etmək üçün pulsuz kredit tələb edə bilərsiniz.

Census Geocoder və API və Batch Geocoding üçün Python Script

The Census Bureau’s TIGER and address files are often used as the foundational layers for building these other services, to which the service providers add refinements and improvements. You can access the Census Bureau’s services directly through the Census Geocoder, where you can match an address one at a time, or you can upload a batch of 1000 records. It returns longitude and latitude coordinates in NAD 83, and you can get names and codes for all the census geographies where the address is located. The service is pretty picky about the structure of the upload file (must be plain text, csv, with an id column and then columns with the address components in a specific order – with no other attributes allowed) but the nice thing is it requires no login and no key. It’s also public domain, so you can do whatever you want with the data you’ve retrieved. A tutorial for using it is available on our lab’s census tutorials page.

They also have an API with some basic documentation. You can match parsed and unparsed addresses, and can even do reverse geocoding. So I took a stab at writing a script to batch process addresses in text-delimited files (csv or txt). Unfortnately, the Census Geocoding API is not one of the services covered by the Python Geocoder that I mentioned in my previous post, but I did find another third party module called censusgeocode which provides a thin wrapper you can use. I incorporated that module into my Python 3 script, which I wrote as a function that takes the following inputs:

census_geocode(datafile,delim,header,start,addcol)
(str,str,str,int,list[int]) -> files

  • datafile – this is the name of the file you want to process (file name and extension). If you place the geocode_census_funct.py file in the same directory as your data file, then you just need to provide the name of the file. Otherwise, you need to provide the full path to the file.
  • delim – this is the delimiter or character that separates the values in your data file. Common delimiters includes commas ‘,’, tabs ‘t’, and pipes ‘|’.
  • header – here you specify whether your file has a header row, i.e. column names. Enter ‘y’ or ‘yes’ if it does, ‘n’ or ‘no’ if it doesn’t.
  • start – type 0 to specify that you want to start reading the file from the beginning. If you were previously running the script and it broke and exited for some reason, it provides an index number where it stopped reading if that’s the case you can provide that index number here, to pick up where you left off.
  • addcol – provide a list that indicates the position number of the columns that contain the address components in your data file. For an unparsed address, you provide just one position number. For a parsed address, you provide 4 positions: address, city, state, and ZIP code. Whether you provide 1 or 4, the numbers must be supplied in brackets, as the function requires a Python list.

You can open the script in IDLE, run it to load it into memory, and then type the function with the necessary parameters in the shell to execute it. Bəzi nümunələr:

  • A tab-delimited, unparsed address file with a header that’s stored in the same folder as the script. Start from the beginning and the address is in the 2nd column: census_geocode('my_addresses.txt','t','y',0,[2])
  • A comma-delimited, parsed address file with no header that’s stored in the same folder as the script. Start from the beginning and the addresses are in the 2nd through 5th columns: census_geocode('addresses_to_match.csv',',','n',0,[2,3,4,5])
  • A comma-delimited, unparsed address file with a header that’s not in the same folder as the script. We ran the file before and it stopped at index 250, so restart there – the address is in the 3rd column: census_geocode('C:address_datadata1.csv',',','y',250,[3])

The beginning of the script “sets the table”: we read the address columns into variables, create the output files (one for matches, one for non-matches, and a summary report), and we handle whether or not there’s a header row. For reading the file I used Python’s CSV module. Typically I don’t use this module, as I find it’s much simpler to do the basic: read a line in, split it on a delimiter, strip whitespace, read it into a list, etc. But in this case the CSV module allows you to handle a wider array of input files if the input data was a csv and there happened to be commas embedded in the values themselves, the CSV module easily takes care of it if you ignore it, the parsing would get thrown off for that record.

Handling Exceptions and Server Errors

In terms of expanding my skills, the new things I had to learn were exception handling and control flows. Since the censusgeocoding module is a thin wrapper, it had no built in mechanism for retrying a match a certain number of times if the server timed out. This is an absolute necessity, because the census server often times out, is busy, or just hiccups, returning a generic error message. I had already learned how to handle crashes in my earlier geocoding experiments, where I would write the script to match and write a record one by one as it went along. It would try to do a match, but if any error was raised, it would exit that loop cleanly, write a report, and all would be saved and you could pick up where you left off. But in this case, if that server non-response error was returned I didn’t want to give up – I wanted to keep trying.

So on the outside there is a loop to try and do a match, unless any error happens, then exit the loop cleanly and wrap up. But inside there is another try loop, where we try to do a match but if we get that specific server error, continue: go back to the top of that for loop and try again. That loop begins with While True – if we successfully get to the end, then we start with the next record. If we get that server error we stay in that While loop and keep trying until we get a match, or we run out of tries (5) and write as a non-match.

In doing an actual match, the script does a parsed or unparsed match based on user input. But there was another sticking point in some instances the API would return a matched result (we got coordinates!), but some of the objects that it returned were actually errors because of some java problem (failed to get the tract number or county name – here’s an error message instead!) To handle this, we have a for i in range loop. If we have a matched record and we don’t have a status message (that indicates an error) then we move along and grab all the info we need – the coordinates, and all the census geography where that coordinate falls, and write it out, and then that for loop ends with a break. But if we receive an error message we continue – go back to the top of that loop and try doing the match again. After 3 tries we give up and write no match.

Figuring all that out took a while – where do these loops go and what goes in them, how do I make sure that I retry a record rather than passing over it to the next one, etc. Stack Exchange to the rescue! Difference between continue, pass and break, returning to the beginning of a loop, breaking out of a nested loop, and retrying after an exception. The rest is pretty straightforward. Once the matching is done we close the files, and write out a little report that tells us how many matches we got versus fails. The Census Geocoder via the API is pretty unforgiving it either finds a match, or it doesn’t. There is no match score or partial matching, and it doesn’t give you a ZIP Code or municipal centroid if it can’t find the address. It’s all or nothing if you have partial or messy addresses or PO Boxes, it’s pretty much guaranteed that you won’t get matches.

There’s no limit on number of matches, but I’ve built in a number of pauses so I’m not hammering the server too hard – one second after each match, 5 seconds after every 1000 matches, a couple seconds before retrying after an error. Your mileage will vary, but the other day I did about 2500 matches in just under 2 hours. Their server can be balky at times – in some cases I’ve encountered only a couple problems for every 100 records, but on other occasions there were hang-ups on every other record. For diagnostic purposes the script prints every 100th record to the screen, as well as any problems it encountered (see pic below). If you launch a process and notice the server is hanging on every other record and repeatedly failing to get matches, it’s probably best to bail out and come back later. Recently, I’ve noticed fewer problems during off-peak times: evenings and weekends.

The script and the documentation are posted on our labs resources page, for all to see and use – you just have to install the third party censusgeocode module before using it. When would you want to use this? Well, if you need something that’s free, this is a good choice. If you have batches in the 10ks to do, this would be a good solution. If you’re in the 100ks, it could be a feasible solution – one of my colleagues has confirmed that he’s used the script to match about 40k addresses, so the service is up to the task for doing larger jobs.

If you have less than a couple thousand records, you might as well use their website and upload files directly. If you’re pushing a million or more – well, you’ll probably want to set up something locally. PostGIS has a TIGER module that lets you do desktop matching if you need to go into the millions, or you simply have a lot to do on a consistent basis. The excellent book PostGIS fəaliyyətdədir has a chapter dedicated to to this.

In some cases, large cities or counties may offer their own geocoding services, and if you know you’re just going to be doing matches for your local area those sources will probably have greater accuracy, if they’re adding value with local knowledge. For example, my results with NYC’s geocoding API for addresses in the five boroughs are better than the Census Bureau’s and is customized for local quirks for example, I can pass in a borough name instead of a postal city and ZIP Code, and it’s able to handle those funky addresses in Queens that have dashes and similar names for multiple streets (35th st, 35th ave, 35th dr…). But for a free, public domain service that requires no registration, no keys, covers the entire country, and is the foundation for just about every US geocoding platform out there, the Census Geocoder is hard to beat.