Для получения полного доступа
зарегистрируйтесь.
Сниппет,  PHP

Расстояние между двумя точками по GPS-координатам


/**
 * Вычисляет расстояние между двумя точками по gps-координатам
 *
 * @param float $lat1
 * @param float $lng1
 * @param float $lat2
 * @param float $lng2
 * @return int расстояние в метрах
 */
function distance($lat1, $lng1, $lat2, $lng2)
{
    $cosLat1 = cos($lat1 * M_PI / 180);
    $cosLat2 = cos($lat2 * M_PI / 180);
    $sinLat1 = sin($lat1 * M_PI / 180);
    $sinLat2 = sin($lat2 * M_PI / 180);
    $cosDelta = cos(($lng2 - $lng1) * M_PI / 180);
    $sinDelta = sin(($lng2 - $lng1) * M_PI / 180);

    $dist = atan2(
        sqrt(
            pow($cosLat2 * $sinDelta, 2) +
            pow($cosLat1 * $sinLat2 - $sinLat1 * $cosLat2 * $cosDelta, 2)
        ),
        $sinLat1 * $sinLat2 + $cosLat1 * $cosLat2 * $cosDelta
    ) * 6372795;

    return round($dist);
}

assert(distance(77.1539, -139.398, -77.1804, -139.55) == 17166029);
assert(distance(77.1539, 120.398, 77.1804, 129.55) == 225883);
assert(distance(77.1539, -120.398, 77.1804, 129.55) == 2332669);
  gps

Автор


Roman Zhuravlev
  • Репутация: 6
  • Сниппеты : 3
  • Ревизии : 0
Подписаться

Чтобы увидеть комментарии, нужно быть участником сообщества

Регистрация