使用php mysql计算从数据库中选择的两个位置之间的距离

使用php mysql计算从数据库中选择的两个位置之间的距离,php,mysql,google-maps-api-3,latitude-longitude,Php,Mysql,Google Maps Api 3,Latitude Longitude,我想从下拉列表中计算两个选定位置之间的距离 我有一个表id,村庄名称,纬度,经度 我确实按照一个例子进行了计算,但我不太明白 有人能帮我吗 map.php 该函数使用计算坐标之间的距离 a = sin²((lat2-lat1)/2) +cos(lat1).cos(lat2).sin²(lon2-lon1/2) c = 2.atan2(sqrt(a), sqrt(1-a))) d = R.c 请注意,角度需要以弧度为单位才能传递到trig函数 功能说明 <?php function d

我想从下拉列表中计算两个选定位置之间的距离 我有一个表id,村庄名称,纬度,经度

我确实按照一个例子进行了计算,但我不太明白 有人能帮我吗

map.php
该函数使用计算坐标之间的距离

a = sin²((lat2-lat1)/2) +cos(lat1).cos(lat2).sin²(lon2-lon1/2)

c = 2.atan2(sqrt(a), sqrt(1-a)))

d = R.c
请注意,角度需要以弧度为单位才能传递到trig函数

功能说明

<?php
function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
        $result = "";
        /* THE 5 LINES BELOW ARE MEANINGLESS
        $lattitude = $lat1;
        $lattitude = $lat2;
        $longitude = $lng1;
        $longitude = $lng2;
        var_dump($lattitude);
        */

    $pi80 = M_PI / 180;// Converts degrees to radians Should be using PHP deg2rad function.



    $lat1 *= $pi80;
    $lng1 *= $pi80;
    $lat2 *= $pi80;
    $lng2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;//Difference between latitude coordinates
    $dlng = $lng2 - $lng1;//Difference between longitude coordinates
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;//Distance in km

    $result = ($miles ? ($km * 0.621371192) : $km);//Ternary Operator

    echo $result;
    }
?>  
下面的函数使用相同的公式,但更容易理解

function distanceHaversine($lat1, $lon1, $lat2, $lon2) {
  $delta_lat = $lat2 - $lat1 ;
  $delta_lon = $lon2 - $lon1 ;
  $earth_radius = 3959; // in miles use 6373 for kms
  $alpha = $delta_lat/2;
  $beta  = $delta_lon/2;
  $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
  $c = asin(min(1, sqrt($a)));
  $distance = 2*$earth_radius * $c;
  $distance = round($distance, 4);

  return $distance;
}

echo $distance = distanceHaversine($lat_1, $lon_1, $lat_2, $lon_2). " Miles";
该函数使用计算坐标之间的距离

a = sin²((lat2-lat1)/2) +cos(lat1).cos(lat2).sin²(lon2-lon1/2)

c = 2.atan2(sqrt(a), sqrt(1-a)))

d = R.c
请注意,角度需要以弧度为单位才能传递到trig函数

功能说明

<?php
function distance($lat1, $lng1, $lat2, $lng2, $miles = true)
    {
        $result = "";
        /* THE 5 LINES BELOW ARE MEANINGLESS
        $lattitude = $lat1;
        $lattitude = $lat2;
        $longitude = $lng1;
        $longitude = $lng2;
        var_dump($lattitude);
        */

    $pi80 = M_PI / 180;// Converts degrees to radians Should be using PHP deg2rad function.



    $lat1 *= $pi80;
    $lng1 *= $pi80;
    $lat2 *= $pi80;
    $lng2 *= $pi80;

    $r = 6372.797; // mean radius of Earth in km
    $dlat = $lat2 - $lat1;//Difference between latitude coordinates
    $dlng = $lng2 - $lng1;//Difference between longitude coordinates
    $a = sin($dlat / 2) * sin($dlat / 2) + cos($lat1) * cos($lat2) * sin($dlng / 2) * sin($dlng / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));
    $km = $r * $c;//Distance in km

    $result = ($miles ? ($km * 0.621371192) : $km);//Ternary Operator

    echo $result;
    }
?>  
下面的函数使用相同的公式,但更容易理解

function distanceHaversine($lat1, $lon1, $lat2, $lon2) {
  $delta_lat = $lat2 - $lat1 ;
  $delta_lon = $lon2 - $lon1 ;
  $earth_radius = 3959; // in miles use 6373 for kms
  $alpha = $delta_lat/2;
  $beta  = $delta_lon/2;
  $a = sin(deg2rad($alpha)) * sin(deg2rad($alpha)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * sin(deg2rad($beta)) * sin(deg2rad($beta)) ;
  $c = asin(min(1, sqrt($a)));
  $distance = 2*$earth_radius * $c;
  $distance = round($distance, 4);

  return $distance;
}

echo $distance = distanceHaversine($lat_1, $lon_1, $lat_2, $lon_2). " Miles";

你的问题是什么?数据库或计算中的下拉列表?@david strachan calculation NNN plz Help您可以使用球形库及其函数ComputedIstance之间可能存在的重复问题是什么?数据库或计算中的下拉列表?@david strachan计算NNNNN plz帮助您可以使用球形库及其函数ComputedDistanceBetween