<?php
namespace Api\PhpUtils\Common;
/**
 * geo工具类
 */
class Geo
{
    // 地球半径，单位米
    const EARTH_RADIUS = 6378137;

    /**
     * 计算经纬度距离（单位米）
     *
     * @param float $lat1
     * @param float $lng1
     * @param float $lat2
     * @param float $lng2
     * @param bool $km 如果为true则返回单位为km
     * @return int
     */
    public static function geoDistance($lat1, $lng1, $lat2, $lng2, $km = false)
    {
        // 转换为弧度
        $rad_lat1 = deg2rad($lat1);
        $rad_lat2 = deg2rad($lat2);
        $rad_lng1 = deg2rad($lng1);
        $rad_lng2 = deg2rad($lng2);
        $diff_lat = $rad_lat1 - $rad_lat2;
        $diff_lng = $rad_lng1 - $rad_lng2;

        $distance = 2 * asin(sqrt(pow(sin($diff_lat / 2), 2) + cos($rad_lat1) * cos($rad_lat2) * pow(sin($diff_lng / 2), 2))) * self::EARTH_RADIUS;
        if ($km)
        {
            return round($distance / 1000, 1);
        }
        return round($distance, 2);
    }
}
