【问题标题】:MySQL Longitude Latitude not accurateMySQL经度纬度不准确
【发布时间】:2020-02-07 20:16:47
【问题描述】:

我正在尝试根据经度和纬度选择附近的所有记录。

问题是它不准确,例如此查询表示用户在 42 公里之外,而实际距离为 65 公里。

我已将 lon 和 lat 值放入一个 php 脚本中,该脚本计算距离属性,这意味着查询不正确。

你有什么想法为什么这么受欢迎吗?

    SELECT
        id,
        first_name,
        (6371 * acos (
           cos ( radians(latitude) )
           * cos( radians( LAT ) )
           * cos( radians( LON ) - radians(longitude) )
           + sin ( radians(latitude) )
           * sin( radians( LAT ) )
          )
        ) AS distance
    FROM
        users

有效的 PHP 代码

$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) +  cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($lon1 - $lon2));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);

if ($unit == "K") {
    return ($miles * 1.609344);
} else if ($unit == "N") {
    return ($miles * 0.8684);
} else {
    return $miles;
}

【问题讨论】:

  • PHP 脚本如何计算距离?是haversine还是道路距离?
  • @ArunNalla 这只是在互联网上找到的一个基本脚本,它工作正常,我在 MySQL 中重新制作了公式并没有工作,仍然没有。
  • 为 MySQL 代码计算中使用的所有 4 个参数指定数据类型。并在 PHP 代码中进行比较。
  • 所有参数都相同,我重新创建了查询,当查询作为存储过程运行时它无法正常工作:/
  • 我会观察到 65/42 = 1.54,它非常接近 1.6 - 这个数字出现在一个公式中,而不是另一个公式中。

标签: mysql sql database


【解决方案1】:

想通了,程序中的参数设置为INT而不是DOUBLE

【讨论】:

  • 哦,现在有一个程序。我想知道你还有什么没有告诉我们;-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
相关资源
最近更新 更多