Geocoding USA internet üzerinden gönderilemiyor mu?


46

Bir kerelik bir proje için birkaç bin adrese coğrafi kod vermem gerekiyor. Geçmişte bu tür bir şey için çeşitli çevrimiçi kaynaklar kullandım (örneğin, Google Maps API), ancak birlikte çalıştığım adreslerin gizli tutulması gerekiyor - bu, biraz demir almadıkça, Internet üzerinden gönderilmesi anlamına gelmiyor mahremiyet garantisi. Başka hangi seçeneklere sahibim?


4
Coğrafi olarak kodlamak istediğiniz belirli bir yer var mı? Örneğin, Avustralya, ABD, belirli bir devlet, vs.
fmark

Güzel soru - ABD’yle geniş anlamda ilgileniyorum, özellikle de Colorado, Front Range ilçesinde.
Matt Parker

1
RTD ile gerçekten hızlı bir tartışma açacağım, o alanda güçlü bir CBS'ye sahip olduklarını ve muhtemelen doğrudan destek verebileceklerini biliyorum. Aksi takdirde; Geocoder :: US harika bir seçenek. Dahili olarak çalıştırabilir ve verilerinizin kablo üzerinden geçmesi riskini almak zorunda kalmazsınız.
DEWright

@ DEWright, bu ilginç bir fikir - daha başka bir soruma daha . Teşekkürler!
Matt Parker

Yanıtlar:



10

Google Geocoding API'sini veya başka bir çevrimiçi kaynağı kullanmak, yerel seçeneklerden ziyade tercihiniz ise, Tor Projesi'ne ('Vidalia Paketi' adlı paketten kolayca kurulabilir) bakmanızı öneririm .

Tor, iletişiminizi dünyanın her yerindeki gönüllüler tarafından yürütülen dağıtılmış bir röle ağı etrafında zıplatarak korur: ziyaret ettiğiniz sitelerin fiziksel konumunuzu öğrenmesini önler.

Rastgele adreslerin enjeksiyonu ve iletişimi bitiş noktalarına şifrelemek için ssl (https) kullanımı ile birlikte (bunu yaptığınızdan da emin olun), uzaktan coğrafi kodlamanın daha güvenli bir yolunu düşünemiyorum. Hangi coğrafi kodlama hizmetini kullanırsanız kullanın, isteklerin nihayetinde nereden geldiğini ve https ile de kimsenin istemediğini tespit edemezsiniz. Not: Bunun için bir api anahtarı gerektiren bir coğrafi kodlama servisi kullanmayın, yoksa artık isimsiz kalmazsınız. (Google artık bir api anahtarı gerektirmiyor).

Bu prosedürün bir 'avantajı', talepleriniz birden fazla ip adresinden geliyor gibi görüneceğinden artık herhangi bir sayıda coğrafi kodlama isteğiyle sınırlı kalmayacağınızdır. Ancak, ben do not tavsiye veya bu güzel ücretsiz API'leri kötüye onaylamaz! API oranı sınırlarsa, oran hala sınırlı olacaktır (ancak, Tor kullanan iletim hızı doğrudan bağlanmaktan biraz daha yavaş olsa da).

Python'da örnek olay incelemesi - Vidalia Bundle'ı yükledikten ve proxy'nin 127.0.0.1:8118 (varsayılan) üzerinde çalışmasını sağladıktan sonra, Python 2.7 veya daha yüksek sürümlerde aşağıdakileri kullanarak bir https urllib2 proxy'si ayarlayabilirsiniz:

import urllib2
proxy = urllib2.ProxyHandler({'https': '127.0.0.1:8118'})
opener = urllib2.build_opener(proxy)
urllib2.install_opener(opener)
response = urllib2.urlopen("https://maps.google.com/maps/geo?q=Los+Angeles&sensor=false&gl=us")

Urllib2 proxy sunucularının, en azından Python 2.7'ye kadar https ile çalışmadığını unutmayın, bu nedenle bu yöntem yalnızca son Python sürümleriyle çalışır. Yukarıdaki örnekte her iki yerde de 'https' ('http' değil) olduğundan emin olun. Sadece Python 2.7.1 ile test ettim.

