2,000万件の米国住所の一括ジオコーディング


34

検索して緯度と経度の情報を返すことができる、米国向けの無料または手頃な価格のデータベースはありますか?


高速は問題ありませんが、精度がすべてです。-Wyatt Earpジオコーダーを扱う場合、多くの住所をジオコーディングするために低価格を提供するもの(このスレッドで参照されるものなど)がありますが、多くの異なる領域で非常に細かい精度を探している場合は、プレミアムジオコーダー。特に郵便照合が行われない場合、結果はより一貫性があり、非常に正確になります。最も正確なジオコーディングに関しては、競争できるものはあまりありません。そうでなければ、ユーザーに提供する他のテクノロジーでは計算が足りなくなります

2
高品質の必要性について意見を述べますが、提案はしません。あなたの提案のいくつかを提供してください、そうしないと、ユーザーの質問に答えるのに役立ちません。
ライアンダルトン

回答:


30

そのような多くのレコードについては、Webサービスも考慮しないでください。あなたがあなたの仕事を終えることができる前に、彼らはあなたを絞るか、または断ち切ります。

そのため、オプションはローカルで実行することになるため、いくつかの商用または無料のオプションがあります。

無料のオプションでは、空間データベースに読み込む必要がある国勢調査TIGERデータセットが使用されます。PostGIS またはsqliteのTIGERに対してジオコーディングするライブラリを見つけることができます。ちなみに、ArcGISを使用してTIGERに対してジオコーディングすることもできますもちろん、ArcGISは無料ではないので、次の商用オプションを紹介します。ArcGISライセンスをお持ちの場合は、TeleAtlas(つまりTom Tom)またはNavteqデータセットを含むStreetMap DVDがあります。StreetMap Premiumがバンドルされているかどうかによります。これら2つのデータセットのいずれでも、TIGERよりも一貫した結果が得られる可能性があります。

データをロードしたら、ストリートデータベースのコピーをいくつか作成し、入力データのサブセットを使用して複数のマシンでジオコーディングプロセスを実行します。1台のマシンだけで実行しないでください。実行するプロセスが終了するまでにメモリリークとクラッシュが数回発生する可能性が高いことは言うまでもありません。これは、プロセスに異なるチェックポイントが必要であることを意味します。


2
入力データとアドレスデータをより小さな部分(状態など)に分割することが有益であることがわかりました。これにより、ロケーターの使用が速くなり、実行時間が長すぎるとプロセスがロックする可能性が低くなります。通常、ロケーターの作成とジオコーディングを一気に行うための状態ベースのループをスクリプト化することはそれほど難しくありません。
ナタヌス

26

私はSmartyStreets(住所確認会社)で働いています。私たちのサービスは誰でも無料です(基本レベルまで)。また、スタートアップ企業は、最初の1年間は完全に無料でサービスを使用するようにリクエストできます。その分類に当てはまる場合、1年間の無制限のサービスに料金はかかりません。

RagiはWebサービスをお勧めしますが、APIを使用すると、約5時間(1秒あたり約1000)で2,000万のアドレスを簡単にクリーニング、標準化、ジオコーディングできます。その時間の一部は、マシンの速度(コアの数)とネットワーク接続(3Gで試してはいけませんが、標準のブロードバンド接続で十分です)に依存します。

ウェブサービスで確かに可能であることを指摘したかっただけです。

更新:2017年8月1日の時点で、Webサービスをリモートでテストし、ワイヤレスネットワーク上で単一の2015 MacBook proのみを使用して、1秒あたり70,000回のルックアップを持続的に取得しました。ええ、かなり速いです。つまり、2,000万件のアドレスのような小さなリストでは、約5分しかかかりません。


2
まあ、あればあなたは(非常に印象的な)彼は彼にダイムを充電せずに2000万レコードをジオコードし、秒あたり1000 /要求を行うことができます聞かせしようとしている、そして、もちろん、これはゼロから独自のスタックを構築するよりも優れたソリューションです。
ラギヤセルBurhum

1
絶対に。1000 /秒は最大値ではありません。それはちょうど良い基準です。マルチスレッド、マルチコア、高速ネットワーク接続により、スループットが向上する可能性さえあります。当社のサービスを使用して1億8,000万の住所を処理したばかりの最近の非営利のお客様がいます。国政選挙が迫っているため、多くのグループが住所の整理とジオコーディングを試みています。
ジェフリー

1
@RagiYaserBurhumクリスも「合理的な価格の」ソリューションを求めていることに注意してください。確かに、ゼロから独自のスタックを構築するのは「無料」かもしれませんが、機会費用を考慮すると本当にそうですか?すべて自分で行うことで得られるメリット:潜在的にコストがかかりません(「無料」)。既存のサービスを使用する利点:多くの時間と時間を節約できます。さらに、最近のWebアーキテクチャ(並列化)では、一定のトラフィック負荷を処理するために、おそらく1秒間に1,000リクエストが日常的に行われています。結局、この問題については、「無料」と「手頃な価格」が好みの問題だと思います。
マット

