【问题标题】:SQL : Select longest and unique routeSQL:选择最长且唯一的路线
【发布时间】:2021-04-10 14:18:15
【问题描述】:

我有一个包含路线 GPS 轨迹的表格,我只想选择唯一且最长的路线。

表格如下:

route_id        gpstrace
route1      [[long,lat], [long,lat],... ]
route2      [[long,lat], [long,lat],... ]
route3      [[long,lat], [long,lat],... ]
route19     [[long,lat], [long,lat],... ]

route_id 列中,route1route2route3 可能相同,但 route1route2route3 长一点。所以我想返回route1。 同样,我想从表中返回所有唯一且最长的路线。

我试过了:

https://gis.stackexchange.com/questions/182246/sql-server-select-all-polygons-nested-within-a-larger-polygon

https://gis.stackexchange.com/questions/96037/sql-geometry-query-similar-to-select-by-centroid

谁能帮我查询SQL?

【问题讨论】:

    标签: sql sqlgeometry


    【解决方案1】:

    您可以在 MySQL 中使用递归 CTE:

    with recursive cte(r, d, c, gpstrace) as (
        select t.route_id, 6371*acos(cos(radians(json_extract(t.gpstrace, '$[0][0]')))
         * cos(radians(json_extract(t.gpstrace, '$[1][0]')))
         * cos(radians(json_extract(t.gpstrace, '$[0][1]') - json_extract(t.gpstrace, '$[1][1]')))
         + sin(radians(json_extract(t.gpstrace, '$[0][0]')))
         * sin(radians(json_extract(t.gpstrace, '$[1][0]')))), 1, t.gpstrace from testtable t
        union all
        select c.r, c.d + 6371*acos(cos(radians(json_extract(c.gpstrace, concat('$[', c.c, '][0]'))))
          * cos(radians(json_extract(c.gpstrace, concat('$[', c.c+1, '][0]'))))
          * cos(radians(json_extract(c.gpstrace, concat('$[', c.c, '][1]')) - json_extract(c.gpstrace, concat('$[', c.c+1, '][1]'))))
          + sin(radians(json_extract(c.gpstrace, concat('$[', c.c, '][0]'))))
          * sin(radians(json_extract(c.gpstrace, concat('$[', c.c+1, '][0]'))))), c.c + 1, c.gpstrace
        from cte c
        where c.c + 1 < json_length(c.gpstrace) 
    ),
    results(r, d) as (select r, d from cte where c + 1 >= json_length(gpstrace))
    select * from results r where r.d = (select max(r1.d) from results r1);
    

    demo

    【讨论】:

      猜你喜欢
      • 2019-11-19
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-25
      • 2013-02-14
      • 1970-01-01
      相关资源
      最近更新 更多