文档章节

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

_EKC
 _EKC
发布于 2012/10/20 22:05
字数 264
阅读 12954
收藏 28

最近用到了geohash(参考《geohash:用字符串实现附近地点搜索》)来实现附近搜索的功能,在《微信、陌陌架构方案分析》文中提供了一个php的geohash类直接能对经纬地址编码成字符串,  而其中包含一个getDistance方法获取两点间的距离,但在sphinx中使用过滤附近地标的方法SetGeoAnchor发现返回的距离值有误,遂google出以下方法,经测试可用。。

/**
*  @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
       to work with the formula
     */

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

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

     /*
       Using the
       Haversine formula

       http://en.wikipedia.org/wiki/Haversine_formula

       calculate the distance
     */

     $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);
 }

附一个在线计算两点距离的地址:

http://www.nhc.noaa.gov/gccalc.shtml


© 著作权归作者所有

_EKC
粉丝 21
博文 16
码字总数 9032
作品 0
广州
程序员
私信 提问
加载中

评论(7)

L
Leo_chenzhe
楼主,请问返回的数据的单位是什么啊
h
hiberoo
北京到广州的距离比北京到河北的距离 都近 怎么回事
小猪洋
楼主,请问一下为什么我不同的经纬度值计算出来的两点距离都是一个结果呢?非常感谢哦~
Filix_suo
Filix_suo
你真的测过?
返回一个没定义的变量
透过玻璃的光
透过玻璃的光

引用来自“_EKC”的评论

引用来自“透过玻璃的光”的评论

博主有测试过这个代码么。

测试过了

嗯,感谢。是我的数据弄错了
_EKC
_EKC 博主

引用来自“透过玻璃的光”的评论

博主有测试过这个代码么。

测试过了
透过玻璃的光
透过玻璃的光
博主有测试过这个代码么。
php 计算两点地理坐标的距离

功能:根据圆周率和地球半径系数与两点坐标的经纬度,计算两点之间的球面距离。 获取两点坐标距离: <?php/** * 计算两点地理坐标之间的距离 * @param Decimal $longitude1 起点经度 * @par...

蜗牛奔跑
2016/03/07
31
0
根据给定点的经纬度和特定距离取范围类的数据

一、计算两个经纬度的距离 根据经纬度计算距离 R为地球半径,可取平均值 6371km; φ1, φ2 表示两点的纬度; Δλ 表示两点经度的差值。 二、根据某一经纬度和距离计算附近的经纬度 R为地球...

南烟阁
2017/11/28
0
0
PHP轻松实现"附近的人"功能,根据IP确定经纬度,根据经纬度计算距离

PHP安装GeoIP扩展和数据库根据IP获取访客所在国家/城市/经纬度等信息 然后就可以用geoiprecordbyname($SERVER['REMOTE_ADDR'])根据用户IP确定经纬度了. 注意:geoiprecordby_name()返回的西经...

eechen
2016/06/04
2.8K
2
通过地图上两个点的经纬度测算两点的距离

根据两点经纬度计算距离 这些经纬线是怎样定出来的呢?地球是在不停地绕地轴旋转(地轴是一根通过地球南北两极和地球中心的假想线),在地球中腰画一个与地轴垂直的大圆圈,使圈上的每一点都...

niceguy_php
2015/01/27
699
0
计算1千米内最大最小的经纬度&&计算地球上两点之间距离python

在开发一起玩耍app的时候,有一些距离的处理,整理出这个 计算x千米范围内的最大最小经纬度,用来从数据库中检索数据 php方法: $myLat = $postObj->Location_X;//接收到的当前位置的纬度$my...

Nob
2014/04/12
1K
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.6中安装使用fcitx框架

内容目录 一、为什么要使用fcitx?二、安装fcitx框架三、安装搜狗输入法 一、为什么要使用fcitx? Gnome3桌面自带的输入法框架为ibus,而在使用ibus时会时不时出现卡顿无法输入的现象。 搜狗和...

技术训练营
昨天
5
0
《Designing.Data-Intensive.Applications》笔记 四

第九章 一致性与共识 分布式系统最重要的的抽象之一是共识(consensus):让所有的节点对某件事达成一致。 最终一致性(eventual consistency)只提供较弱的保证,需要探索更高的一致性保证(stro...

丰田破产标志
昨天
8
0
docker 使用mysql

1, 进入容器 比如 myslq1 里面进行操作 docker exec -it mysql1 /bin/bash 2. 退出 容器 交互: exit 3. mysql 启动在容器里面,并且 可以本地连接mysql docker run --name mysql1 --env MY...

之渊
昨天
10
0
python数据结构

1、字符串及其方法(案例来自Python-100-Days) def main(): str1 = 'hello, world!' # 通过len函数计算字符串的长度 print(len(str1)) # 13 # 获得字符串首字母大写的...

huijue
昨天
6
0
PHP+Ajax微信手机端九宫格抽奖实例

PHP+Ajax结合lottery.js制作的一款微信手机端九宫格抽奖实例,抽奖完成后有收货地址添加表单出现。支持可以设置中奖概率等。 奖品列表 <div class="lottery_list clearfix" id="lottery"> ......

ymkjs1990
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部