代码之家  ›  专栏  ›  技术社区  ›  Julien

sqlite->finding two closest points to two different points

  •  0
  • Julien  · 技术社区  · 14 年前

    所以我有两张桌子:

    route(#id)
    step(#id,route_id,lat,lng,sequence_order)
    

    2个GPS坐标:M1(lat1,lng1)M2(lat2,lng2)。

    所以我想找到所有距离这里1.0英里至少近一步的路线 每个 以升序排列的两个GPS坐标。

    因此,如果我找到25号路线,它在距m1 0.4英里处有一个步骤s1,在距m2 0.2英里处有一个步骤s2,那么只有当s1的序列号低于s2的序列号时,它才应该匹配。这有道理吗?

    假设我添加了一个函数来计算距离,我可以很容易地完成这个请求:

    SELECT r.id,s1.lat,s1.lng,s2.lat,s2.lng,distance(s1.lat,s1.lng,lat1,lng1) as d1,distance(s2.lat,s2.lng,lat2,lng2) as d2 FROM route r
    INNER JOIN step s1 ON r.id = s1.route_id
    INNER JOIN step s2 ON r.id = s2.route_id AND s1.sequence_order < s2.sequence_order
    WHERE d1<1.0
    AND d2<1.0 
    

    我想要的行为是只保留最接近我的目标点的坐标(s1.lat,s1.lng)和(s2.lat,s2.lng)。所以我想我可以这样做:

    ORDER BY d1
    ORDER BY d2
    GROUP BY r.id
    

    但它只是崩溃了。

    有什么想法吗?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Brian Hooper    14 年前

    你可能想要

    ORDER BY d1, d2
    

    作为你方的订货条件。到底是什么撞车?