已知两个地点的已知经纬度求距离,算距离

在 SegmentFault,解决技术问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
一线的工程师、著名开源项目的作者们,都在这里:
获取验证码
已有账号?
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
如何获取自己当前位置的经纬度?知道了两个地点的经纬度之后,又该如何计算两个地点之间的距离?最近在做一个公众号,需要获取用户的经纬度,然后计算用户的经纬度与另一个地点的距离?请问该如何实现这个?请大神帮忙一下,谢谢!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
给楼主分享一个
我收藏的函数吧
直接调用即可
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
然后就可以用geoip_record_by_name($_SERVER['REMOTE_ADDR'])根据用户IP确定经纬度了.注意:geoip_record_by_name()返回的西经和南纬是负数.
5000米转成经纬度:纬度 Latitude:
1 deg = 110852 m经度 Longitude: 1 deg = 111320*cos(lat) m同一经线上,相差一纬度约为 110852 米同一纬线上,相差一经度约为 111320*cos(lat) 米 (lat为该纬线的纬度)
//以当前用户经纬度为中心,查询5000米内的其他用户
$y = 5000 / 110852; //纬度的范围
$x = 5000 / (111320*cos($lat)); //经度的范围
select * from user where
lat &= ($lat-$y) and lat &= ($lat+$y) and
lon &= ($lon-$x) and lon &= ($lon+$x);
数据库用户表中设两个字段,分别存储用户的经度lat和纬度lon.($lat-$y)
&= lat &= ($lat+$y)($lon-$x)
&= lon &= ($lon+$x)这个范围是一个粗略的范围,下面计算距离后把超过5公里的用户去掉即可.
根据上面查询出来的用户的经纬度,用半正矢公式(Haversine)根据经纬度计算两点间距离:
function distance($lat1, $lon1, $lat2, $lon2) {
$R = 6371393; //地球平均半径,单位米
$dlat = deg2rad($lat2-$lat1);
$dlon = deg2rad($lon2-$lon1);
$a = pow(sin($dlat/2), 2) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * pow(sin($dlon/2), 2);
$c = 2 * atan2(sqrt($a), sqrt(1-$a));
$d = $R * $c;
return round($d);
echo distance(0, 0, -1, 0); // 111202米
然后就可以用uasort或array_multisort由近到远列出用户了,比如有名为win,osx,lin这3个用户:
$arr = array(
'win' =& array(
'dis' =& 1024,
'age' =& 31
'osx' =& array(
'dis' =& 512,
'age' =& 15
'lin' =& array(
'dis' =& 512,
'age' =& 25
foreach($arr as $k =& $v) {
$sort['dis'][$k] = $v['dis'];
$sort['age'][$k] = $v['age'];
//先按距离升序排序,如果距离相同,则按年龄降序排序
array_multisort($sort['dis'], SORT_ASC, $sort['age'], SORT_DESC, $arr);
echo json_encode($arr);
//{"lin":{"dis":512,"age":25},"osx":{"dis":512,"age":15},"win":{"dis":1024,"age":31}}
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:2011年4月 Delphi大版内专家分月排行榜第三
2010年10月 Delphi大版内专家分月排行榜第三2010年4月 Delphi大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。查看: 2148|回复: 6
已知一个点的经纬度 和到另一个点的距离 还有两点之间的角度 怎么算另一个点的经纬度
论坛徽章:0
已知一个点的经纬度 和到另一个点的距离 还有两点之间的角度 怎么算另一个点的经纬度&&
在oracle 中怎么写这个函数
求职 : 认证徽章论坛徽章:11
请看我的签名
论坛徽章:740
加菲猫好像写过
招聘 : 论坛徽章:477
你先给出算法
楼上的链接不错
认证徽章论坛徽章:32
额&&计算经纬度距离的方法是啥
求职 : 认证徽章论坛徽章:28
我记得这个问题见过2次了。。到不是说不能重复问,咱只是奇怪这个需求有那么常见嘛。。。
论坛徽章:395
只要有数学公式,翻译成sql或pl/sql很容易
itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有    
 北京市公安局海淀分局网监中心备案编号:10 广播电视节目制作经营许可证:编号(京)字第1149号}

我要回帖

更多关于 已知经纬度怎么算距离 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信