1

我将纬度和经度作为浮点数存储在 mysql 表中。我正在尝试使用 SELECT ... WHERE 命令来仅获取每行中两组坐标之间的线在边界内的行,即

... mbrcontains(geomfromtext('Polygon((50.619 0.479,53.153)0.019,54.089 -3.495,51.504 -2.941,50.619 0.479 0.479)' ...

效果很好,但是当我将 LINESTRING 更改为

...其中 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( addresses. latitude addresses. longitude. addresses1. latitude addresses1. longitude)'))

它失败。显然select之前已经加入了地址表来创建address和address1表,这是正确的。

有任何想法吗?谢谢

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 回答