Lilacs
V2EX  ›  问与答

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

  •  
  •   Lilacs · May 28, 2015 · 3847 views
    This topic created in 4085 days ago, the information mentioned may be changed or developed.

    请教了各位了。。。

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

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

    但是如果小范围精度要求不高的话,甚至没必要转换回来,直接火星坐标算就好了。
    wesley
        13
    wesley  
       May 28, 2015
    google 球面2点记录公式
    wesley
        14
    wesley  
       May 28, 2015
    球面2点距离公式
    Lilacs
        15
    Lilacs  
    OP
       May 28, 2015
    Lilacs
        16
    Lilacs  
    OP
       May 29, 2015
    到最后我是这样算的,在坐标中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
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   957 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:47 · PVG 03:47 · LAX 12:47 · JFK 15:47
    ♥ Do have faith in what you're doing.