1
@Matt Hands down "free"は常に無料ではありません。私はそれについて議論しません(あなたの時間はお金に見合う価値があります)。ほとんどのオープンソースソリューションのコストは、実際には使用ライセンスからサポートサービスへのコストモデルのシフトであることを十分に認識しています。私は皮肉にしようとはしていませんでしたが、Jeffeyが無料で(または手頃な価格で)ソリューションを提供できるなら、これより良いソリューションだと思います。最高の状態でリストされている SmartyStreetsからの価格、20メートルのポイントは$ 100,000かかるだろう。私は、商業的なユースケースでさえ、彼らがわずかなコストでできると確信しています。
ラギヤセルBurhum

1
また、1000 / req per secondは、現代のアーキテクチャでは非常に実行可能ですが、ジオコーディングのための素晴らしいエンジニアリングが依然として必要です。彼らはそれを行うための私の小道具を取得しています:)
ラギヤセルBurhum

8

このチュートリアルでは、2010 TigerLineデータを使用してpostgisジオコーダーを構築する方法を説明しました。私は今それを実行しています-200万件の住所をジオコーディングするのに3週間かかるため、高速ではありません。

ただし、無料で調整されておらず、ジオコーディングを開始するために1つの(大)状態のデータをセットアップしてロードするには、2日未満の最小限のコーディングおよびpostgresスキルを持つ人が必要でした。また、システムのpostgresチューニングはまったく行っておらず、NFSマウント上で実行されているため、必要に応じて1桁または2桁のパフォーマンス向上が得られると思います。

Webサービスを使用するのではなく、すべてのアドレスをpostgresデータベースにロードしてから、迅速かつダーティなperlスクリプトを実行して、一度にすべてをジオコーディングします。

perl -e for ($i=1; $i<[max_key_value]; $i+=1) 
   {printf "UPDATE source_addresses
               SET (rating, new_address, lon, lat) 
                     = (g.rating, pprint_addy(g.addy), 
                       ST_X(g.geomout), ST_Y(g.geomout) ) 
              FROM (SELECT DISTINCT ON (address_id) address_id, (g1.geo).* 
                      FROM (SELECT address_id, (geocode(address)) As geo 
                              FROM source_addresses As ag 
                             WHERE ag.rating IS NULL and address_id = $i 
                           ) As g1 
                     ORDER BY address_id, rating LIMIT 1
                   ) As g WHERE g.address_id = source_addresses.address_id;\n"
  } | psql -d geocoder 

(読みやすさのためだけに改行します)

そのため、「このID値でアドレスをジオコーディングし、最適な一致を使用する」更新ステートメントを生成し、それをpsqlにパイプして実行します。評価なしで住所のジオコーディングのみを試みます。つまり、まだジオコーディングされていない住所です。したがって、再起動可能であり、それぞれが独立して実行されます。


2010年のTigerLineデータが一部の住所に対して不正確であると感じましたか?
クリスミュンヒ

決して完璧なデータではありません。しかし、私が持っている住所データは品質の観点からは腐敗しています。記述されているジオコーダーは、「評価」フィールドを提供しますが、低いほど良いです。回答に例を追加します。
アダムマッシュ

@ChrisMuench:1つまたは2つのカリフォルニアの住所を教えていただければ、ジオコーダーで撮影して見せていただければうれしいです。
アダム

NYの住所でpostgisジオコーダーを試したところ、500フィートから1マイル離れている可能性がありました
クリスミュンヒ

これは遅すぎますが、他の誰かが役に立つかもしれません...アドレスが正しく解析されることを確認してください。コンマを追加すると、プレーンな連結「123 Oak St. Anytown ST 12345」が550倍に高速化されることがわかりました。「123 Oak St.、Anytown、ST、12345」
-aaryno

3

私はあなたがジオコードしたいが、それに対して何も支払わないことを推測していますか?2000万件のレコードをジオコーディングできるサービスがたくさんありますが、費用がかかります。Esri、Pitney Bowesなどは、サブスクリプションまたはxジオコードあたりのコストでこれらのサービスを提供しています。2000万は些細なことではありませんが、これにはビジネスケースがあると考えています。



3

この投稿は、おそらく元のポスターを助けるには遅すぎます。ただし、大量のデータを無料でジオリファレンスする場合は、独自に作成され、使いやすく、しかも強力な「Easy Georeferencer」というソフトウェアをチェックできます(投稿の下部のスクリーンショットを参照)。

