我有以下纬度和经度:
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。
答案 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函数,使这些比较非常容易。