2009-07-16 19 views
2

この質問は、Mysql geospatial-extensionエキスパート向けです。MySql地理空間バグ..?

次のクエリではない、私は期待していた結果のことを行います。

create database test_db; 

use test_db; 

create table test_table (g polygon not null); 

insert into test_table (g) values (geomfromtext('Polygon((0 5,5 10,7 8,2 3,0 5))')); 
insert into test_table (g) values (geomfromtext('Polygon((2 3,7 8,9 6,4 1,2 3))')); 

select 

X(PointN(ExteriorRing(g),1)), Y(PointN(ExteriorRing(g),1)), 
X(PointN(ExteriorRing(g),2)), Y(PointN(ExteriorRing(g),2)), 
X(PointN(ExteriorRing(g),3)), Y(PointN(ExteriorRing(g),3)), 
X(PointN(ExteriorRing(g),4)), Y(PointN(ExteriorRing(g),4)) 

from test_table where MBRContains(g,GeomFromText('Point(3 6)')); 

は、基本的に我々は2ポリゴンを作成している、と我々はポイント2のいずれかの内にあるかどうかを決定するためにMBRContainsを使用しようとしていますポリゴン。

驚いたことに、両方のポリゴンを返します。ポイント3,6は、最初に挿入されたポリゴンにのみ存在する必要があります。 MySQLは、両方のポリゴンを返すどのように来るの両方のポリゴンが傾いていることを

は注意(あなたが紙の上のポリゴンを描画したら、あなたが表示されます)

?私はMySql Community Edition 5.1を使用しています。

+0

2009年8月13日現在、MySqlは最終的に完全なGISの実装を開始します。参照: http://forge.mysql.com/wiki/GIS_Functions – sivabudh

答えて

2

更新日:この回答はMySQLによって廃止されました。http://forge.mysql.com/wiki/GIS_Functions!古いMBRContains実装のリファレンスとして残しておきますが、変更を説明する新しい回答が歓迎され、これより上で「受け入れられる」べきです。

は時代遅れあなたは(必然的に)を使用している

答えminimum bounding rectangles、などのないポリゴンを始めます。クエリの目的のために形状が比較されていると同等です:秒

'POLYGON(2 1,9 1,9 9,2 9,2 1)'

:最初の形状とのため

'POLYGON(0 2,0 10,7 10,7 2,0 2)'

。 (3,6)は両方にあります。

MBRは、min(x)とmax(x)に垂直線を持ち、max(y)とmin(y)に水平線を持つものとして矩形を描きます。これらの形状はデータベースの計算が簡単ですが、MySQLはすべてのポリゴン関数をサポートしていません。 (エリアはい、ラインストリングは一般的にはい、containsはまだありません)詳細here)。現時点でより正確な地理空間ジオメトリを望む場合、オープンソース側の最良の選択はPostGISです。

関連する問題