Vidalia, her 10 dakikada bir kimliğinizi / görünen IP adresinizin kökenini değiştirir, ancak yavaş oranlarla veya başka sorunlarla karşılaşırsanız (kota aşılmış hatalar varsa) veya özellikle paranoyaksanız ve kimliğinizi daha sık değiştirmek istiyorsanız, Tor kimliğinizi değiştirebilirsiniz Burada python kodunu kullanarak (aşağıda hafifçe değiştirilmiş). Vida parolasını girerek Tor parolasını statik bir parola (rastgele oluşturulmuş bir şifre yerine) değiştirmeniz gerekecektir. Ayrıca tüm değişikliklerden sonra Vidalia'yı yeniden başlatmanız gerekebilir.

p = "MySuperSecurePassword"
def renewTorIdentity():
    success = False
    try:
        s = socket.socket()
        s.connect(('localhost', 9051))
        s.send('AUTHENTICATE "' + p + '"\r\n')
        resp = s.recv(1024)
        if resp.startswith('250'):
            s.send("signal NEWNYM\r\n")
            resp2 = s.recv(1024)
            if resp2.startswith('250'):
                success = True
    except:
        success = False
    return success

4
Bu adresleri gizli tutmuyor, değil mi? Sorguyu gönderen makinenin fiziksel konumu burada önemsizdir (gizli değil).
underdark

4
Çoğu amaç için, sorguyu gönderen makinenin fiziksel konumu, bir coğrafi kodlama servisine gönderilen verilerin anonimliğinin korunmasında çok önemlidir. X Çalışma Enstitüsü'ndeki bir bilgisayarın 1000 adres için bir coğrafi kodlama isteği gönderdiğini söyleyin. Bir kişi (en azından teorik olarak) bu adresleri X hastalığı olan bireyleri içeren olarak tanımlayabilir. Buna karşılık, birçok kullanıcıdan gelen rastgele isteklerle karıştırılan ve herhangi bir kullanıcıya karşılık gelmeyen birden fazla IP adresinden gelen (Tor durumu) adresler, amaç açısından tanımlanamaz.
Victor Van Hee

Google’a veri gönderme (Tor veya başka bir şey aracılığıyla) temel bir gizlilik sorunudur. Google "ütüyle kaplı mahremiyet garantisi" sunmuyor.
Nicolas Raoul

7

Seçeneklerden biri , ABD Census'un Tiger / Line verilerini coğrafi kodlamak için kullanan açık kaynaklı bir Perl modülü olan Geo-Coder-US kullanmaktır. Kişisel olarak kullanmadım, ama mükemmel görünüyor. Yukarıdaki bağlantı, güzel bir genel bakış ve gerekli Census dosyalarının önceden kurulmuş olduğu bir sürüme bağlantı içeriyor.


6

Geokit kütüphanesi Google, Yahoo, Geocoder.us, Geocoder.ca ve Geonames'in herhangi birini kullanabilir. Ruby'de yazılmıştır ve Ruby on Rails projeleriniz için bir de kardeş kitaplık vardır:

http://geokit.rubyforge.org/

Gizliliği korumak için, tüm faaliyetlerinize sorguları, faaliyetlerinizle daha az bağlantılı kümeler halinde ayırarak yaymak olabilir. Çevrimiçi bir telefon rehberinden gerçek adresler ekleyerek adreslerinize gürültü de ekleyebilirsiniz. Sonunda sonuçları birleştirerek bu betiği internet kafeler gibi çeşitli yerlerden çalıştırmanızı öneririm.

Gizliliğinizi gerçekten korumanın tek yolu, tüm veri kümesini indirmek ve betiğinizi buna karşı çalıştırmaktır. OpenStreetMap’ten Nominatim sistemi var. Tüm şehirler için tamamlanmadı, ancak bunu diğer sağlayıcılara gönderilen adreslerin listesini azaltmak için kullanabilirsiniz.


5

Hâlâ gelişimin erken aşamalarında olmasına rağmen http://openaddresses.org/ , dünya çapındaki adreslerin ve ilgili coğrafi kodlama hizmetlerinin açık bir veritabanını sağlamayı amaçlamaktadır.

Özel olmasa da, açık adres veritabanının niteliği, çevrimdışı coğrafi kodlamaya izin vermek için bütünüyle (ya da en azından seçilen bölgeler için) indirmenin mümkün olduğu anlamına gelebilir.



3

Http://geocoder.us/ ' ın arkasındaki kodun , bir TIGER veri dosyası ve daha fazla veya daha azını kendi yerel kurulumunuzu ayarlayabilmeniz için indirebilirsiniz. Bu siteyi tekrar ziyaret ettikten hemen sonra görmüyorum, ancak biraz etrafa bakmak isteyebilirsiniz.


