2009-03-08 6 views
0

私は、各エントリが緯度/経度座標を持つドットとしてマークされているリレーショナルデータベースを持っています。私はユーザーにマップ上の任意のポリゴンをマークする機能を与え、多角形の中にあるすべてのエントリを返すようにしたい。任意の多角形領域の座標値データのデータベースを検索する

これを達成するにはどうすればよいでしょうか?

また、小さなエラーは問題ありません(つまり、ポリゴンを矩形のセットに変える効果的な方法がある場合は問題ありません)。

+0

BTW--これはなぜコミュニティWikiですか?細かい技術的質問のように、よく定義された技術的な答えがあります。 – dmckee

+0

私はそれに害を見ることはありません、私は最悪の場合それがそのまま残るだろうと思う。 –

答えて

2

利用空間の拡張機能であることを意味し、多角形の外であることを意味し、ほとんどのデータベースはこれを持っています。 MySqlでは、トランザクションではないMyISAMテーブルでのみ使用できます。

http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html

+0

組み込みのサポートを使用していますか?それは不正行為をしなければならない! +1 – dmckee

-1

古いハック:

<point in question>から <point far away>を結ぶ線がポリゴンの境界セグメントのいずれかを横切る回数をカウントします。

  • でも数字はポイントが
  • 奇数番号が、それは多角形の内側に
+0

ええ、SQL問合せでどうやってやるの? –

+0

私は手掛かりがありません。 – dmckee

+0

これは、あなたがこれに減らされた場合、自分のコードでそれを行う必要があるかもしれないということです。その場合、Jasonのアイデア*をSQLで実装することができ、データセットを減らすことができます。 – dmckee

2

一つの方法は、迅速に考慮すべきポイントの数を削減することがポリゴンの境界長方形(のすなわちちょうど分-X、最小Y、最大-X、MAX-Yを計算することですポリゴン内の点)を選択し、境界矩形内の点を選択します(つまり、xはmin-xとmax-xの間、yと同じです)。

もちろん、これらの点のすべてが必然的にポリゴンの内側にあるわけではありませんが、コードでそれを磨くことができます。

関連する問題