Geocoding alamat USA yang tidak dapat dikirim melalui internet?

46

Untuk proyek satu kali, saya perlu membuat geocode beberapa ribu alamat. Di masa lalu saya telah menggunakan berbagai sumber daya online untuk hal semacam ini (misalnya, Google Maps API), tetapi alamat yang saya kerjakan harus dirahasiakan - yang berarti tidak mengirimnya melalui Internet, kecuali ada zat besi - Jaminan privasi. Opsi apa lagi yang saya miliki?

Matt Parker
sumber
4
Apakah ada lokasi tertentu di mana Anda ingin melakukan geocode? Misalnya, Australia, AS, negara bagian tertentu, dll.
fmark
Pertanyaan bagus - Saya tertarik dengan AS secara luas, khususnya Colorado, Front Range County tepatnya.
Matt Parker
1
Saya benar-benar akan membuka diskusi singkat dengan RTD, saya tahu di daerah itu mereka memiliki SIG yang kuat dan kemungkinan bisa memberi Anda dukungan langsung. Jika tidak; Geocoder :: US adalah opsi yang bagus. Anda dapat menjalankannya secara internal dan tidak perlu mengambil risiko data Anda melewati batas.
DEWright
@Dright, itu ide yang menarik - terlebih lagi untuk pertanyaan saya yang lain . Terima kasih!
Matt Parker

Jawaban:

10

Jika menggunakan Google Geocoding API atau sumber daring lain adalah pilihan Anda daripada pilihan lokal, saya sarankan untuk melihat ke dalam Proyek Tor (mudah dipasang melalui bundel yang disebut 'the Vidalia Bundle').

Tor melindungi Anda dengan memantulkan komunikasi Anda di sekitar jaringan relay yang dijalankan oleh sukarelawan di seluruh dunia: Tor mencegah ... situs yang Anda kunjungi dari mengetahui lokasi fisik Anda.

Seiring dengan injeksi alamat acak dan menggunakan ssl (https) untuk mengenkripsi komunikasi ke titik akhir mereka (pastikan Anda juga melakukan ini), saya tidak bisa memikirkan cara yang lebih aman untuk melakukan geocode dari jarak jauh. Layanan geocoding apa pun yang Anda gunakan tidak akan pernah dapat mengidentifikasi dari mana permintaan akhirnya berasal, dan dengan https, tidak ada orang lain yang akan melakukannya. Catatan: jangan gunakan layanan geocoding yang memerlukan kunci api untuk ini, atau Anda tidak akan lagi anonim. (Google tidak memerlukan kunci api lagi).

Sisi 'manfaat' dari prosedur ini adalah bahwa Anda tidak akan lagi dibatasi untuk sejumlah permintaan geocoding, karena permintaan Anda akan terlihat seperti berasal dari beberapa alamat ip. Namun, saya tidak merekomendasikan atau mendukung penyalahgunaan API gratis yang indah ini! Nilai masih akan terbatas jika API membatasi laju (meskipun kecepatan transmisi menggunakan Tor sedikit lebih lambat daripada menghubungkan langsung).

Studi kasus dengan Python - Setelah Anda menginstal Vidalia Bundle dan menjalankan proxy pada 127.0.0.1:8118 (default), dengan Python 2.7 atau lebih tinggi, Anda dapat mengatur proxy https urllib2 menggunakan:

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")

Perhatikan bahwa proksi urllib2 tidak berfungsi dengan https hingga setidaknya Python 2.7 atau lebih, jadi metode ini hanya berfungsi dengan versi Python terbaru. Pastikan Anda memiliki 'https' (bukan 'http') di kedua tempat dalam contoh di atas. Saya hanya mengujinya dengan Python 2.7.1.

