インターネット経由で送信できない米国住所をジオコーディングしますか?


46

1回限りのプロジェクトの場合、数千の住所をジオコーディングする必要があります。過去には、この種のことのためにさまざまなオンラインリソース(たとえば、Google Maps API)を使用していましたが、一緒に作業しているアドレスは秘密にしておく必要があります。 -プライバシーのクラッド保証。他にどんなオプションがありますか?


4
ジオコーディングしたい特定の地域はありますか?たとえば、オーストラリア、米国、特定の州など
fmark

いい質問です。私は米国、特にコロラド州のFront Range郡に広く興味を持っています。
マットパーカー

1
RTDとの簡単なディスカッションを本当に開始します。その分野では強力なGISがあり、直接サポートを提供できる可能性が高いことを知っています。そうでなければ; Geocoder :: USは素晴らしいオプションです。内部で実行でき、データがネットワークを通過するリスクを負う必要がありません。
-DEWright

@DEWright、それは興味深いアイデアです- 私の別の質問についてはさらにそうです。ありがとう!
マットパーカー

回答:



10

ローカルオプションではなく、Google Geocoding APIまたは別のオンラインソースを使用する場合は、Torプロジェクト(「Vidaliaバンドル」と呼ばれるバンドルを通じて簡単にインストールできます)を検討することをお勧めします。

Torは、世界中のボランティアが運営するリレーの分散ネットワークを介して通信をバウンスすることにより、あなたを保護します。

ランダムアドレスの注入とSSL(https)を使用したエンドポイントへの通信の暗号化(これも実行していることを確認してください)に加えて、リモートでジオコーディングするより安全な方法は考えられません。使用しているジオコーディングサービスがどのようなものであっても、リクエストが最終的にどこから来たのかを特定することはできません。注:これにAPIキーを必要とするジオコーディングサービスを使用しないでください。使用すると、匿名になります。 (GoogleはAPIキーをもう必要としません)。

この手順の「利点」は、リクエストが複数のIPアドレスから来ているように見えるため、ジオコーディングリクエストの数に制限されることがなくなることです。ただし、これらの素敵な無料のAPIを悪用することお勧めしません。APIがレートを制限する場合、レートは引き続き制限されます(ただし、Torを使用した伝送速度は、直接接続するよりもかなり遅くなります)。

Pythonのケーススタディ -Vidaliaバンドルをインストールし、プロキシを127.0.0.1:8118(デフォルト)で実行すると、Python 2.7以降では、次を使用してhttps urllib2プロキシを設定できます。

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プロキシは、少なくともPython 2.7程度になるまでhttpsでは機能しないため、このメソッドは最近のPythonバージョンでのみ機能することに注意してください。上記の例の両方の場所に「https」(「http」ではない)があることを確認してください。Python 2.7.1でのみテストしました。

Vidaliaは10分ごとにID /見かけのIPアドレスの起源を変更しますが、遅いレートやその他の問題(クォータ超過エラー)に遭遇した場合、または特に妄想的でIDをより頻繁に変更したい場合は、Tor IDを変更できますここでpythonコードを使用します(以下を少し変更します)。Vidalia設定を入力して、Torパスワードを(ランダムに生成されたパスワードではなく)静的なパスワードに変更する必要があります。すべての変更後にVidaliaを再起動する必要がある場合があります。

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
それはアドレスの機密を保持しませんか?ここでは、クエリを送信するマシンの物理的な場所は重要ではありません(機密ではありません)。
アンダーダーク

4
ほとんどの場合、クエリを送信するマシンの物理的な場所は、ジオコーディングサービスに送信されるデータの匿名性を保護する上で非常に重要です。Institute for the Study of Xのコンピューターが1000アドレスのジオコーディングリクエストを送信するとします。(理論的には少なくとも)それらの住所をX病の個人が含まれていると識別することができます。対照的に、多くのユーザーからの数千のランダムな要求と混在し、1人のユーザーに対応しない複数のIPアドレスからのアドレス(Torの状況)は、目的に関して識別できません。
ビクターヴァンヒ

データをGoogleに(Torなどを介して)送信することは、プライバシーの根本的な問題です。Googleは「プライバシーの鉄壁の保証」を提供していません。
ニコラスラウル

7

1つのオプションはGeo-Coder-USを使用することです。これは、米国国勢調査のTiger / Lineデータを使用してジオコーディングするオープンソースのPerlモジュールです。個人的には使用していませんが、見た目は素晴らしいです。上記のリンクには、概要と、必要な国勢調査ファイルが既に組み込まれているバージョンへのリンクが含まれています。


6

Geokitライブラリは、Google、Yahoo、Geocoder.us、Geocoder.ca、およびGeonamesのいずれかを使用できます。Rubyで記述されており、Ruby on Railsプロジェクト用の姉妹ライブラリもあります。

http://geokit.rubyforge.org/

