php 计算两点地理坐标的距离

php 计算两点地理坐标的距离

<?php
/**
 * 计算两点地理坐标之间的距离
 * @param  Decimal $longitude1 起点经度
 * @param  Decimal $latitude1  起点纬度
 * @param  Decimal $longitude2 终点经度 
 * @param  Decimal $latitude2  终点纬度
 * @param  Int     $unit       单位 1:米 2:公里
 * @param  Int     $decimal    精度 保留小数位数
 * @return Decimal
 */
function getDistance($longitude1, $latitude1, $longitude2, $latitude2, $unit=2, $decimal=2){
 
    $EARTH_RADIUS = 6370.996; // 地球半径系数
    $PI = 3.1415926;
 
    $radLat1 = $latitude1 * $PI / 180.0;
    $radLat2 = $latitude2 * $PI / 180.0;
 
    $radLng1 = $longitude1 * $PI / 180.0;
    $radLng2 = $longitude2 * $PI /180.0;
 
    $a = $radLat1 - $radLat2;
    $b = $radLng1 - $radLng2;
 
    $distance = 2 * asin(sqrt(pow(sin($a/2),2) + cos($radLat1) * cos($radLat2) * pow(sin($b/2),2)));
    $distance = $distance * $EARTH_RADIUS * 1000;
 
    if($unit==2){
        $distance = $distance / 1000;
    }
 
    return round($distance, $decimal);
 
}
 
// 起点坐标
$longitude1 = 113.330405;
$latitude1 = 23.147255;
 
// 终点坐标
$longitude2 = 113.314271;
$latitude2 = 23.1323;
 
$distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 1);
echo $distance.'m'; // 2342.38m
 
$distance = getDistance($longitude1, $latitude1, $longitude2, $latitude2, 2);
echo $distance.'km'; // 2.34km
 
?>

  功能:根据圆周率和地球半径系数与两点坐标的经纬度,计算两点之间的球面距离。 

获取两点坐标距离:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112355.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • Python判断字符串是否包含子字符串

    Python判断字符串是否包含子字符串Python如何判断一个字符串是否包含指定字符串?本文介绍Python判断一个字符串是否包含指定子串的4种方法。具有一定的借鉴价值。第一种使用in运算符最简单的方法是通过python的in运算符str=”Everyonehasaworld,quiteandlonely!”result=”world”instrresult2=”hello”i…

  • phpstorm2021.4.24激活码破解(破解版激活)「建议收藏」

    phpstorm2021.4.24激活码破解(破解版激活),https://javaforall.cn/100143.html。详细ieda激活码不妨到全栈程序员必看教程网一起来了解一下吧!

  • react路由原理解析[通俗易懂]

    react路由原理解析[通俗易懂]原理:在dom渲染完成之后,给window添加  “hashchange”事件监听页面hash的变化,并且在state属性之中添加了route属性,代表当前页面的路由。 1、当点击连接 页面hash改变时,触发绑定在window上的  hashchange事件, 2、在hashchange事件中改变组件的state中的route属性,(react组件的state属性改变时

  • java 二维数组排序

    java 二维数组排序①使用Comparator生成一个比较器对象初始化数组:int[][]arr=newint[m][n];排序规则:先按数组的第一个元素进行升序排序,若第一个元素相等,则按照第二个元素进行升序排序。使用API:Arrays.sort()(T[]a,Comparator<?superT>c),该API根据给定的比较器(设定排序方式)对指定的数组进行排序。代码实现:Arrays.sort(arr,newComparator<int[]>(){

  • mybatiscodehelperpro2.8.3激活码_navicat premium激活

    mybatiscodehelperpro2.8.3激活码_navicat premium激活目录一、前言二、安装插件MyBatisCodeHelperPro插件三、激活一、前言在开发中编写生成bean,mapper,mapper.xml即费时也费力,可以通过MyBatisCodeHelperPro自动生成bean,dao,mapper.xml等文件,然后根据自己的需要进行修改。MyBatisCodeHelperPro是IDEA下的一个插件,类似于mybatisplugin,但是是收费的,但可以进行激活使用:下面这个大佬的个人主页上有多个版本的下载链…

  • java工作流_Java 实现简单工作流

    java工作流_Java 实现简单工作流工作流主要运用到反射机制创建一张工作流表如:主键|工作流Code|工作流内容其中工作流,内容为Json格式工作流内容如下{“procCode”:”OPS”,”procName”:”c端补齐(乘客信息补全)”,”taskControlVoList”:[{“sortNo”:”10″,”taskCode”:”OPC”,”taskName”:”检查对应的订单信息是否存在”,”taskl…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号