1

緯度と経度をfloatとしてmysqlテーブルに保存しています。SELECT ... WHEREコマンドを使用して、各行の2つの座標セット間の線が境界内にある行のみを取得しようとしています。

... Where MBRContains(GeomFromText('Polygon((50.619 0.479,53.153 0.019,54.089 -3.495,51.504 -2.941,50.619 0.479))')、GeomFromText('LINESTRING(52.57846832 -2.12799001、51.50733566 -0.1276831)'))。 ..。。

これはうまく機能しますが、LINESTRINGをに変更すると

... where MBRContains(GeomFromText('' Polygon((50.619 0.479,53.153 0.019,54.089 -3.495,51.504 -2.941,50.619 0.479))'' )addresses、GeomFromText ('LINESTRING(。。。。。。)' ))latitude addresseslongitudeaddresses1latitude addresses1longitude

失敗します。明らかに、selectは以前にアドレステーブルに結合して、正しいアドレスとアドレス1テーブルを作成しました。

何か案は?ありがとう

4

1 に答える 1

1

LINESTRING の引用符内の列を参照しているため、MySQL はそれを WKT 定義の一部として扱います。

'LINESTRING(addresses.latitude addresses.longitude,addresses1.latitude addresses1.longitude)'

列の値は逆参照されていないため、この WKT は無効であり、無効な WKT が GeomFromText に渡されると、MySQL は静かに NULL を返し、MBRContains が失敗します。CONCAT を使用して、GeomFromText の正しい LINESTRING を構築します。

CONCAT('LINESTRING(',addresses.latitude',' ',addresses.longitude,',',addresses1.latitude....

于 2013-08-24T15:56:08.843 に答える