mysql在linestring mbrcontains中使用lat long列

时间:2013-01-16 15:41:23

标签: mysql geospatial

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

  

... MBR包含的地方(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更改为

  

...其中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。{ {1}} latitudeaddresseslongitudeaddresses1 latitudeaddresses1)'))

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

任何想法?感谢

1 个答案:

答案 0 :(得分:0)

您正在引用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....