1回限りのプロジェクトの場合、数千の住所をジオコーディングする必要があります。過去には、この種のことのためにさまざまなオンラインリソース(たとえば、Google Maps API)を使用していましたが、一緒に作業しているアドレスは秘密にしておく必要があります。 -プライバシーのクラッド保証。他にどんなオプションがありますか?
1回限りのプロジェクトの場合、数千の住所をジオコーディングする必要があります。過去には、この種のことのためにさまざまなオンラインリソース(たとえば、Google Maps API)を使用していましたが、一緒に作業しているアドレスは秘密にしておく必要があります。 -プライバシーのクラッド保証。他にどんなオプションがありますか?
回答:
見てGeocoder::US 2.0
、geocoder.usに後継者を:
http://github.com/geocommons/geocoder
同じ作者によるperlモジュールのrubyポートです。
ローカルオプションではなく、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
1つのオプションはGeo-Coder-USを使用することです。これは、米国国勢調査のTiger / Lineデータを使用してジオコーディングするオープンソースのPerlモジュールです。個人的には使用していませんが、見た目は素晴らしいです。上記のリンクには、概要と、必要な国勢調査ファイルが既に組み込まれているバージョンへのリンクが含まれています。
Geokitライブラリは、Google、Yahoo、Geocoder.us、Geocoder.ca、およびGeonamesのいずれかを使用できます。Rubyで記述されており、Ruby on Railsプロジェクト用の姉妹ライブラリもあります。
プライバシーを保護するために、アクティビティにリンクされる可能性が低いセットにクエリを分割することにより、すべてのプロバイダにクエリを分散できます。オンライン電話帳から実際の住所を追加して、住所にノイズを注入することもできます。そして、最後に結果を組み合わせて、インターネットカフェなどのさまざまな場所からこのスクリプトを実行することをお勧めします。
本当にプライバシーを保護する唯一の方法は、データの完全なセットをダウンロードし、それに対してスクリプトを実行することです。OpenStreetMapのNominatimシステムがあります。すべての都市で完全ではありませんが、他のプロバイダーに送信されるアドレスのリストを減らすために使用できます。
まだ開発の初期段階ですが、http://openaddresses.org/は、世界中の住所と関連するジオコーディングサービスのオープンデータベースを提供することを目指しています。
プライベートではありませんが、オープンアドレスデータベースの性質により、オフラインジオコーディングを可能にするために、全体(または少なくとも選択した地域)でダウンロードできることを意味する場合があります。
住所の場所に応じて、OpenStreetMap機能をダウンロードして使用できます。
それをチェックしてください:http : //www.openstreetmap.org/
また、米国にいる場合は、PostGIS TigerGeocoding APIに加えてTIGERプロジェクトがあります。 http://svn.osgeo.org/postgis/trunk/extras/tiger_geocoder/
http://geocoder.us/の背後にあるコードをダウンロードして、TIGERデータファイルを取得し、独自のローカルインストールをセットアップできると考えました。そのサイトを再訪してもすぐにはわかりませんが、少し見てみたいと思うかもしれません。
以前に使用したのと同じジオコーダーを使用して、他のすべてのメタデータを削除するだけではどうですか?
「秘密の場所; 123 Main Street、Some City」ではなく、「123 Main Street、Some City」で送ってください。とにかくアドレスは公開情報です。核基地のリストやすべてのNSAの場所があることをジオコーダーに伝えないでください。結果は表形式になり、他のすべての秘密メタデータを再添付できます。
OpenStreetMapホームページでの検索は、Nominatimと呼ばれるシステムです。ジオコーディングサービスとして呼び出すこともできます(穏やかな場合)が、すべてオープンソースであるため、独自のサーバーにセットアップすることもできます。
これは、postGiSデータベースにロードされたOpenStreetMapデータを使用しています。比較的新しく、まだ開発中であり、データのセットアップとロードのプロセスはそれほど単純ではなく、リソースをかなり消費します。...しかし、無料でオープンです!
答えのほとんどは、ローカルデータベースに向かっています。それは確かに機能しますが、ジオコーディングがコアドメインであるかどうかも考慮する必要があります。(それがあなたの得意なことですか?もしそうなら、あなたはおそらく彼らが推奨しているデータをすでに持っているでしょう。問題を解決し、本番稼働のために数え切れないほどの時間を費やしたくない場合は、セキュリティを損なうことなくAPIを介してそれを行うオプションがまだあります。
まず、HTTPSを主張します。これは、APIに向かう途中でデータを保護し、次に戻ってくるときにデータを保護する必要があるためです。次に、APIへのGETリクエストの代わりにPOSTリクエストを実行していることを確認します。POSTを使用すると、ペイロード付きのURLリクエストを渡すだけで、サーバーログにヒットする唯一の結果は、特定の時間に特定のIPからアドレス検証およびジオコーディングリクエストが行われたことです。送信されたアドレスも返されたアドレスもディスクに保存されず、サーバーログに書き込まれません。それ以上安全ではありません。
したがって、ローカルボックスは間違いなく安全ですが、必要なことを行うには多くの開発が必要になる可能性があります。セキュリティ上の懸念は和らぐことができるため、APIを使用するオプションを(再度)検討することをお勧めします。
私は、安全なAPIジオコーディングに特化した住所確認会社であるSmartyStreetsで働いています。
古いスレッドですが、言及する価値があります。http://www.tigergeocoder.com/ TIGER 2013データを使用して、Amazon EC2クラウドで独自のサーバーインスタンスを実行する準備ができています。
ローカルLinuxボックスでPostGIS Tiger Geocoderをセットアップします。それは間違いなくオンラインAPIよりも扱いにくいですが、おそらくあなたの状況に最適です。また、必要に応じて数百万のアドレスに拡張できます。
ansibleプレイブックの助けを借りて、Linuxでのサーバーのセットアップは以前よりはるかに簡単になりました。SQLまたはPostGISに精通していない場合、SQLクエリの書き込みにはおそらく時間がかかります。
詳細については、システムセットアップとスクリプトを確認してください。必要なすべての情報が含まれている必要があります。