Расстояние между 2 точками на карте - PullRequest
0 голосов
/ 06 июня 2018

Привет всем, я ищу функцию php для расчета расстояния между двумя точками на карте Google без необходимости использования пакета / api

ваша помощь будет высоко оценена и заранее благодарна

1 Ответ

0 голосов
/ 06 июня 2018

Вот пара функций PHP, которые упрощают вычисления.

В первом мы находим расстояние между двумя точками в метрах, предполагая, что Земля представляет собой идеально круглую сферу с радиусом 6 371 008метров.(Обратите внимание, что Земля на самом деле не является идеальной сферой; ее радиус на полюсах примерно на 21 метр короче радиуса на экваторе. Это приведет к очень незначительным неточностям в наших расчетах.)

Вво-вторых, мы конвертируем метры в мили, ярды, футы и километры, чтобы вы могли получить расстояние в любых необходимых единицах.

Вот они:

function get_meters_between_points($latitude1,$longitude1,$latitude2,$longitude2) 
{
    if (($latitude1 == $latitude2) && ($longitude1 == $longitude2)){
        return 0; 
    } // distance is zero because they're the same point

    $p1 = deg2rad($latitude1);
    $p2 = deg2rad($latitude2);

    $dp = deg2rad($latitude2 - $latitude1);
    $dl = deg2rad($longitude2 - $longitude1);

    $a = (sin($dp/2) * sin($dp/2)) + (cos($p1) * cos($p2) * sin($dl/2) * sin($dl/2));
    $c = 2 * atan2(sqrt($a),sqrt(1-$a));
    $r = 6371008; // Earth's average radius, in meters
    $d = $r * $c;

    return $d; // distance, in meters
}

function get_distance_between_points($latitude1, $longitude1, $latitude2, $longitude2) 
{
    $meters = get_meters_between_points($latitude1, $longitude1, $latitude2, $longitude2);
    $kilometers = $meters / 1000;
    $miles = $meters / 1609.34;
    $yards = $miles * 1760;
    $feet = $miles * 5280;
    return compact('miles','feet','yards','kilometers','meters');
}

Вот примерфункции в действии, используя две координаты в Нью-Йорке:

$point1 = array(40.713008, -74.013169);
$point2 = array(40.829643, -73.926175);
$distance = get_distance_between_points($point1['0'], $point1['1'], 
$point2['0'], $point2['1']);
echo '<p>The two points are '.round($distance['miles'],2).' miles apart.</p>';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...