プライバシーを保護するために、アクティビティにリンクされる可能性が低いセットにクエリを分割することにより、すべてのプロバイダにクエリを分散できます。オンライン電話帳から実際の住所を追加して、住所にノイズを注入することもできます。そして、最後に結果を組み合わせて、インターネットカフェなどのさまざまな場所からこのスクリプトを実行することをお勧めします。

本当にプライバシーを保護する唯一の方法は、データの完全なセットをダウンロードし、それに対してスクリプトを実行することです。OpenStreetMapのNominatimシステムがあります。すべての都市で完全ではありませんが、他のプロバイダーに送信されるアドレスのリストを減らすために使用できます。


5

まだ開発の初期段階ですが、http://openaddresses.org/は、世界中の住所と関連するジオコーディングサービスのオープンデータベースを提供することを目指しています。

プライベートではありませんが、オープンアドレスデータベースの性質により、オフラインジオコーディングを可能にするために、全体(または少なくとも選択した地域)でダウンロードできることを意味する場合があります。



3

http://geocoder.us/の背後にあるコードをダウンロードして、TIGERデータファイルを取得し、独自のローカルインストールをセットアップできると考えました。そのサイトを再訪してもすぐにはわかりませんが、少し見てみたいと思うかもしれません。


3

以前に使用したのと同じジオコーダーを使用して、他のすべてのメタデータを削除するだけではどうですか?

「秘密の場所; 123 Main Street、Some City」ではなく、「123 Main Street、Some City」で送ってください。とにかくアドレスは公開情報です。核基地のリストやすべてのNSAの場所があることをジオコーダーに伝えないでください。結果は表形式になり、他のすべての秘密メタデータを再添付できます。


1
これは私が状況についてどのように感じるかです。これは私の雇用者が状況についてどのように感じているかではありません。疑いの恩恵を与えるために、認識可能なIPアドレスからアドレスのリストを取得する場合、誰かがアドレスが何に関連するかを理解できると想像するのはそれほど大したことではありません。
マットパーカー

1
@Mattそれは、コンサルタントが良いことの1つです:-)。別のオプションは、送信するアドレスとその他のアドレスを混在させることです。確かに、...それはコストを増加させるが、彼らは非常に低いとにかくです
whuber

3

OpenStreetMapホームページでの検索は、Nominatimと呼ばれるシステムです。ジオコーディングサービスとして呼び出すこともできます(穏やかな場合)が、すべてオープンソースであるため、独自のサーバーにセットアップすることもできます。

これは、postGiSデータベースにロードされたOpenStreetMapデータを使用しています。比較的新しく、まだ開発中であり、データのセットアップとロードのプロセスはそれほど単純ではなく、リソースをかなり消費します。...しかし、無料でオープンです!


3

答えのほとんどは、ローカルデータベースに向かっています。それは確かに機能しますが、ジオコーディングがコアドメインであるかどうかも考慮する必要があります。(それがあなたの得意なことですか?もしそうなら、あなたはおそらく彼らが推奨しているデータをすでに持っているでしょう。問題を解決し、本番稼働のために数え切れないほどの時間を費やしたくない場合は、セキュリティを損なうことなくAPIを介してそれを行うオプションがまだあります。

まず、HTTPSを主張します。これは、APIに向かう途中でデータを保護し、次に戻ってくるときにデータを保護する必要があるためです。次に、APIへのGETリクエストの代わりにPOSTリクエストを実行していることを確認します。POSTを使用すると、ペイロード付きのURLリクエストを渡すだけで、サーバーログにヒットする唯一の結果は、特定の時間に特定のIPからアドレス検証およびジオコーディングリクエストが行われたことです。送信されたアドレスも返されたアドレスもディスクに保存されず、サーバーログに書き込まれません。それ以上安全ではありません。

したがって、ローカルボックスは間違いなく安全ですが、必要なことを行うには多くの開発が必要になる可能性があります。セキュリティ上の懸念は和らぐことができるため、APIを使用するオプションを(再度)検討することをお勧めします。

私は、安全なAPIジオコーディングに特化した住所確認会社であるSmartyStreetsで働いています。


1

古いスレッドですが、言及する価値があります。http://www.tigergeocoder.com/ TIGER 2013データを使用して、Amazon EC2クラウドで独自のサーバーインスタンスを実行する準備ができています。


1

ローカルLinuxボックスでPostGIS Tiger Geocoderをセットアップします。それは間違いなくオンラインAPIよりも扱いにくいですが、おそらくあなたの状況に最適です。また、必要に応じて数百万のアドレスに拡張できます。

ansibleプレイブックの助けを借りて、Linuxでのサーバーのセットアップは以前よりはるかに簡単になりました。SQLまたはPostGISに精通していない場合、SQLクエリの書き込みにはおそらく時間がかかります。

詳細については、システムセットアップスクリプトを確認しください。必要なすべての情報が含まれている必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.