Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL无法检查点是否在距离内。。。是否包含查询错误或Bug?_Mysql_Geospatial_Distance - Fatal编程技术网

MySQL无法检查点是否在距离内。。。是否包含查询错误或Bug?

MySQL无法检查点是否在距离内。。。是否包含查询错误或Bug?,mysql,geospatial,distance,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几何体对

我有以下纬度和经度:

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及更高版本的方法从我试图确定的确切点中派生出来的,示例使用以下公式:

linestringpoint@lng+10/111.1/cosradians@lat,@lat+10/111.1,point@lng-10/111.1/cosradians@lat,@lat-10/111.1

据我所知,该点位于最小边界矩形MBR内。但是,查询返回的答案为0。以上内容遵循示例中给出的原则

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


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

您的观点不在该行的MBR范围内。看起来您已经反转了直线或点上的纬度或经度坐标。在“point18.9802767 72.8142511”中切换X和Y以获得该点,该点位于管线的MBR内:

第72.8142511点18.9802767点

如果你绑定到MySQL,你可以考虑更新到MySQL 5.6,然后使用缓冲函数从你感兴趣的地方创建一个圆形区域,然后使用StIn查找那个圆形区域内的任何东西。


如果您不与MySQL绑定,请考虑PASGIS,它提供了一个很好的StdInIn函数,使这些比较非常容易。

这是我所用的公式:linestringpoint@lng+10/111.1/cosradians@lat,@lat+10/111.1,point@lng-10/111.1/cosradians@lat,@lat-10/111.1因此,Linestring几何体对象是从我试图确定的精确点导出的。我在这里做错了什么吗?您的线字符串可能是正确的,但是您传递给geomfromtext的点的x和y翻转了,这使它远离线字符串。我已经更新了我的答案,使之更清晰。谢谢,我想现在它可以工作了。虽然桌子有问题,但仍然:-。无论如何,你能解释一下cos除法背后的逻辑吗?这解释了经线在两极会聚的原因。当你从赤道向北或向南移动时,公里/纬度的数量随着纬度的变化而变化,从赤道的约111KM(其中111KMcos0=111KM*1=111KM)变为两极的0KM,因为这些线已经收敛到一个点,其中111KMcos90度=111KM*0=0KM。对于经度,你不必这样做,因为经纬线不会收敛,所以公里/度的经度总是在111左右。谢谢你的一吨@Ireeder。。。那真的很有帮助。。你太棒了!!