MySQL无法检查点是否在距离内... MBR包含查询错误还是错误?

时间:2013-08-02 00:34:01

标签: mysql geospatial distance

我有以下纬度和经度:

lat - 18.9802767 
lng - 72.8142511 

我正在尝试以下查询距离目标点10公里的地方。

select mbrcontains( geomfromtext(
'LINESTRING(72.8993663648088 19.0702857,72.72913583519122 18.8902677)'
), 
geomfromtext(
'point(18.9802767 72.8142511)'
)  );

Linestring几何对象派生自我试图确定的确切点,使用公式 this 示例使用mysql 5.1及更高版本的方法:

linestring(point(@lng+10/(111.1/cos(radians(@lat))),@lat+10/111.1), point(@lng-10/(111.1/cos(radians(@lat))),@lat-10/111.1))

根据我的理解,该点属于最小边界矩形(MBR)。但是,查询会返回0作为答案。以上是遵循 this 示例中给出的原则。

查询有什么问题?如何知道该点是否在某个地理空间距离内(在这种情况下,MBR点是使用坐标给出的点10 kms计算的:lat - 18.9802767, lng - 72.8142511)。

BTW,我使用的是MySQL 5.5.32。

1 个答案:

答案 0 :(得分:0)

您的观点不属于该行的MBR。看起来你已经改变了直线或点上的纬度或经度坐标。切换'point(18.9802767 72.8142511)'中的X和Y以获得此点,该点将在该行的MBR内:

POINT (72.8142511 18.9802767)

如果您与MySQL绑定,您可以考虑更新到MySQL 5.6,然后使用Buffer函数从您感兴趣的点创建一个圆形区域,然后使用ST_Within查找该圆形区域内的任何内容。

如果您不依赖于MySQL,请考虑PostGIS,它提供了一个很好的ST_DWithin函数,使这些比较非常容易。