Vidalia mengubah identitas / asal alamat IP semula setiap 10 menit, tetapi jika Anda mengalami tingkat kelambatan atau masalah lain (kuota melebihi kesalahan), atau jika Anda terutama paranoid dan ingin mengubah identitas Anda lebih sering, Anda dapat mengubah identitas Tor Anda menggunakan kode python di sini (sedikit dimodifikasi di bawah). Anda harus mengubah kata sandi Tor menjadi yang statis (daripada yang dibuat secara acak) dengan memasukkan pengaturan Vidalia. Mungkin juga perlu me-restart Vidalia setelah semua perubahan.

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
Victor Van Hee
sumber
4
Itu tidak menjaga kerahasiaan alamat, bukan? Lokasi fisik mesin yang mengirimkan kueri tidak relevan (bukan rahasia) di sini.
underdark
4
Untuk sebagian besar tujuan, lokasi fisik mesin yang mengirimkan kueri sangat penting dalam melindungi anonimitas data yang dikirim ke layanan geocoding. Katakanlah bahwa komputer di Institute for the Study of X mengirimkan permintaan geocoding untuk 1000 alamat. Seseorang dapat (setidaknya secara teoritis) mengidentifikasi alamat-alamat itu sebagai berisi individu dengan penyakit X. Sebaliknya, alamat yang dicampur dengan ribuan permintaan acak dari banyak pengguna, dan berasal dari beberapa alamat IP yang tidak sesuai dengan satu pengguna (situasi Tor) tidak dapat diidentifikasi sehubungan dengan tujuan.
Victor Van Hee
Mengirim data ke Google (melalui Tor atau apa pun) adalah masalah privasi mendasar. Google tidak menawarkan "jaminan privasi berbahan besi".
Nicolas Raoul
7

Salah satu opsi adalah menggunakan Geo-Coder-US , yang merupakan modul Perl open-source yang menggunakan data Tiger / Line Sensus AS untuk melakukan geocode. Saya belum menggunakannya secara pribadi, tetapi terlihat sangat bagus. Tautan di atas mencakup ikhtisar yang bagus dan tautan ke versi yang sudah memiliki file Sensus yang diperlukan.

Matt Parker
sumber
6

Pustaka Geokit dapat menggunakan Google, Yahoo, Geocoder.us, Geocoder.ca, dan Geonames. Itu ditulis dalam Ruby, dan ada juga sister library untuk proyek Ruby on Rails Anda:

http://geokit.rubyforge.org/

Untuk menghemat privasi, Anda dapat menyebarkan kueri ke semua penyedia dengan memisahkannya ke dalam set yang cenderung tidak terkait dengan aktivitas Anda. Anda juga dapat menyuntikkan noise di alamat Anda dengan menambahkan alamat asli dari direktori telepon online. Dan saya sarankan Anda menjalankan skrip ini dari berbagai tempat, seperti warung internet, menggabungkan hasil di akhir.

Satu-satunya cara untuk benar-benar menjaga privasi Anda adalah dengan mengunduh set lengkap data dan menjalankan skrip Anda terhadapnya. Ada sistem Nominatim dari OpenStreetMap. Ini tidak lengkap untuk semua kota, tetapi Anda bisa menggunakannya untuk mengurangi daftar alamat yang dikirim ke penyedia lain.

Nicolas Marchildon
sumber
5

Meskipun masih dalam tahap awal pengembangan, http://openaddresses.org/ bertujuan untuk menyediakan basis data terbuka untuk alamat di seluruh dunia, dan layanan geocoding terkait.

Meskipun tidak bersifat pribadi, sifat dari basis data alamat terbuka dapat berarti tersedia untuk diunduh secara keseluruhan (atau setidaknya untuk wilayah tertentu) untuk memungkinkan geocoding offline.

geografi
sumber
3

Saya pikir kode di belakang http://geocoder.us/ tersedia untuk diunduh sedemikian rupa sehingga Anda bisa mendapatkannya dan file data TIGER dan lebih-kurang mengatur instalasi lokal Anda sendiri. Saya tidak melihat itu segera setelah mengunjungi kembali situs itu, tetapi Anda mungkin ingin melihat-lihat sedikit.

Joe Germuska
sumber
3

Mengapa tidak menggunakan geocoder yang sama seperti yang Anda gunakan sebelumnya, hapus saja semua meta data lainnya?

