【问题标题】:mysql Using lat long columns in linestring mbrcontainsmysql 在行字符串 mbrcontains 中使用 lat long 列
【发布时间】:2013-01-16 15:41:22
【问题描述】:

我将纬度和经度作为浮点数存储在 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))'),GeomFromText('LINESTRING(52.57846832 -2.127799006) -0.5.1 )) ....

效果很好,但是当我将 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.latitude987654322@ addresses.longitude,addresses1.latitudeaddresses1.longitude)'))

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

有什么想法吗?谢谢

【问题讨论】:

  • 任何人....?请...?

标签: mysql geospatial


【解决方案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....

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多