如何解决SQL:选择最长且唯一的路线
我有一个包含路线 GPS 轨迹的表格,我只想选择唯一和最长的路线。
表格看起来像:
route_id gpstrace
route1 [[long,lat],[long,... ]
route2 [[long,... ]
route3 [[long,... ]
route19 [[long,... ]
在 route_id
列中,route1
、route2
和 route3
可能相同,但 route1
比 route2
稍长,并且route3
。所以我想返回 route1
。
同样,我想从表中返回所有唯一和最长的路线。
我试过了:
https://gis.stackexchange.com/questions/96037/sql-geometry-query-similar-to-select-by-centroid
解决方法
您可以在 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 举报,一经查实,本站将立刻删除。