您好,欢迎访问一九零五行业门户网

php做附近的人,根据距离由近到远进行排序

用户登陆的时候会获取到该用户的经纬度,数据库中存有所有用户的经纬度,如何进行由近到远进行排序,并算出距离
回复内容: 用户登陆的时候会获取到该用户的经纬度,数据库中存有所有用户的经纬度,如何进行由近到远进行排序,并算出距离
可以考虑用geohash实现,效率更高,参考这篇http://www.cnblogs.com/lbser/p/3310455.html
我觉得是时候把这个地址贴上来了。
https://segmentfault.com/q/1010000000345194
用php+redis可以实现 可以参考这个 http://www.wubiao.info/401
php安装geoip扩展和数据库根据ip获取访客所在国家/城市/经纬度等信息
然后就可以用geoip_record_by_name($_server['remote_addr'])获取用户经纬度.
注意:geoip_record_by_name()返回的西经和南纬是负数.
5000米转成经纬度:
纬度 latitude: 1 deg = 110852 m
经度 longitude: 1 deg = 111320*cos(lat) m
同一经线上,相差一纬度约为 110852 米
同一纬线上,相差一经度约为 111320*cos(lat) 米 (lat为该纬线的纬度)
($lat-$y) and lat ($lon-$x) and lon
这个范围是一个粗略的范围,后面距离计算后把超过5公里的用户筛掉即可.
根据上面查询出来的用户的经纬度,
用半正矢公式根据经纬度计算两点间距离:
elasticsearch 得距离搜索,获取最近的20公里数据
get test/test/_search
{
query: {
filtered: { query : { match_all : {} }, filter: { geo_distance: { distance: 20, distance_unit: km, location: { lat : 40.11116, lon : -71.34115 } } }}
}
}
其它类似信息

推荐信息