如何获取用户的经纬度,计算两个地点之间的距离?

如何获取自己当前位置的经纬度?知道了两个地点的经纬度之后,又该如何计算两个地点之间的距离?
最近在做一个公众号,需要获取用户的经纬度,然后计算用户的经纬度与另一个地点的距离?请问该如何实现这个?请大神帮忙一下,谢谢!

PHP实现”附近的人”功能,根据IP确定经纬度,根据经纬度计算距离

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

5000米转成经纬度:
纬度 Latitude: 1 deg = 110852 m
经度 Longitude: 1 deg = 111320*coslat m
同一经线上,相差一纬度约为 110852 米
同一纬线上,相差一经度约为 111320*coslat 米 lat为该纬线的纬度

<?php
//以当前用户经纬度为中心,查询5000米内的其他用户
$y = 5000 / 110852; //纬度的范围
$x = 5000 / 111320*cos$lat; //经度的范围
$sql = 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根据经纬度计算两点间距离:

<?php
function distance$lat1, $lon1, $lat2, $lon2 { $R = 6371393; //地球平均半径,单位米 $dlat = deg2rad$lat2-$lat1; $dlon = deg2rad$lon2-$lon1; $a = powsin$dlat/2, 2 + cosdeg2rad$lat1 * cosdeg2rad$lat2 * powsin$dlon/2, 2; $c = 2 * atan2sqrt$a, sqrt1-$a; $d = $R * $c; return round$d;
}
echo distance0, 0, -1, 0; // 111202米

然后就可以用uasort或array_multisort由近到远列出用户了,比如有名为win,osx,lin这3个用户:

<?php
$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}}

百度提供接口了

GeoIP https://sjolzy.cn/GeoIP-PHP-v…

给楼主分享一个 我收藏的函数吧 直接调用即可
https://gist.github.com/wujun…

发表评论

电子邮件地址不会被公开。 必填项已用*标注