计量地理地点之间的离开,计算两点期间的离开

作者: 韦德国际1946手机版  发布:2019-05-28

大家调用高德地图的API来总括经纬度

计量地理地点之间的离开,计算两点期间的离开。早在《高品质MySQL》上观察了,平素想记录下来,小编有严重耽误症。。。近些日子合作社在这几个看似事情方面须要优化,所以尽快再细致看一下,记录下来,加深一下回想。

算算地表2点里边的球面距离

.net 依照坐标,总结钦定范围内的最大比相当小经纬度、依据两点间经纬度坐标,总结两点间距离(注意:这里的单位是米)

#计算地址经纬度
import requests
def geocode(address):
 parameters = {'address': address, 'key': 'cb649a25c1f81c1451adbeca73623251'}
 base = 'http://restapi.amap.com/v3/geocode/geo'
 response = requests.get(base, parameters)
 answer = response.json()
 print(address   "的经纬度:", answer['geocodes'][0]['location'])
 lon = float(answer['geocodes'][0]['location'].split(',')[0])
 lat = float(answer['geocodes'][0]['location'].split(',')[1])
geocode(address) 

此小说参照他事他说加以考察来源《高品质MySQL》陆.8.贰节,风乐趣能够去看一下。

/**
 * @param $lat1
 * @param $lng1
 * @param $lat2
 * @param $lng2
 * @return int
 */
function getDistance($lat1, $lng1, $lat2, $lng2){

    //将角度转为狐度

    $radLat1=deg2rad($lat1);//deg2rad()函数将角度转换为弧度

    $radLat2=deg2rad($lat2);

    $radLng1=deg2rad($lng1);

    $radLng2=deg2rad($lng2);

    $a=$radLat1-$radLat2;

    $b=$radLng1-$radLng2;

    $s=2*asin(sqrt(pow(sin($a/2),2) cos($radLat1)*cos($radLat2)*pow(sin($b/2),2)))*6378.137;

    return $s;

}

/**
 * @param $lat1
 * @param $lon1
 * @param $lat2
 * @param $lon2
 * @param float $radius  星球半径
 * @return float
 */
function distance($lat1, $lon1, $lat2,$lon2,$radius = 6378.137)
{
    $rad = floatval(M_PI / 180.0);

    $lat1 = floatval($lat1) * $rad;
    $lon1 = floatval($lon1) * $rad;
    $lat2 = floatval($lat2) * $rad;
    $lon2 = floatval($lon2) * $rad;

    $theta = $lon2 - $lon1;

    $dist = acos(sin($lat1) * sin($lat2)  
                cos($lat1) * cos($lat2) * cos($theta)
            );

    if ($dist < 0 ) {
        $dist  = M_PI;
    }

    return $dist = $dist * $radius;
}
$lat1 = '31.253411';
$lon1 = '121.518998';

$lat2 = '31.277117';
$lon2 = '120.744587';

echo getDistance($lat1, $lon1, $lat2, $lon2);  // 73.734589823361

echo distance($lat1, $lon1, $lat2, $lon2);   // 73.734589823354
 #region 根据坐标,计算指定范围内的最大最小经纬度、根据两点间经纬度坐标,计算两点间距离,单位为米        private static double PI = Math.PI; //3.14159265;  //π        private static double EARTH_RADIUS = 6378137;    //地球半径        private static double RAD = Math.PI / 180.0;   //   π/180        #region 根据坐标,计算指定范围内的最大最小经纬度        /// <summary>        /// 根据坐标,计算指定范围内的最大最小经纬度        /// </summary>        /// <param name="lng">经度</param>        /// <param name="lat">纬度</param>        /// <param name="raidus">范围</param>        /// <returns>返回最大、最小经纬度minLng, minLat, maxLng, maxLat</returns>        public double[] getAround(double lng, double lat, int raidus)        {            //The circumference of the earth is 24,901 miles.            //24,901/360 = 69.17 miles / degree              Double latitude = lat;            Double longitude = lng;            Double degree = (24901 * 1609) / 360.0;   //地球的周长是24901英里            double raidusMile = raidus;            //先计算纬度            Double dpmLat = 1 / degree;            Double radiusLat = dpmLat * raidusMile;            Double minLat = latitude - radiusLat;            Double maxLat = latitude   radiusLat;            //计算经度            Double mpdLng = degree * Math.Cos(latitude * (PI / 180));  //纬度的余弦            Double dpmLng = 1 / mpdLng;            Double radiusLng = dpmLng * raidusMile;            Double minLng = longitude - radiusLng;            Double maxLng = longitude   radiusLng;            //System.out.println("[" minLat "," minLng "," maxLat "," maxLng "]");                               //最小经度,最小纬度,最大经度,最大纬度            return new double[] { minLng, minLat, maxLng, maxLat };        }        #endregion        #region 根据两点间经纬度坐标,计算两点间距离,单位为米        /// <summary>        /// 根据两点间经纬度坐标,计算两点间距离,单位为米        /// </summary>        /// <param name="lng1">经度1</param>        /// <param name="lat1">纬度1</param>        /// <param name="lng2">经度2</param>        /// <param name="lat2">纬度2</param>        /// <returns>返回距离</returns>        public double getDistance(double lng1, double lat1, double lng2, double lat2)        {            double radLat1 = lat1 * RAD;  // // RAD=π/180            double radLat2 = lat2 * RAD;            double a = radLat1 - radLat2;            double b = (lng1 - lng2) * RAD;            double s = 2 * Math.Asin(Math.Sqrt(Math.Pow(Math.Sin(a / 2), 2)               Math.Cos * Math.Cos * Math.Pow(Math.Sin(b / 2), 2)));            s = s * EARTH_RADIUS;            s = Math.Round(s * 10000) / 10000;            return s;        }        #endregion        #endregion

大家输入下边八个地点,得到相应的中纬度。

化解的主题素材

多数业务有追寻有个别点相近的人,相近的经纪人等等。

 

sql:计算地球上三个坐标点之间相差sql函数(注意:这里的单位是公里)

本文由韦德国际1946发布于韦德国际1946手机版,转载请注明出处:计量地理地点之间的离开,计算两点期间的离开

关键词: DataBase PHP 地理位置 距离

上一篇:Python学习小手艺总计,Python小技术总计
下一篇:没有了