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
 
?>

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

获取两点坐标距离:

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

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

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • linux ftrace的原理和实现_bytes≤buffersize

    linux ftrace的原理和实现_bytes≤buffersize1、简介ringbuffer是trace框架的一个基础,所有的trace原始数据都是通过ringbuffer记录的。ringbuffer的作用主要有几个:1、存储在内存中,速度非常快,对系统性能的影响降到了最低;2、ring结构,循环写。可以很安全的使用又不浪费内存,能够get到最新的trace信息;但是,难点并不在这。真正的难点是系统会在常规上下文、中断(NMI、IRQ、SOF…

    2025年10月24日
    5
  • sql server嵌套查询实验_exists嵌套查询

    sql server嵌套查询实验_exists嵌套查询嵌套查询一带有IN谓词的子查询1.查询与“刘晨”在同一个系学习的学生selectsno,snamefromstudentwheresdeptin( selectsdept fromstudent wheresname=’刘晨’)二.带有比较运算符的子查询1.找出每个学生超过他自己选修课程平均成绩的课程号selectsno,cnofrom…

    2022年8月10日
    22
  • 高通 linux_linux驱动开发教程

    高通 linux_linux驱动开发教程笔记:调试步骤:1.BLSPcheck:主要确认GPIO功能和BLSP通道2.pinctrl文件配置3.平台设备树文件配置4.时钟文件修改5.添加从设备:1 设备树注册方法2 设备数节点创建一、I2C配置1.根据原理图,查找相关的i2c引脚对应的GPIO值,以GPIO10作为I2C_SDA,GPIO11作为I2C_SCL为例。2.根据MSM8937DEV

    2022年10月8日
    1
  • 用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -…[通俗易懂]

    用python语言实现人工智能猴子摘香蕉的问题_人工智能实验报告大全:猴子摘香蕉问题的VC编程实现等八次 -…[通俗易懂]人工智能课内实验报告(8次)学院:自动化学院班级:智能1501姓名:刘少鹏(34)学号:06153034目录课内实验1:猴子摘香蕉问题的VC编程实现????????1课内实验2:编程实现简单动物识别系统的知识表示???5课内实验3:盲目搜索求解8数码问题?????????18课内实验4:回溯算法求解四皇后问题???…

    2022年9月26日
    2
  • 什么是面向切面编程_简述面向切面编程思想

    什么是面向切面编程_简述面向切面编程思想学习完面向对象编程和面向接口编程,下一步就是面向切面编程,快来mark!

    2025年8月25日
    1
  • android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]

    android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]Glide缓存简介Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。内存缓存和硬盘缓存的相互结合才构成了Glide极佳的图片缓存效果,那么接下来我们就分别来分析一下这两种缓存的使用方法以及它们的实现原理。我认识很多优秀的Android工程师,他们丝毫

    2022年5月3日
    61

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

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