3

Neden daha önce kullandığın coğrafi kodlayıcıları kullanmıyorsun, diğer tüm meta verilerini kaldırsın?

"Gizli Yer; 123 Ana Cadde, Bazı Şehir", sadece "123 Ana Cadde, Bazı Şehir" gönderilmez mi? Adresler zaten halka açıktır. Sadece coğrafi kodlayıcıya bir nükleer üs listesinin veya tüm NSA lokasyonlarının olduğunu söyleme. Sonuçlar tablo biçiminde olacaktır, daha sonra diğer tüm gizli meta verilerinizi yeniden ekleyebilirsiniz.


1
Durum hakkında böyle hissediyorum. İşverenim durum hakkında böyle hissetmiyor. Şüpheden yararlanmak için, tanınabilir bir IP adresinden bir adres listesi alırsanız, birisinin adreslerin ne ile ilgili olduğunu çözebileceğini düşünmek çok da zor değildir.
Matt Parker,

1
@Matt Bu, danışmanların :-) için iyi olduğu bir şey. Başka bir seçenek de çeşitli adresleri gönderdiğiniz adreslerle karıştırmaktır. Elbette, maliyetleri arttırıyor, ama yine de çok düşük ...
whuber

3

OpenStreetMap ana sayfasındaki arama, Nominatim adlı bir sistemdir . Coğrafi kodlama servisi olarak adlandırabilirsiniz (nazikseniz), ancak hepsi açık kaynak olduğundan, kendi sunucunuzda da kurabilirsiniz.

Bu postGiS veritabanına yüklenen OpenStreetMap verilerini kullanıyor. Halen göreceli olarak yeni ve geliştirilme aşamasındadır ve verilerle kurulum ve yükleme işlemleri o kadar kolay değildir ve kaynaklara açtır. ... ama ücretsiz ve açık!


3

Cevapların çoğu sizi yerel bir veritabanına yönlendiriyor. Bu kesinlikle işe yarar olsa da, gecoding'in sizin ana alanınız olup olmadığını da düşünmelisiniz. (İyi olduğunuz şey bu mu? Öyleyse, muhtemelen önerdikleri verilere zaten sahip olursunuz. Olmazsa VE OLMAK İSTEDİĞİNİZ, o zaman verileri indirmeniz ve yerel olarak yapmanız gerekir. Bir sorunu çözmek ve üretime zorlamak için sayısız saat sürmek istemiyorsanız, güvenlikten ödün vermeden API üzerinden bunu yapma seçenekleri var.

Öncelikle HTTPS konusunda ısrar edin çünkü verinin API'ye giderken güvenli olması ve ardından size geri dönmesi gerekir. İkincisi, API’ye bir GET isteği yerine bir POST isteği yaptığınızdan emin olun. POST kullanarak, sadece bir yüke sahip bir URL isteğini iletiyorsunuz ve sunucu günlüğünü vurabilecek tek sonuç, bir adres doğrulama ve coğrafi kodlama isteğinin belirli bir zamanda ve belirli bir IP'den yapıldığı gerçeğidir. Ne gönderilen adres ne de geri gönderilen adres diske depolanmaz veya bir sunucu günlüğüne yazılmaz. Bundan daha güvenli olamaz.

Bu nedenle, yerel bir kutu kesinlikle güvende olsa da, ihtiyacınız olanı yapmak için çok fazla geliştirme yapılması gerekebilir. Güvenlik endişeleri azaltılabildiğinden, bir API kullanma seçeneğini (tekrar) düşünmek isteyebilirsiniz.

Güvenli API coğrafi kodlama konusunda uzmanlaşmış bir adres doğrulama şirketi için çalışıyorum - SmartyStreets .



1

Yerel linux kutunuzda PostGIS Tiger Geocoder'ı kurun. Kesinlikle çevrimiçi API’den daha zahmetlidir, ancak durumunuz için belki de en iyi bahis. Gerekirse milyonlarca adrese ölçeklenebilir.

Ansible playbook yardımı ile sunucuyu linux'ta kurmak eskisinden çok daha kolaydır. SQL veya PostGIS'e aşina değilseniz, SQL sorgularını yazmak muhtemelen daha fazla zaman alacaktır.

Kontrol edebilirsiniz benim sistem kurulumunu ve senaryomu daha fazla ayrıntı için. İhtiyacınız olan tüm bilgileri içermelidir.

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.