2012-03-08 22 views
2

mySQLの空間関数に問題があります。私の目標は、LINESTRINGオブジェクトがPOLYGONオブジェクトを通過しているかどうかを調べることです。私が2つのLINESTRINGオブジェクトを試して、交差するかどうかを判断しようとしていることを確認します。私はそれが境界の比較やSTHの問題があるが、そこにある道(または関数、または単純なことを理解しMySQLの線ストリングと線ストリングまたはポリゴンの交差

SELECT crosses(GeomFromText(@ls), GeomFromText(@lx)); -- crossing linestrings 
returns 0; 

SELECT intersects(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings 
returns 1; 

SELECT overlaps(GeomFromText(@ls), GeomFromText(@lp)); -- parallel linestrings 
returns 1; 

SET @ls='LINESTRING (0 0, 1 1, 2 2, 3 3)'; -- original linestring 
SET @lp='LINESTRING (0 1, 1 2, 2 3, 3 4)'; -- parallel linestring 
SET @lx='LINESTRING (0 3, 1 2, 2 1, 3 0)'; -- crossed linestring 

は、私は私の目標を達成するためにいくつかの機能を試してみましたソリューション)私の目標に到達する方法?他の可能性は、LINESTRINGのPOINTがPOLYGONの範囲内にあるかどうかをチェックすることですが、これを行う別の方法があるかどうか疑問に思っていましたか? 5.6.1で'Functions That Test Spatial Relationships Between Geometries'用のMySQLのドキュメントから

MySQL Great Circle intersection (do two roads cross?)に提供される解決策は、残念ながら私を助けていません。..

答えて

2

MySQLは、もともと彼らは、オブジェクトの境界を使用していること、これらの機能は、このような実装対応するMBRベースの関数と同じ結果を返しました。 MySQL 5.6.1では、正確なオブジェクト形状を使用する対応するバージョンが利用可能です。これらのバージョンには、接頭辞ST_が付きます。たとえば、Contains()はオブジェクト境界矩形を使用しますが、ST_Contains()はオブジェクト形状を使用します。

MySQL 5.6.1以降、既存の空間関数のST_エイリアスが既に正確です。例えば、ST_IsEmptyは()のisEmptyの別名()

あなたintersects機能である2つの形状の最小外接長方形(MBR)交差を行うため、例えば、trueを返します。代わりにST_Intersectsを使用している場合(MySQL 5.6.1以降を使用している場合)、意図したとおりにfalseが返されます。これらの関数は点、線、ポリゴンで使用することができますので、必要に応じて 'ポリゴンの交線'を解決する必要があります(ST_Crossesも必要です)。

+0

はい、私にとっては幸運なことに、新しいバージョンはST_接頭辞をサポートしています。私はそれをもう一度修正しましたが、ここのスレッドを忘れました。 :) お返事をありがとうございます。 – Tiit