开发者社区> 问答> 正文

如何以固定坐标A,B为中心,1km为半径内的用户按照距离P远近进行排序?

现在有用户P其坐标为:(116.63255,39.90467),现数据库有40W用户坐标不固定。
业务需求为:以P为圆心,1km为半径内所有用户按照距离由近到远进行数据排序,MYSQL或者PHP或者MYSQL存储过程如何写(如果有)?
其P的数据库信息为:
uid 用户UID
longitude 经度
latitude 纬度
以P为圆心的四个坐标可以如下换算出来,
1
得出以上四个点坐标后,Mysql可以这样写:
"SELECT m.uid,m.username,m.email,m.regip,m.regdate,m.lastloginip,m.lastlogtime,f.weight,f.height,f.sex,f.qq,f.weixin,f.weibo,f.birthyear,f.birthmonth,f.birthday,f.blood,f.capricorn,f.birthprovince,f.birthcity,f.birthtown,f.resideprovince,f.residecity,f.residetown,f.friend,f.feedfriend,f.description,f.friendnum,f.follownum,f.device,f.edition,f.longitude,f.latitude FROM ".$_SGLOBAL["common_server"]->tname("member")." AS m LEFT JOIN ".$_SGLOBAL["common_server"]->tname("memberfield")." AS f ON m.uid=f.uid WHERE (f.longitude < '{$distance["maxLng"]}' AND f.longitude > '{$distance["minLng"]}') AND (f.latitude < '{$distance["maxLat"]}' AND f.latitude > '{$distance["minLat"]}') AND 1 DESC LIMIT {$offset},20"

可,以上SQL,却无法进行距离排序,求解决办法!

展开
收起
落地花开啦 2016-02-28 10:22:56 2722 0
1 条回答
写回答
取消 提交回答
  • 喜欢技术,喜欢努力的人

    数据比较少,所以使用的是mysql partial index的方法。
    2
    其中@x1,@y1是坐标, @r0是搜索的半径km,pos是point类型的字段
    先根据spatial索引检索出半径范围内的所有点,然后计算距离,最后排序
    因为数据少,所以性能方面可以满足要求

    2019-07-17 18:49:23
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
重新定义计算的边界 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载