首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在php中计算lat/long的距离?

在PHP中计算经纬度的距离,可以使用Haversine公式。Haversine公式是一种计算地球上两点之间的距离的方法,它考虑了地球的曲率。以下是一个使用Haversine公式计算经纬度距离的PHP函数:

代码语言:php
复制
function haversineDistance($lat1, $lon1, $lat2, $lon2) {
    $earthRadius = 6371; // 地球半径,单位为千米
    $lat1 = deg2rad($lat1);
    $lon1 = deg2rad($lon1);
    $lat2 = deg2rad($lat2);
    $lon2 = deg2rad($lon2);

    $latDiff = $lat2 - $lat1;
    $lonDiff = $lon2 - $lon1;

    $a = sin($latDiff / 2) * sin($latDiff / 2) +
         cos($lat1) * cos($lat2) *
         sin($lonDiff / 2) * sin($lonDiff / 2);
    $c = 2 * atan2(sqrt($a), sqrt(1 - $a));

    $distance = $earthRadius * $c;

    return $distance;
}

使用这个函数,你可以计算两个经纬度坐标之间的距离。例如:

代码语言:php
复制
$lat1 = 39.9042;
$lon1 = 116.4074;
$lat2 = 23.0999;
$lon2 = 113.3245;

$distance = haversineDistance($lat1, $lon1, $lat2, $lon2);
echo "Distance between the two points: " . $distance . " km";

这个函数使用了PHP的数学函数,如sin()cos()sqrt()atan2()。请注意,这个函数计算的距离是估计值,实际距离可能因地形变化而有所不同。如果需要更高精度的距离计算,可以使用Vincenty或其他更复杂的算法。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

机器学习距离计算方法

设平面上两个点为(x1,y1)(x2,y2) 一、欧式距离 欧氏距离是一个通常采用距离定义,指两个点之间真实距离 二、曼哈顿距离 我们可以定义曼哈顿距离正式意义为L1-距离或城市区块距离,也就是在欧几里德空间固定直角坐标系上两点所形成线段对轴产生投影距离总和...例如在平面上,坐标(x1,y1)i点与坐标(x2,y2)j点曼哈顿距离为: d(i,j)=|X1-X2|+|Y1-Y2|....cos= 四、切比雪夫距离 切比雪夫距离是向量空间中一种度量,二个点之间距离定义是其各坐标数值差绝对值最大值。...max{|x1-x2|,|y1-y2|} 国际象棋棋盘上二个位置间切比雪夫距离是指王要从一个位子移至另一个位子需要走步数。由于王可以往斜前或斜后方向移动一格,因此可以较有效率到达目的格子。...下图是棋盘上所有位置距f6位置切比雪夫距离