Jangan kirim "Lokasi Rahasia; 123 Main Street, Some City", cukup kirim "123 Main Street, Some City"? Alamatnya adalah informasi publik. Hanya saja, jangan beri tahu geocoder bahwa Anda memiliki daftar pangkalan nuklir atau semua lokasi NSA. Hasilnya akan dalam format tabel, Anda kemudian dapat melampirkan kembali semua meta-data rahasia Anda.

Vadim
sumber
1
Ini yang saya rasakan tentang situasinya. Ini bukan perasaan majikan saya tentang situasinya. Untuk memberikan manfaat dari keraguan, jika Anda mendapatkan daftar alamat dari alamat IP yang dapat dikenali, tidak terlalu berlebihan untuk membayangkan bahwa seseorang dapat mengetahui apa yang terkait dengan alamat tersebut.
Matt Parker
1
@ Matt Itu satu hal yang bagus untuk konsultan :-). Pilihan lain adalah mencampur alamat lain-lain dengan yang Anda kirim. Tentu, ini meningkatkan biaya, tetapi tetap saja sangat rendah ...
whuber
3

Pencarian di beranda OpenStreetMap adalah sistem yang disebut Nominatim . Anda bisa menyebutnya sebagai layanan geocoding (jika Anda lembut) tetapi semuanya open source, sehingga Anda dapat mengaturnya di server Anda sendiri juga.

Ini menggunakan data OpenStreetMap yang dimuat ke dalam database postGiS. Ini masih relatif baru dan masih dalam pengembangan, dan proses pengaturan dan pemuatan dengan data tidak begitu mudah, dan sangat membutuhkan sumber daya. ... tapi gratis dan terbuka!

Harry Wood
sumber
3

Sebagian besar jawaban mengarahkan Anda ke database lokal. Meskipun itu pasti akan berhasil, Anda juga harus mempertimbangkan apakah gecoding adalah domain inti Anda. (Apakah itu yang Anda kuasai? Jika demikian, Anda mungkin sudah memiliki data yang mereka rekomendasikan. Jika tidak, DAN ANDA INGIN MENJADI, maka Anda harus mengunduh data dan melakukannya secara lokal. Namun, jika Anda hanya perlu untuk menyelesaikan masalah dan tidak ingin menambah jam untuk produksi, masih ada opsi untuk melakukannya melalui API tanpa mengorbankan keamanan.

Pertama, bersikeras HTTPS karena Anda membutuhkan data untuk aman dalam perjalanan ke API dan kemudian dalam perjalanan kembali ke Anda. Kedua, pastikan Anda melakukan permintaan POST alih-alih permintaan GET ke API. Menggunakan POST, Anda hanya meneruskan permintaan URL dengan payload dan satu-satunya hasil yang akan menekan log server adalah fakta bahwa verifikasi alamat dan permintaan geocoding dilakukan pada waktu tertentu dan dari IP tertentu. Baik alamat yang dikirim maupun alamat yang dikembalikan tidak akan disimpan ke disk atau ditulis ke log server. Itu tidak jauh lebih aman dari itu.

Jadi, sementara kotak lokal pasti aman, itu bisa memerlukan banyak pengembangan untuk melakukan apa yang Anda butuhkan. Karena masalah keamanan dapat ditenangkan, Anda mungkin ingin mempertimbangkan (lagi) opsi menggunakan API.

Saya bekerja untuk perusahaan verifikasi alamat yang berspesialisasi dalam geocoding API aman - SmartyStreets .

Jeffrey
sumber
1

Atur PostGIS Tiger Geocoder di kotak linux lokal Anda. Ini jelas lebih rumit daripada API online, tapi mungkin yang terbaik untuk situasi Anda. Dan itu bisa menskalakan ke jutaan alamat jika diperlukan.

Dengan bantuan playbook yang memungkinkan, pengaturan server di linux jauh lebih mudah dari sebelumnya. Menulis pertanyaan SQL mungkin akan memakan waktu lebih lama jika Anda tidak terbiasa dengan SQL atau PostGIS.

Anda dapat memeriksa pengaturan sistem dan skrip saya untuk detail lebih lanjut. Itu harus mencakup semua informasi yang Anda butuhkan.

dracodoc
sumber