经纬度计算距离

@link http://www.cnblogs.com/ycsfwhh/archive/2010/12/20/1911232.html

@link http://blog.csdn.net/b_h_l/article/details/8657040

这里讲的很具体,说实话菜鸟没看到。

下面只是我用php抄的,自己做下笔记。

class LantitudeLongitudeDist{
    const EARTH_RADIUS = 6378137;//赤道半径(单位m)

    /**
     * 转化为弧度(rad)
     * */
    private static function rad($d)
    {
       return (float)($d * pi() / 180.0);
    }

    /**
     * 基于余弦定理求两经纬度距离
     * @param lon1 第一点的经度
     * @param lat1 第一点的纬度
     * @param lon2 第二点的经度
     * @param lat3 第二点的纬度
     * @return 返回的距离,单位m
     * */
    public static function dist($lon1, $lat1, $lon2, $lat2) {
        $radLat1 = self::rad($lat1);
        $radLat2 = self::rad($lat2);

        $radLon1 = self::rad($lon1);
        $radLon2 = self::rad($lon2);

        if ($radLat1 < 0)
            $radLat1 = pi() / 2 + abs($radLat1);// south
        if ($radLat1 > 0)
            $radLat1 = pi() / 2 - abs($radLat1);// north
        if ($radLon1 < 0)
            $radLon1 = pi() * 2 - abs($radLon1);// west
        if ($radLat2 < 0)
            $radLat2 = pi() / 2 + abs($radLat2);// south
        if ($radLat2 > 0)
            $radLat2 = pi() / 2 - abs($radLat2);// north
        if ($radLon2 < 0)
            $radLon2 = pi() * 2 - abs($radLon2);// west
        $x1 = self::EARTH_RADIUS * cos($radLon1) * sin($radLat1);
        $y1 = self::EARTH_RADIUS * sin($radLon1) * sin($radLat1);
        $z1 = self::EARTH_RADIUS * cos($radLat1);

        $x2 = self::EARTH_RADIUS * cos($radLon2) * sin($radLat2);
        $y2 = self::EARTH_RADIUS * sin($radLon2) * sin($radLat2);
        $z2 = self::EARTH_RADIUS * cos($radLat2);

        $d = sqrt(($x1 - $x2) * ($x1 - $x2) + ($y1 - $y2) * ($y1 - $y2)+ ($z1 - $z2) * ($z1 - $z2));
        //余弦定理求夹角
        $theta = acos((self::EARTH_RADIUS * self::EARTH_RADIUS + self::EARTH_RADIUS * self::EARTH_RADIUS - $d * $d) / (2 * self::EARTH_RADIUS * self::EARTH_RADIUS));
        $dist = $theta * self::EARTH_RADIUS;
        return $dist;
    }

}
$r = LantitudeLongitudeDist::dist(‘116.4609990000‘, ‘39.9272240000‘, ‘116.4685450000‘, ‘39.9278320000‘);
echo $r;
exit();

  

时间: 2024-10-12 08:11:34

经纬度计算距离的相关文章

PHP根据两点间的经纬度计算距离,php两点经纬度计算(转)

这是一个不错的示例,直接贴代码,首先要知道纬度值.经度值 /** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; //approximate radius of earth in meters /* Convert these degrees to r

记录两个函数--1.计算某个经纬度的周围某段距离的正方形的四个点。2.根据两点间的经纬度计算距离

前些日子在做手机网站开发的时候碰到这样一个需求,用某度地图的定位功能查看自己现在所在的位置,同时要显示出以自己为圆心,周围1000米以内的商家.功能很简单,拿到自己的经纬度,算出四个点的经纬度坐标,从数据库里拿出相对应的商家,显示在地图上即可,关键就是需要这么一个好用函数.还好找到了一个不错的,分享给大家,估计大家做到这一块的时候应该也会用到. /**  * 计算某个经纬度的周围某段距离的正方形的四个点  * 地球半径,平均半径为6371km  * @param lng float 经度  *

根据两点间的经纬度计算距离

/** * @desc 根据两点间的经纬度计算距离 * @param float $lat 纬度值 * @param float $lng 经度值 */ function getDistance($lat1, $lng1, $lat2, $lng2) { $earthRadius = 6367000; $lat1 = ($lat1 * pi()) / 180; $lng1 = ($lng1 * pi()) / 180; $lat2 = ($lat2 * pi()) / 180; $lng2 =

由经纬度计算距离

前些天接触到一个由经纬度计算距离的算法,非常简明了哦. 怎奈进行操作的时候,却报出来类型错误的结果.后来经过分析,发现问题出在下面代码中的13行. /* 计算两个GPS点直线距离 结果单位:M 3 */ 4 public static double distance(double jingdu1, double weidu1, 5 double jingdu2, double weidu2) { 6 double theta = jingdu1 - jingdu2; 7 double dist

【转】根据两点经纬度计算距离

原文链接:根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬

iOS经纬度计算距离

#pragma mark - calculate distance  根据2个经纬度计算距离      #define PI 3.1415926   +(double) LantitudeLongitudeDist:(double)lon1 other_Lat:(double)lat1 self_Lon:(double)lon2 self_Lat:(double)lat2{       double er = 6378137; // 6378700.0f;       //ave. radius

根据两点经纬度计算距离

这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的 假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈 就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段, 叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬. 北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬, 两极和高纬度地区无夏,

php有经纬度计算距离

/** *  @desc 根据两点间的经纬度计算距离 *  @param float $lat 纬度值 *  @param float $lng 经度值 */  function getDistance($lat1, $lng1, $lat2, $lng2)  {      $earthRadius = 6367000; //approximate radius of earth in meters      /*        Convert these degrees to radians

[转]根据两点经纬度计算距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都和南北两极的距离相等,这个圆圈就叫作“赤道”.在赤道的南北两边,画出许多和赤道平行的圆圈,就是“纬圈”:构成这些圆圈的线段,叫做纬线.我们把赤道定为纬度零度,向南向北各为90度,在赤道以南的叫南纬,在赤道以北的叫北纬.北极就是北纬90度,南极就是南纬90度.纬度的高低也标志着气候的冷热,如赤道和低纬度地地区无冬,两极和高

java工具类 六 根据经纬度计算距离

Java实现根据经纬度计算距离 在项目开发过程中,需要根据两地经纬度坐标计算两地间距离,所用的工具类如下: Demo1: public static double getDistatce(double lat1, double lat2, double lon1, double lon2) { double R = 6371; double distance = 0.0; double dLat = (lat2 - lat1) * Math.PI / 180; double dLon = (lo