2008-08-15 9 views
4

私の小さなサイトは、アクティブなユーザの場所をフィルタとして使用して、テーブルのアイテムのリストをプールする必要があります。彼らはあなたが選択した場所によってフィルタリングされている、あなたは「DVD」で検索が、結果はすべてのDBからでないCraigslistを、考えて私の質問は2つのレベルがあります。郵便番号でフィルタリングするか、他の場所に基づくデータ検索の戦略

  1. 私はラ・クレイグズリストを行く必要がありますが、ユーザーに都市レベルの場所を使用するように依頼するのですか?この問題は、ハードコードされた手作りの場所リストを生成する必要があるということです。ユーザーに郵便番号を入力するように依頼し、郵便番号と同じまたは特定の距離にあるすべてのアイテムをプールします。

郵便番号を好むようですそれはもっとエレガントな解決策だと思われますが、地球上でどのようにすべての郵便番号のDBを作成し、郵便番号12345を与えて1マイルの距離のすべての郵便番号を取得する機能を実装するのですか?

これはかなり多くのサイトが私と同じようなニーズを持っているので、これはかなり一般的な「タスク」なので、ここではホイールを再発明しないことを願っています。

答えて

5

郵便番号データベースの取得は問題ありません。あなたはこの無料の1つを試すことができます: http://zips.sourceforge.net/

私はそれがどのように最新であるかわからないが、多くのプロバイダの1つを使用することができます。私たちはZipCodeDownload.comに年間購読しています。おそらく100ドルで、郵便番号の重心の緯度/経度を含む最新の郵便番号データを毎月更新します。

特定の半径内のすべてのジップを照会する場合は、ある種の空間ライブラリが必要です。 lats/longsを持つzipのテーブルがあれば、データベース指向のメカニズムが必要になります。 SQL Server 2008には機能が組み込まれており、open source librariescommercial librariesがSQL Server 2005にこのような機能を追加します。オープンソースデータベースPostgreSQLには、この機能をそのデータベースに追加するPostGISプロジェクトがあります。それはここにあります:http://postgis.refractions.net/

他のデータベースプラットフォームはおそらく同様のプロジェクトを持っていますが、それは私が知っているものです。これらのDBベースのライブラリのいずれかを使用すると、指定された半径内の任意の郵便番号(または緯度/経度の列を持つ任意の種類の行)を直接照会することができます。

別のルートに移動する場合は、マッピングライブラリで空間ツールを使用できます。ここには、フリーソースのTigerマップをデータソースとして使用できるSharpMapmany othersGoogle can help out)などのオープンソースオプションもあります。しかし、この経路はいくぶん複雑で、必要なのは半径探索だけであればパフォーマンスが低下する可能性があります。

最後に、Webサービスを調べることができます。これは、あなたが言うように、一般的な必要性であり、あなたが提供できる数字obウェブサービスがあり、指定された郵便番号から特定の半径のすべての郵便番号を提供できると想像します。クイック検索では、次のようになりました。 http://www.zip-codes.com/free-zip-code-tools.asp#radius しかし、この件に関してはMANY resources to be had for the searchingがあります。

0

どのようにしてください[...]与えられた郵便番号12345の機能を実装すると、1マイルの距離ですべての郵便番号が得られますか?ここで

それを行う方法についてのサンプルです:

http://www.codeproject.com/KB/cs/zipcodeutil.aspx

0

ただ、技術的なことを... PostGISではPostgresのコミュニティのプロジェクトではありません...それは、スタンドアローンですPostgresの上に構築されたプロジェクトです。 PostGISのヘルプやサポートが必要な場合は、Postgresではなくコミュニティに行きたいと思うでしょう。

0

PostGISを使用できます。さらに、deCartaのマッピングライブラリを使用しました。彼らには、任意のデータ型をgeokeyできる技術があります。次にこれらを空間的に照会することができます。

免責事項:私はデカルタ

0

のために働くには、それだけで1マイルの半径内にある都市把握し、テーブルにその情報を格納するために、より効率的ではないでしょうか?その後、データベース内で常に計算を行う必要はありません。

関連する問題