相关疑难解决方法(0)

MySQL大圆距离(Haversine公式)

我有一个工作的PHP脚本,它获取经度和纬度值,然后将它们输入到MySQL查询中.我想把它做成MySQL.这是我目前的PHP代码:

if ($distance != "Any" && $customer_zip != "") { //get the great circle distance

    //get the origin zip code info
    $zip_sql = "SELECT * FROM zip_code WHERE zip_code = '$customer_zip'";
    $result = mysql_query($zip_sql);
    $row = mysql_fetch_array($result);
    $origin_lat = $row['lat'];
    $origin_lon = $row['lon'];

    //get the range
    $lat_range = $distance/69.172;
    $lon_range = abs($distance/(cos($details[0]) * 69.172));
    $min_lat = number_format($origin_lat - $lat_range, "4", ".", "");
    $max_lat = number_format($origin_lat + $lat_range, "4", ".", "");
    $min_lon = number_format($origin_lon - $lon_range, "4", ".", "");
    $max_lon = …
Run Code Online (Sandbox Code Playgroud)

php mysql great-circle

181
推荐指数
4
解决办法
10万
查看次数

更快速地计算两点之间的地理距离

我从互联网上的某个地方借用了以下方法(不记得在哪里).但它正在做一个直接的过程,找到两个GPS点之间的距离.它运行得很好,除了它可能有点慢,因为我在数百万点运行它.我想知道是否有人知道一种计算上更便宜的方法.

准确度需要在"正确"的一般区域,但不需要100%准确.

private double distFrom(double lat1, double lng1, double lat2, double lng2) {
    double earthRadius = 3958.75;
    double dLat = Math.toRadians(lat2-lat1);
    double dLng = Math.toRadians(lng2-lng1);
    double a = Math.sin(dLat/2) * Math.sin(dLat/2) +
           Math.cos(Math.toRadians(lat1)) * Math.cos(Math.toRadians(lat2)) *
           Math.sin(dLng/2) * Math.sin(dLng/2);
    double c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1-a));
    return   earthRadius * c;
  }
}
Run Code Online (Sandbox Code Playgroud)

我确实找到了许多其他相关问题,但他们并没有真正关注我的速度问题.

java gis optimization gps geolocation

9
推荐指数
1
解决办法
7419
查看次数

标签 统计

geolocation ×1

gis ×1

gps ×1

great-circle ×1

java ×1

mysql ×1

optimization ×1

php ×1