1

我有以下纬度和经度:

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 几何对象派生自我试图确定的确切点,该点使用 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)。但是,查询返回 a0作为答案。以上是遵循示例中给出的原则。

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

顺便说一句,我使用的是 MySQL 5.5.32。

4

1 回答 1

0

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

POINT (72.8142511 18.9802767)

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

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

于 2013-08-02T14:33:16.947 回答