使用经纬度查找距离的Sql返回错误的距离
Posted
技术标签:
【中文标题】使用经纬度查找距离的Sql返回错误的距离【英文标题】:Sql for finding the distance between using latitude and longitude returns wrong distance 【发布时间】:2018-06-04 18:19:56 【问题描述】:我需要获取纬度和经度位置之间的距离, mysql 查询工作没有错误,但它返回错误的距离值
当我输入与数据库中相同的纬度和经度时,它给出的距离为“2590.4238273460855”而不是零,我不知道这有什么问题
mysql查询如下 这里的纬度和经度是我的表格列名
$sql = "SELECT id,(3956 * 2 * ASIN(SQRT( POWER(SIN(( $latitude - latitude) * pi()/180 / 2), 2) +COS( $latitude * pi()/180) * COS(latitude * pi()/180) * POWER(SIN(( $longitude - longitude ) * pi()/180 / 2), 2) ))) as distance
from table_name ORDER BY distance limit 100";
谁能帮帮我..
【问题讨论】:
当我运行这个查询时,我得到一个非常接近零的数字(由于转换为弧度时不精确,所以不完全为零)。您还可以显示设置变量并执行查询的代码吗? 请告诉我们导致 2590 的 $lat, $lng, lat, lng 的值... 【参考方案1】:Haversine 公式中存在错误。正弦公式为:
Haversine_distance= r * 2 * ASIN(SQRT(a))
在哪里
a = POW(SIN(latDiff / 2), 2) + COS(lat1) * COS(lat2) * POW(SIN(LonDiff / 2), 2)
因此,要更正您的代码,请将您的查询更改为:
"SELECT id,(3956 * 2 * ASIN(SQRT( POWER(SIN(( $latitude - latitude) / 2), 2) +COS( $latitude) * COS(latitude) * POWER(SIN(( $longitude - longitude ) / 2), 2) ))) as distance from table_name ORDER BY distance limit 100";
【讨论】:
当我执行这个查询时,我得到一个 sql 错误 - #1064 - 你的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 '"' 附近使用正确的语法 我的查询和你的查询一样,我只是在你的查询中删除了所有 * pi()/180 的实例。所以理论上它不应该失败。尝试从您自己的查询中删除它们,如果可行,请告诉我。 您的代码是正确的,这是我输入错误的错误,对不起,感谢您分享您的时间 我希望我的回答是正确的,它可以帮助您解决问题。以上是关于使用经纬度查找距离的Sql返回错误的距离的主要内容,如果未能解决你的问题,请参考以下文章
在 SQL Server 中使用纬度和经度查找两点之间的距离
使用纬度和经度返回 SQL Server 2008 中两个位置之间的距离
sql语句怎么写算坐标经纬度之间的距离?我是mysql数据库。 请详细点!谢谢!