66620
  • 何在keras添加自己优化器(adam等)

    2、找到keras在tensorflow下根目录 需要特别注意是找到keras在tensorflow下根目录而不是找到keras根目录。...一般来说,完成tensorflow以及keras配置后即可在tensorflow目录下python目录中找到keras目录,以GPU为例keras在tensorflow下根目录为C:\ProgramData...找到optimizers.pyadam等优化器类并在后面添加自己优化器类 以本文来说,我在第718行添加如下代码 @tf_export('keras.optimizers.adamsss') class...# 传入优化器名称: 默认参数将被采用 model.compile(loss=’mean_squared_error’, optimizer=’sgd’) 以上这篇如何在keras添加自己优化器...(adam等)就是小编分享给大家全部内容了,希望能给大家一个参考。

    45K30

    PHP进阶学习之Geo地图定位算法详解

    Geohash其实就是将整个地图或者某个分割所得区域进行一次划分,由于采用是base32编码方式,即Geohash每一个字母或者数字(wx4g0ew)都是由5bits组成(2^5 = 32...API实现geo定位、搜索范围、计算距离等功能,国内百度、高德等,很多免费API可以使用;如需更大更精确范围,可以使用googlegeo api,缺点就是每日请求次数有限制,如果是企业级别的应用...,所以目前行业内已经有了很多存储组件提供了直接计算和存储方案,MongoDB,适合在国内云平台直接使用。...PHP进行原生geoHash计算:这种方式计算较为复杂,即是根据geoHash原理,用PHP语言实现了这一算法,也通过PHP计算距离,搜索半径等。...and latitude * @param $lat * @param $long * @return string */ public function calcGeoHash($lat,$long

    1.3K20

    ML相似性度量和距离计算&Python实现

    前言 Github: https://github.com/yingzk/MyML 博客: https://www.yingjoy.cn/ 在机器学习,经常需要使用距离和相似性计算公式,在做分类时,...,也比较通用,利用k-means对二维空间内点进行聚类。...这篇文章曼哈顿距离,欧式距离,明式距离,切比雪夫距离区别 给了一个很形象解释如下: 比如,有同样两个人,在纽约准备到北京参拜天安门,同一个地点出发的话,按照欧式距离计算,是完全一样。 ​...Python 实现 : 相关系数可以利用numpy库corrcoef函数来计算 例如 对于矩阵a,numpy.corrcoef(a)可计算行与行之间相关系数,numpy.corrcoef(a,rowvar...计算给定样本集X信息熵公式: 参数含义: n:样本集X分类数 pi:X第i类元素出现概率 信息熵越大表明样本集S分类越分散,信息熵越小则表明样本集X分类越集中。

    6.5K170

    ML相似性度量和距离计算&Python实现

    点击这里查看PDF版本 Github: https://github.com/yingzk/MyML 博 客: https://www.yingjoy.cn/ 前言 在机器学习,经常需要使用距离和相似性计算公式...,也比较通用,利用k-means对二维空间内点进行聚类。...这篇文章曼哈顿距离,欧式距离,明式距离,切比雪夫距离区别 给了一个很形象解释如下: 比如,有同样两个人,在纽约准备到北京参拜天安门,同一个地点出发的话,按照欧式距离计算,是完全一样。...Python 实现 : 相关系数可以利用numpy库corrcoef函数来计算 例如 对于矩阵a,numpy.corrcoef(a)可计算行与行之间相关系数,numpy.corrcoef(a,rowvar...计算给定样本集X信息熵公式: Entropy(X) = \sum^n_{i=1}-p_ilog_2p_i 参数含义: n:样本集X分类数 pi:X第i类元素出现概率 信息熵越大表明样本集S

    3K170

    详解马氏距离协方差矩阵计算(超详细)

    协方差计算公式如下: 5.协方差矩阵 在统计学与概率论,协方差矩阵每个元素是各个向量元素之间协方差,是从标量随机变量到高维度随机向量自然推广。...协方差矩阵(Covariance matrix)由随机变量集合两两随机变量协方差组成。矩阵第i行第j列元素是随机变量集合第i和第j个随机变量协方差。...假设我们有三个n维随机变量X,Y,Z(一般而言,在实际应用这里随机变量就是数据不同维度。切记:协方差矩阵计算是不同维度之间协方差,而不是不同样本之间协方差。)...Mahalanobis)提出,表示点与一个分布之间距离。它是一种有效计算两个未知样本集相似度方法。...3.两个样本点马氏距离计算示例: Matlab计算协方差矩阵验算(矩阵a列代表属性,行代表样本点): 得到协方差矩阵后,我们就可以计算出v和x之间马氏距离了: Matlab验算:

    2.8K20

    如何计算经纬度之间距离_根据经纬度算距离

    大家好,又见面了,我是你们朋友全栈君 用php计算两个指定经纬度地点之间距离,代码: /** *求两个已知经纬度之间距离,单位为米 *@param lng1,lng2 经度 *@param lat1...,lat2 纬度 *@return float 距离,单位米 *@edit www.jbxue.com **/ function getdistance(lng1,lat1,lng2,lat2){ /...> 举例,“上海市延安西路2055弄”到“上海市静安寺”距离: 上海市延安西路2055弄 经纬度:31.2014966,121.40233369999998 上海市静安寺 经纬度:31.22323799999999,121.44552099999998...几乎接近真实距离了,看来用php计算两个经纬度地点之间距离,还是靠谱,呵呵。 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    4.5K40

    IM里“附近的人”功能实现原理是什么?如何高效率地实现它?

    具体在产品技术上实现原理,也很容易理解: 1)现在移动端(ios、android等),通过系统API很容易抓到用户当前位置(即经纬度数据); 2)根据第1步经纬度数据,很容易计算出两个点之间距离...对于IM新手来说,可能对于第2步根据经纬度数据计算出两点距离,觉得有点难度,实际上根据数据公式(自已百度一下吧,有点复杂,哥不贴了),用代码来实现,只有短短十来行代码。...下面是一个简单Java版实现: /** * 计算地球上任意两点(经纬度)距离 * * @param long1 第一点经度 * @param lat1 第一点纬度...技术难点主要包括: 1)如何高效地进行两点距离计算,对于高并发服务端来说,像上一节代码那样,一个一个计算,还是有点不高效; 2)如何高效地进行地理围栏圈定(难道是把所有当前在线用户,离我距离都一一算一遍...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格点(蓝点和红点)与中心点距离,最终筛选出距离范围内

    1.9K00

    根据经纬度、方向、距离求终点位置

    假设方位角是α, 那从点1到点2平移距离分别如下所示d*sinα, d*cosα。 这里正北为0度。基中点1经纬度(long1, lat1)和距离d是已知。...如果只是做近似计算,我们这里取平均距离,平均半径 大约3959英里(6371.393千米) 。这个数字是地心到地球表面所有各点距离平均值。...计算第二点经度,就是 水平平移距度(d*sinα)除以 当前纬度切面周长(2π*arc),再每乘以360度) ,就知道了水平横向平移了多少度,再加上long1,就是long2值了。  2....计算第二点纬度,比较简单,就是, 垂直平移距离d(d*cosα)除以 地球纵向周长,再乘上360度,就知道纵向平移了多少度,再加上lat1,就知道lat2值了。...原因是弧度制统一了度量弧与半径单位,从而大大简化了有关公式及运算,尤其在物理、数学,其优点就格外明显。

    67030

    计算经纬度距离_经纬度测距

    大家好,又见面了,我是你们朋友全栈君。 PHP根据经纬度坐标计算距离 在有些应用需要用到计算距离功能,例如附近商家、离我最近等功能。...W为纬度对应弧度,J为经度对应弧度,如上图所示 下面代码 lat是纬度 lng是经度 看类代码/** * 根据经纬度算距离,返回结果单位是公里,先纬度,后经度 * @param $lat1 *...@param $lng1 * @param $lat2 * @param $lng2 * @return float|int */ public function GetDistance(lat1, lng1..., lat2, lng2) { $EARTH_RADIUS = 6378.137; radLat1 = this->rad( radLat2 = this->rad( a = radLat1 –...发现本站有涉嫌侵权/违法违规内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    3.5K20

    Redis 到底是怎么实现“附近的人”这个功能呢?

    : 返回两个给定位置之间距离; GEOHASH: 返回一个或多个位置对象Geohash表示; GEORADIUS: 以给定经纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象;...源码分析 /* GEOADD key long lat name [long2 lat2 name2 ... longN latN nameN] */ void geoaddCommand(client...,返回目标集合与中心距离不超过给定最大距离所有位置对象。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格点(蓝点和红点)与中心点距离,最终筛选出距离范围内点...并可推算出RedisGEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)),其中N为指定半径范围内位置元素数量,而M则是被九宫格圈住计算距离元素数量。

    1.2K10

    Redis 到底是怎么实现“附近的人”这个功能

    : 返回两个给定位置之间距离; GEOHASH: 返回一个或多个位置对象Geohash表示; GEORADIUS: 以给定经纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象;...源码分析 /* GEOADD key long lat name [long2 lat2 name2 ... longN latN nameN] */ void geoaddCommand(client...,返回目标集合与中心距离不超过给定最大距离所有位置对象。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格点(蓝点和红点)与中心点距离,最终筛选出距离范围内点...并可推算出RedisGEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内位置元素数量,而M则是被九宫格圈住计算距离元素数量。

    93530

    看用 Redis 如何实现微信「​附近的人」​功能?

    : 返回两个给定位置之间距离; GEOHASH: 返回一个或多个位置对象Geohash表示; GEORADIUS: 以给定经纬度为中心,返回目标集合与中心距离不超过给定最大距离所有位置对象;...源码分析 /* GEOADD key long lat name [long2 lat2 name2 ... longN latN nameN] */ void geoaddCommand(client...,返回目标集合与中心距离不超过给定最大距离所有位置对象。...在实际搜索时,首先会根据搜索半径计算geohash网格等级(即右图中网格大小等级),并确定九宫格位置(即红色九宫格位置信息);再依次查找计算九宫格点(蓝点和红点)与中心点距离,最终筛选出距离范围内点...并可推算出RedisGEORADIUS查找附近的人功能,时间复杂度为:O(N+log(M)) 其中N为指定半径范围内位置元素数量,而M则是被九宫格圈住计算距离元素数量。

    91750
    领券