mysql 在 linestring mbrcontains 中使用 lat long 列

标签 mysql geospatial

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

...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))''), GeomFromText('LINESTRING(addresses.latitude addresses.longitude,addresses1.latitude addresses1.longitude)'))

它失败了。显然 select 之前已经连接到 address 表以创建 address 和 address1 表,这是正确的。

有什么想法吗?谢谢

最佳答案

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

关于mysql 在 linestring mbrcontains 中使用 lat long 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14362178/

相关文章:

mysql - 如何在 Where 子句中使用 IN 查找精确的行匹配?

r - ggplot 保留组合图的重复颜色

php - MySQL按出现次数排序

mysql - 从 cygwin 连接到 mysql

r - 从大数据坐标集中获取时区的最快方法(一百万个坐标或更多)

node.js - 查询附近纬度/经度数据库的最佳方式?

gis - 这对于GIS可行吗?

mongodb - $geoWithin 和 $geoIntersects 运算符的区别?

php - 如何像facebook一样添加banner广告?

java - Hibernate:无法检索多个字段值