このプログラムはシンプルで簡単に使用でき、インストールを必要としないexeファイルから直接実行されます。GNSまたはGeoNamesデータソース間でジオコーディングすることを選択できます。これまで他のジオコーダーではできなかったこと、GADM管理単位データベースに基づいた州のジオコーディング、CShapesデータセットからの歴史的な国境のジオコーディングが可能です。唯一の注意点は、住所データをジオコーディングしないことです。すべての出力は、GISで即座に視覚化/分析できるシェープファイルとして提供されます。

大きなデータの効率と処理に関しては、わずか3時間で10万件のレコードをジオコーディングするようにプログラムがテストされています。大規模なデータセットの場合、処理時間の予想される増加は曲線的に減少するはずです。これは、国の参照データセットが読み込まれると、処理時間の大部分が初期段階のみになり、その後に増加するためです。また、ソフトウェア、参照データセット、および処理はすべてローカルコンピューターに基づいているため、大きなデータセットをジオコーディングする際にインターネットのボトルネックや接続の問題を心配する必要はありません。一致率は、スペルの違いに対するファジー名の一致アカウンティングに基づいているため、最大80〜90%になる可能性があります。

入門書や初心者向けガイドなど、詳細はダウンロードパッケージに含まれています。試してみることをためらう必要はありません。プログラムは単純なファイルであり、デスクトップに配置して実行することができます。

ソフトウェアは、http//geocodeanything.wordpress.com/からダウンロードできます。

お役に立てば幸いです。

ここに画像の説明を入力してください


ソフトウェア製品を製造する会社の著者/開発者および/または作業者であることを常に開示する必要があります。
ライアンダルトン

@RyanDalton私は「私が作成したソフトウェア」を書いたとき、私が著者であったことを明らかにしましたが、文であまり強調されていなかったので、それがどのように気付かれなかったかもわかります。自分のソフトウェアを容認していることを明確にするために、言い回しを変更しました。
カリムバガット

2

米国の住所をジオコーディングするため、Data Science Toolkit のStreet Address to Coordinatesツールはうまく機能すると思います。

This API takes either a single string representing a postal address, or a JSON-encoded  
array of addresses, and returns a JSON object with a key for every address. The value 
for each key is either null if no information was found for the address, or an object 
containing location information, including country, region, city and latitude/longitude 
coordinates.

ただし、仮想マシンをダウンロードして、独自のハードウェアから実行することもできます。そうすれば、APIの制限を心配する必要がなく、それも管理できます。ああ、私はそれが無料だと言いましたか?;-)


すごい!これまで聞いたことがないのには驚いた。さらに、VMをダウンロードして、独自のシステムですぐに実行できるようにすることもできます。
-RyanDalton

オープンソースでもあります。:) github.com/petewarden/dstk
RK

2

私はあなたが必要とする精度のレベルへの参照を見ていませんが、私はあなたが屋上に長い緯度またはそれに近いたいと思っています。入力住所の品質も要因となります。きれいに仕上げられたアドレスのリストは、不完全または不良のアドレスのリストよりも優れた高速なコードになります。また、90%のヒット率は許容されますか、または2000万個のアドレスすべてをコーディングする必要がありますか?私には無料のソリューションはありませんが、私が知っていて使用している比較的安価なソリューションがあります。Semaphore CorpのZP4、http://www.semaphorecorp.com/住所スクラバー/ジオコーダーを提供し、住所を処理し、クリーンな住所、住所がUSPS配達可能かどうかを示すフラグ、およびZIP + 4の長い緯度を返すアドオンを提供します。一般的に、ZIP + 4精度は、市街地の屋上精度(通りの正しい側と正しいブロック上)に近く、農村部では近くありません。30日間のライセンスの費用は120ドルです。その後、住所スクラバーは引き続き機能しますが、配信ポイント検証(DPV)および地理的リターンは機能しません。過去2年以内に構築された比較的高速なコンピューターと、すべてのデータがローカルに保存およびアクセスされると、2,000万件のレコードが約10日で処理されます。私は過去15年間、住所のジオコーディングを行ってきましたが、そのほとんどの期間でZP4を使用してきました。長緯度またはDPVを提供する前に、


2

現在、1800万の住所をジオコーディングしているので、設定を共有したいと思います。

基本的に、Ansible Playbookを使用してAmazon EC2インスタンスをPostGIS Tiger Geocoderサーバーとして設定し、スクリプトを使用してジオコードアドレスをバッチ処理し、それらを国勢調査ブロックにマップしました。

Amazon EC2のコスト:最小要件の180G SSDは月額約18ドルです。私のt2.largeインスタンスの費用は合計で約90ドル/月です。

SSDが180Gを超えるLinuxボックスをお持ちの場合は、基本的に無料で使用することもできます。

