V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
randyzhao
V2EX  ›  程序员

关于定位功能 ("附近的人"类似微信那种), 有没有什么现成的轮子可以用

  •  
  •   randyzhao · 2015-06-16 19:05:45 +08:00 · 4721 次点击
    这是一个创建于 3450 天前的主题,其中的信息可能已经有所发展或是发生改变。

    是这样, 开发个 app, 里面有这么个功能.

    查看附近的人.

    那么问题来了, 有没有什么现成的轮子可以实现这个功能.

    没有的话, 就只能每次把自己的定位信息上传到服务器, 然后存数据库.
    每次客户端请求寻找附近的人, 拿当前用户的坐标, 计算一个范围, 然后去数据库里捞数据.

    时间着急不想造轮子了.

    18 条回复    2015-06-18 11:07:38 +08:00
    jokester
        1
    jokester  
       2015-06-16 19:39:49 +08:00
    google service有, 不知国内能不能用
    randyzhao
        2
    randyzhao  
    OP
       2015-06-16 19:45:03 +08:00
    @jokester 让所有用户都用的话, 成本有点高...
    holmesabc
        3
    holmesabc  
       2015-06-16 20:00:03 +08:00
    好像有百度还是高德的sdk
    laoertongzhi
        4
    laoertongzhi  
       2015-06-16 20:25:17 +08:00
    这种事情不应该找地图厂商么?
    randyzhao
        5
    randyzhao  
    OP
       2015-06-16 20:32:35 +08:00
    @laoertongzhi 如果有朋友有实际的使用经验 我想听听 然后横向对比一下

    如果时间很充裕的话, 我肯定每家都试用一下 自己去做对比....

    时间比较紧张, 只好做伸手党了...
    randyzhao
        6
    randyzhao  
    OP
       2015-06-16 20:37:22 +08:00
    @holmesabc 百度的看的晕乎乎的 高德的还清楚些
    国内是不是也就这两家靠谱了?
    icodesign
        7
    icodesign  
       2015-06-16 20:44:55 +08:00   ❤️ 1
    @randyzhao 高德有个云图,以前用它实现过类似的功能
    randyzhao
        8
    randyzhao  
    OP
       2015-06-16 20:47:23 +08:00
    @icodesign 恩 高德的我看了 但是看的不细, 用起来有什么难受的地方吗?
    比如请求限制, 响应速度什么的.
    ETiV
        9
    ETiV  
       2015-06-16 21:07:38 +08:00   ❤️ 1
    自己撸过的飘过...

    存数据库前用 GeoHash 换算一下经纬度. 然后查附近的人就靠这个 geohash string[0:n] 去 LIKE 'xxx%', 当然经纬度也跟着一起存进去.

    找完附近的人, 再用经纬度去算两边的距离.
    再对距离排序.
    当然也可以不排, QQ的附近的人就没有按距离排序.
    为了不泄漏其他用户的所在位置, 下发数据的时候不要把别人的经纬度带下去就行了.

    看你服务端用啥语言, Node.js 俩小时(?)搞定.
    randyzhao
        10
    randyzhao  
    OP
       2015-06-16 23:30:47 +08:00
    @ETiV
    以后要考虑扩展性的话
    比如:
    后期引入百度高德之类的 SDK 把附近的人的数据在地图上展示
    除开记录 GeoHash 之外, 应该还要记录经纬度?

    另外, APP 用户需要给自己的定位起名字
    比如:
    我在"人民大会堂的女厕所"
    等于我又要维护一套地点名的表咯...

    =.=
    ETiV
        11
    ETiV  
       2015-06-17 10:04:21 +08:00
    经纬度要存的,要不没法算距离.

    单纯的"附近的人", 不要显示在地图上. 只有"好友"之间或者对方允许才应该显示.

    用户给自己的所处位置起名, 第三方SDK也不支持呀( 或者有支持的么? ). 肯定要自己维护的.
    randyzhao
        12
    randyzhao  
    OP
       2015-06-17 14:00:34 +08:00
    @ETiV 所以 先根据 GeoHash 拿出块数据
    再用 x y 去计算距离再排序, 这意思吧

    第三方SDK也不支持呀( 或者有支持的么? )
    看了下高德...还真的可以实现.
    bigfei
        13
    bigfei  
       2015-06-17 14:29:56 +08:00
    randyzhao
        14
    randyzhao  
    OP
       2015-06-17 14:42:28 +08:00
    @bigfei 收下我的膝盖.
    ETiV
        15
    ETiV  
       2015-06-17 18:20:02 +08:00
    对, geohash 是为了先筛选可能近的人.
    你多搜搜geohash资料, 精确到8位还是9位长度的geohash字符串, 相隔7米的样子~

    手机上大多数的 SDK 只能给你经纬度, geohash 都要你自己, 放服务器上来算.
    randyzhao
        16
    randyzhao  
    OP
       2015-06-18 01:57:52 +08:00
    @ETiV 恩 我看了 算 GeoHash 轮子很多.
    再次感谢~
    Mutoo
        17
    Mutoo  
       2015-06-18 09:35:06 +08:00
    噗这页 http 一直打不开,挂 https 一看,原来是「轮子」
    randyzhao
        18
    randyzhao  
    OP
       2015-06-18 11:07:38 +08:00
    @Mutoo 23333 居然被过滤
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1035 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 20:41 · PVG 04:41 · LAX 12:41 · JFK 15:41
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.