SQL:选择最长且唯一的路线

如何解决SQL:选择最长且唯一的路线

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

表格看起来像:

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

route_id 列中,route1route2route3 可能相同,但 route1route2 稍长,并且route3。所以我想返回 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 吗?

解决方法

您可以在 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,c.c+1,'][1]')) - json_extract(c.gpstrace,'][1]'))))
      + sin(radians(json_extract(c.gpstrace,'][0]'))))
      * sin(radians(json_extract(c.gpstrace,'][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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?