2017-01-05 5 views
3

この件に関する記事はたくさんありますが、私のニーズに合ったものは見つかりませんでした。私が必要とするのは、別の郵便番号のxマイル半径内のポストコードのリストを取得することだけです。私は郵便番号のデータベースを持っていないし、正確に私が必要なもの(http://postcodes.io/)を行う無料のサービスがありますが、本当にそれを使用することはできませんので、取引のブレーカーの制限(最大半径= 2km)があります。郵便番号(または座標)と半径を指定してポストコード(GB)のリストを取得するにはどうすればよいですか?

私はGoogle Maps APIをより詳細に見る必要があると思うかもしれませんが、私はそれが必要なものを提供するかもしれないと信じていますが、ドキュメントからはっきりしていないと思います。今)。誰かが光を放つことができるなら、私は大いに感謝するでしょう。

これはC#プロジェクトのため、有用なライブラリは大歓迎です。

答えて

4

ポストコードのデータベースをダウンロードします。 this oneまたはthis one。データに対する正確性と完全性の要件がある場合は、buying access to the official databaseとしてください。 Google's GeoCoding APIを使用して、欠落している座標を取り出すことができます。許可された1日分の無料のクォータよりも多くのコードを解決する必要がある場合は、より大きなクォータを購入することをお勧めします。 Googleはこれをドキュメントに記載しています。

データベースを作成したら、Geo拡張子を持つSQLデータベースに格納します。 Postgisを検索し、SQLを使用してルックアップを実行するか、隣接するポストコードの高速検索を可能にするフォームに前処理します。私の経験では、郵便番号によるルックアップの最良の選択肢は、いくつかのオーバーヘッドを追加して、postcode → [ (postcode, distance), (postcode, distance), .. ]の関係のハッシュマップを保存することです。つまり、検索にツリートラバーサルを使用しないでください。座標とポストコードの関係では、BSP treeのような空間データの洗練されたデータ構造を使用するか、単純なままにして、グリッド内の関連する正方形内のすべてのポストコードを含む粗い2Dグリッド構造を使用します。

2

postcodes.ioは、受け入れられた回答を補完するだけで、それが使用するデータセットのpg_dumpも提供しています(PostgresとPostgisを有効にする必要があります)。

ファイルをダウンロードして解凍したら、Postgresqlの復元手順(例: $ cat postcodeiodb.sql | psql postcodesiodbは、データセット全体をインポートするために必要なものです。追加のインポートスクリプトは必要ありません。さらに、pg_dumpは、すべての必要なスキーマ&インデックスを作成します。 https://github.com/ideal-postcodes/postcodes.io/blob/master/latest

免責事項:

プロジェクトはここに最新のデータセットへのポインタを保持し、私が知っているpostcodes.io

+0

は非常に良い維持、ありがとうございました! – Fabio

関連する問題