V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Lilacs
V2EX  ›  问与答

判断一个(火星坐标)坐标是否在另一个坐标 x 米范围内

  •  
  •   Lilacs · 2015-05-28 11:23:29 +08:00 · 3325 次点击
    这是一个创建于 3499 天前的主题,其中的信息可能已经有所发展或是发生改变。

    请教了各位了。。。

    16 条回复    2015-05-29 14:50:27 +08:00
    mhycy
        1
    mhycy  
       2015-05-28 11:27:36 +08:00
    火星坐标是啥?
    另外这个需求确定不是直角三角求斜边长?
    mhycy
        2
    mhycy  
       2015-05-28 11:29:47 +08:00
    补充:
    如果是加偏坐标要求距离的话, 因为加偏是非线性的,所以在没有转换成实际坐标之前, 无法运算
    Lilacs
        3
    Lilacs  
    OP
       2015-05-28 11:30:53 +08:00
    @mhycy 火星坐标就是咱们国家使用的坐标系,从腾讯地图中取出的点给我出的坐标就是这个。
    mhycy
        4
    mhycy  
       2015-05-28 11:33:35 +08:00
    @Lilacs
    然后就这个坐标系在纠偏前还能运算么...囧
    记忆中那纠偏函数的源代码是国家顶级机密来的吧
    Lilacs
        5
    Lilacs  
    OP
       2015-05-28 11:36:50 +08:00
    @mhycy
    我在github中找到了这个https://github.com/hiwanz/wgs2mars.js,转换后的坐标在腾讯地图中显示正常。
    还真是,那么连个加偏坐标可以判断出来吗?
    mhycy
        6
    mhycy  
       2015-05-28 11:48:55 +08:00
    @Lilacs 记忆中只有用真实的GPS数据去拟合加偏函数..
    这货到底是不是真实的算法这个就不清楚了,有个算法名wgtochina_lb
    有坐标只要纠偏就好了...
    fangjinmin
        7
    fangjinmin  
       2015-05-28 12:33:15 +08:00
    假设是2维坐标的话,基点坐标为(a1,b1),目标坐标为(a2,b2),判断的条件为

    (|a1-a2|绝对值的平方+|b1-b2|的绝对值的平方)再开平方< X 米
    mhycy
        8
    mhycy  
       2015-05-28 12:45:32 +08:00
    @fangjinmin 应该需要考虑,这是一个球面坐标...
    choury
        9
    choury  
       2015-05-28 12:58:45 +08:00 via Android
    @fangjinmin 不能这么算吧,这个加偏函数不是线性的,我觉得火星坐标是不能直接计算的
    processzzp
        10
    processzzp  
       2015-05-28 13:06:56 +08:00 via Android
    @mhycy 这东西现在算不上机密了,几年前就有人(具体是谁忘了,当时互联网还不怎么发达)用搜狗还是高德的API把实际坐标--火星坐标的对应关系一点点爬出来了。
    吐槽:这玩意鸟用没有,就增加了一堆麻烦,真想打兔子的机构早就研究得一清二楚了,反而害苦了一群开发者,不知道浪费了多少人力
    Lilacs
        11
    Lilacs  
    OP
       2015-05-28 13:14:55 +08:00
    换算一下思路,就是两个坐标点的距离,结果换算为米。在火星坐标系内。
    GhostFlying
        12
    GhostFlying  
       2015-05-28 13:34:24 +08:00 via Android
    看你精度要求,转换回 wgs 84 目前只看到二分逼近的做法,10次一般能把误差控制在 0.5 米左右,如果更高,只能增加迭代次数。

    但是如果小范围精度要求不高的话,甚至没必要转换回来,直接火星坐标算就好了。
    wesley
        13
    wesley  
       2015-05-28 13:41:53 +08:00
    google 球面2点记录公式
    wesley
        14
    wesley  
       2015-05-28 13:42:10 +08:00
    球面2点距离公式
    Lilacs
        15
    Lilacs  
    OP
       2015-05-28 14:14:54 +08:00
    Lilacs
        16
    Lilacs  
    OP
       2015-05-29 14:50:27 +08:00
    到最后我是这样算的,在坐标中1米 = 0.00001

    public static boolean isArrive(double lat, double lng, double targetLat, double targetLng, int scope) {

    double latDistance = Math.abs(lat - targetLat);
    double lngDistance = Math.abs(lng - targetLng);

    double targetScope = scope * 0.00001;
    if(latDistance < targetScope && lngDistance < targetScope) {
    return true;
    }

    return false;
    }

    如果坐标范围过大就会有问题,但是我使用的基本都在北京。

    纬度在赤道附近0.00001 > 1米 在极点附近 基本 = 0
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2495 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 15:56 · PVG 23:56 · LAX 07:56 · JFK 10:56
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.