3

GeoDjango を使用して基本的な位置検索を行いたいと考えています。具体的には、検索機能に郵便番号/都市/郡を指定し、5 マイル、10 マイル、20 マイルなどの範囲内のすべての郵便番号/都市/郡を検索したいと考えています。ドキュメントで次の段落を見つけました。

地理座標系を使用すると、後で開発者が複雑になる可能性があります。たとえば、PostGIS には、地理座標系を使用して非ポイント ジオメトリ間の距離計算を実行する機能がありません。たとえば、WGS84 として保存されている郡の境界から 5 マイル以内にあるすべてのポイントを検索するためのクエリを作成します。[6]

PostGIS を使用し、上記の検索をアメリカ全土で実行できるようにしたい場合、これは正確にはどういう意味ですか? ドキュメントでは、投影座標系を使用して特定の領域のみをカバーすることを提案しています。全国をカバーする必要があるので、これはオプションではないと思います。

基本的には、出発地と距離を指定して、近隣の郵便番号/都市/郡を見つけられるようにしたいと考えています。これが技術レベルでどのように行われるかはあまり気にしません。

また、GeoDjango モデルにインポートできる米国の郵便番号/都市/郡の地理的境界を含むデータベースはどこにありますか?

アップデート

米国内のすべての郵便番号の緯度と経度の座標を含む のデータベースを見つけましたここ. 私の計画は、これらのポイントを GeoDjango モデルにインポートし、PostGis を使用して、特定のポイントから x マイル以内にある他のポイントを見つけることができるクエリを作成することです。これは、すべての郵便番号がポリゴンではなくポイントとして扱われるため、ドキュメントで提起された問題を回避します。完全な精度は気にしないので、これは私のユースケースでは問題ありません。

良い点: データファイルは無料です

悪い点: このデータは 2000 年の国勢調査によるものなので、かなり古いものです

やや有望: 米国国勢調査局は 10 年ごとに国勢調査を実施しており、ほぼ 2010 年です。

結論:私には十分です

4

2 に答える 2

3

引用符の制限を回避するには、ユーザーから提供された郵便番号地域の重心を取得し、その点から、5、10、またはその点から発する任意のマイルの円と交差するすべての郵便番号地域を見つけることができます。geodjangoでそれがどのように達成されるかはわかりませんが、postgisでは間違いなく可能です。

あなたが引用した制限は、基本的に、「オハイオ州の国境の内側で 5 マイル以内にあるすべてのポイントを教えてください」というクエリを作成できないことを示しています。

于 2009-12-27T23:00:01.823 に答える
0
In [1]: o = Place.objects.get(pk=2463583)  # Oakland, CA

In [2]: sf = Place.objects.get(pk=2487956)  # San Francisco, CA

In [3]: o.coords.transform(3410)  # use the NSIDC EASE-Grid Global projection

In [4]: sf.coords.transform(3410)  # use the NSIDC EASE-Grid Global projection

In [5]: o.coords.distance(sf.coords)  # find the distance between Oakland and San Francisco (in meters)
Out[5]: 14401.942808571299
于 2012-09-22T04:04:35.417 に答える