私の平均パフォーマンスは、約170〜300ミリ秒/品質の良いアドレス、400〜600ミリ秒/品質の悪いアドレスです。品質が悪いということは、多くの都市、市区町村、郵便番号、または住所が間違っていることを意味します。この種類の住所はジオコーディングに非常に長い時間がかかるため、パフォーマンスは入力の品質に依存します。私が使用したAmazon EC2インスタンスは、1か月で約400万の非常に不適切な形式の住所をジオコーディングできます。

詳細については、システムのセットアップスクリプトに関する私のブログ投稿を参照してください



1

ワークフローがPythonである場合、geopyは優れたソリューションです。基本的なジオコーディングロジックを抽象的に記述してから、多くのプロバイダー(ArcGIS、Baidu、Bing、DataBC、GeocodeFarm、GoecoderDotUS、GeoNames、Google、IGN France、LiveAddress、NaviData、Nominatim(OSM)、OpenCage、OpenMapQuest、 Yahoo! BOSS Place Finder、What3Words、Yandex ... phew)。それらすべてを使用し、最終的には複数のジオコーディングサービスによる検証を通じて正しいと確信するポイントを選択することもできます。これらのサービスの多くは登録が必要です(すべてではありません)。それらは米国での使用に等しく適していないかもしれませんが、きちんとしたPython関数でそれを行うことの利点は、そのために制御できるべきであることです。

以下に簡単な例を示します。

from geopy.geocoders import Nominatim
geolocator = Nominatim(country_bias='New Zealand', timeout=4)
geocoded = geolocator.geocode('Raglan, Waikato', exactly_one=True)
if geocoded is not None:
    # success
    lat = geocoded.latitude
    lon = geocoded.longitude

https://geopy.readthedocs.org/en/1.10.0/

本当に難しいのは、アドレスの形式が間違っていないことを確認することです。ただし、おそらく2,000万の場所をジオコーディングするにはかなりの時間がかかります。そのような負荷は、おそらく誰かの利用規約に違反するでしょう。これが誰かを助けることを願っています。


これでCSVを使用できますか?
サルマン

もちろん、Pythonで読んだ場合。
alphabetasoup

0

ジオコードリクエストが1日あたり2,500を超えない場合は、Google Geocoding APIを使用できます。APIをひと目見れば、jsonまたはxmlとして結果に戻ることができます。

使用制限:

Google Geocoding APIの使用には、1日あたり2,500件の位置情報リクエストのクエリ制限が適用されます。(Google Maps API for Businessのユーザーは、1日に最大100,000件のリクエストを実行できます。)

例:

http://maps.google.com/maps/geo?key=yourkeyhere&output=json&q=520+3rd+Street+San+Francisco+CA

結果の例:

{
  "name": "520 3rd Street San Francisco CA",
  "Status": {
    "code": 200,
    "request": "geocode"
  },
  "Placemark": [ {
    "id": "p1",
    "address": "520 3rd St, San Francisco, Kaliforniya 94107, Amerika Birleşik Devletleri",
    "AddressDetails": {
   "Accuracy" : 8,
   "Country" : {
      "AdministrativeArea" : {
         "AdministrativeAreaName" : "CA",
         "SubAdministrativeArea" : {
            "Locality" : {
               "LocalityName" : "San Francisco",
               "PostalCode" : {
                  "PostalCodeNumber" : "94107"
               },
               "Thoroughfare" : {
                  "ThoroughfareName" : "520 3rd St"
               }
            },
            "SubAdministrativeAreaName" : "San Francisco"
         }
      },
      "CountryName" : "USA",
      "CountryNameCode" : "US"
   }
},
    "ExtendedData": {
      "LatLonBox": {
        "north": 37.7826364,
        "south": 37.7799384,
        "east": -122.3942267,
        "west": -122.3969247
      }
    },
    "Point": {
      "coordinates": [ -122.3955757, 37.7812874, 0 ]
    }
  } ]
}

Googleのジオコーディングのリンク例を確認できます。

1.単一コード

2.逆ジオコーディング

3. Google GeoCodingから始める

私はそれがあなたを助けることを願っています


15
2,000万の場所をジオコーディングするには、約22年(8,000日)しかかかりません。完全に合理的なソリューション。
アンディW

私はこのことを知っているし、彼がどんな解決策を見つけるカント場合の日、彼はそれを使用することができますあたり2500を超えていない彼のジオコード要求が...これはオプションがある場合、私は表明している
アラゴン

4
これは利用規約に違反します。Googleマップに結果を表示しない限り、不正です。たとえあなたがそうだとしても、一部の人々が2000万の機能のために少し広げられた「キャッシング議論」を見つけます!
ラギヤセルBurhum
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.