php如何计算两坐标点之间的距离

 更新时间:2018年12月29日 16:17:41   作者:王大刀  
这篇文章主要为大家详细介绍了php如何计算两坐标点之间的距离,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了php计算两坐标点之间距离的实现代码,供大家参考,具体内容如下

地球上两个点之间,可近可远。

当比较近的时候,可以忽略球面因素,当做是一个平面,这样就有了两种计算方法。

//两点间距离比较近
function getDistance($lat1, $lng1, $lat2, $lng2) 
{ 
 $earthRadius = 6367000; //地球半径m

 $lat1 = ($lat1 * pi() ) / 180; 
 $lng1 = ($lng1 * pi() ) / 180; 

 $lat2 = ($lat2 * pi() ) / 180; 
 $lng2 = ($lng2 * pi() ) / 180; 

 $calcLongitude = $lng2 - $lng1; 
 $calcLatitude = $lat2 - $lat1; 
 $stepOne = pow(sin($calcLatitude / 2), 2) + cos($lat1) * cos($lat2) * pow(sin($calcLongitude / 2), 2); 
 $stepTwo = 2 * asin(min(1, sqrt($stepOne))); 
 $calculatedDistance = $earthRadius * $stepTwo; 

 return round($calculatedDistance); 
} 

//两点间距离比较远
function getLongDistance($lat1, $lng1, $lat2,$lng2,$radius = 6378.137)
{
 $rad = floatval(M_PI / 180.0);

 $lat1 = floatval($lat1) * $rad;
 $lng1 = floatval($lng1) * $rad;
 $lat2 = floatval($lat2) * $rad;
 $lng2 = floatval($lng2) * $rad;

 $theta = $lng2 - $lng1;

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

 if ($dist < 0 ) {
  $dist += M_PI;
 }
 return $dist = $dist * $radius;
}

小编再为大家分享一段php坐标之间距离的求解代码:

 <?php 
 define('EARTH_RADIUS', 6378.137);//地球半径 
 define('PI', 3.1415926); 
 /** 
 * 计算两组经纬度坐标 之间的距离 
 * params :lat1 纬度1; lng1 经度1; lat2 纬度2; lng2 经度2; len_type (1:m or 2:km); 
 * return m or km 
 */ 
 function GetDistance($lat1, $lng1, $lat2, $lng2, $len_type = 1, $decimal = 2) 
 { 
 $radLat1 = $lat1 * PI / 180.0; 
 $radLat2 = $lat2 * PI / 180.0; 
 $a = $radLat1 - $radLat2; 
 $b = ($lng1 * PI / 180.0) - ($lng2 * PI / 180.0); 
 $s = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2))); 
 $s = $s * EARTH_RADIUS; 
 $s = round($s * 1000); 
 if ($len_type > 1) 
 { 
 $s /= 1000; 
 } 
 return round($s, $decimal); 
 } 
 echo GetDistance(39.908156,116.4767, 39.908452,116.450479, 1);//输出距离/米 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Thinkphp5实现Redis数据缓存的基本步骤

    Thinkphp5实现Redis数据缓存的基本步骤

    在ThinkPHP 5中,你可以使用Redis作为数据缓存的解决方案,Redis是一个开源的内存数据结构存储系统,它可以用作数据库、缓存和消息中介,下面是在ThinkPHP 5中实现Redis数据缓存的基本步骤,需要的朋友可以参考下
    2024-05-05
  • PHP开发api接口安全验证的实例讲解

    PHP开发api接口安全验证的实例讲解

    下面小编就为大家分享一篇PHP开发api接口安全验证的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • dedecms中使用php语句指南

    dedecms中使用php语句指南

    dedecms是广大站长们比较喜欢也经常使用的一款文章管理系统,使用方便,今天我们来研究下dedecms中如何使用php语句,有相同需求的小伙伴们可要看仔细了。
    2014-11-11
  • 在Laravel5中正确设置文件权限的方法

    在Laravel5中正确设置文件权限的方法

    这篇文章主要给大家介绍了关于如何在Laravel5中正确设置文件权限的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Laravel5具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-05-05
  • 在云虚拟主机部署thinkphp5项目的步骤详解

    在云虚拟主机部署thinkphp5项目的步骤详解

    thinkphp官网在去年的时候发布了tp的颠覆版本thinkphp5,tp5确实比之前的版本好用了很多,那么下面这篇文章就来给大家介绍关于在云虚拟主机部署thinkphp5项目的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-12-12
  • 使用composer命令加载vendor中的第三方类库 的方法

    使用composer命令加载vendor中的第三方类库 的方法

    这篇文章主要介绍了使用composer命令加载vendor中的第三方类库的方法,本文图文并茂给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • PHP数组内存利用率低和弱类型详细解读

    PHP数组内存利用率低和弱类型详细解读

    本篇文章主要介绍了PHP数组内存利用率低和弱类型详细解读,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • 基于PHP实现用户注册登录功能

    基于PHP实现用户注册登录功能

    本课程通过使用PHP及Web前端技术实现一个网站注册登录入口页面,学习并实践PHP编程等,有兴趣的同学可以参考一下。
    2016-10-10
  • thinkphp3.2.2前后台公用类架构问题分析

    thinkphp3.2.2前后台公用类架构问题分析

    这篇文章主要介绍了thinkphp3.2.2前后台公用类架构问题,以实例形式较为详细的分析了前后台公用类的简单调用方法,非常具有实用价值,需要的朋友可以参考下
    2014-11-11
  • PHP转换Excel中日期和时间类型的处理问题

    PHP转换Excel中日期和时间类型的处理问题

    在实际应用中PHP读取的Excel文件的日期无法直接使用,会出现的一系列问题,本文给大家介绍PHP转换Excel中日期和时间类型的处理问题,感兴趣的朋友一起看看吧
    2023-10-10

最新评论