PostGIS轨迹分析——AIS数据删除异常点

本文介绍了如何在PostGIS中进行轨迹分析,特别是针对AIS数据中的异常点处理。通过计算点位间的大圆距离,设置阈值判断异常点,并删除异常点及相邻点,最终利用平滑函数优化轨迹线。主要步骤包括计算两点间大圆距离,识别异常点以及应用平滑算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

点位连成线

select st_makeline(t.the_geom)
from (select the_geom
      from points
      where name = 'xxx'
        and point_time > '2023-09-01'
        and point_time < '2023-09-03'
      order by point_time ) as t;

异常点

红框区域明显断开了,原因是有一个“飞点”

解决思路

异常点一般距离前一个点的距离会大于某一个阈值(比如50000米),当然这个阈值视情况而定,以下是解决此问题的步骤:

  1. 计算距离下一个点的大圆距离
  2. 当前点与下一个点的距离,如果距离大于阈值,则认为下一个点是异常点
  3. 找出多个异常点,这两个异常点中间的点都可以认为是异常点,都要移除

1.计算距离下一个点的大圆距离

select id,
       the_geom,
       point_time,
       ---计算距离下一个点的大圆距离,单位:米
       st_distance(the_geom::geography, lead(the_geom) over (order by point_time)::geography) as d
from points
where name = 'xxx'
  and point_time > '2023-09-01'
  and point_time < '2023-09-03'
order by point_time;

在这里插入图片描述

2.当前点与下一个点的距离,如果距离大于阈值,则认为下一个点是异常点

with agg as (select id,
                    the_geom,
                    point_time,
                    ---计算距离下一个点的大圆距离,单位:米
                    st_distance(the_geom::geography, lead(the_geom) over (order by point_time)::geography) as d
             from points
             where name = 'xxx'
               and point_time> '2023-09-01'
               and point_time< '2023-09-03'
             order by point_time),
     ---超过阈值的无效点
     invalid as (select id,
                        the_geom,
                        point_time,
                        d,
                        row_number() over (order by point_time) as number
                 from agg
                 ---50000为阈值,单位:米
                 where d > 50000
                 order by point_time)
select *
from invalid;

在这里插入图片描述

3.找出多个异常点,这两个异常点中间的点都可以认为是异常点,都要移除

with agg as (select id,
                    the_geom,
                    point_time,
                    ---计算距离下一个点的大圆距离,单位:米
                    st_distance(the_geom::geography, lead(the_geom) over (order by point_time)::geography) as d
             from points
             where name = 'xxx'
               and point_time> '2023-09-01'
               and point_time< '2023-09-03'
             order by point_time),
     ---超过阈值的无效点
     invalid as (select id,
                        the_geom,
                        point_time,
                        d,
                        row_number() over (order by point_time) as number
                 from agg
                 ---50000为阈值,单位:米
                 where d > 50000
                 order by point_time),
     ---过滤无效值后的点
     valid as (select id,
                      the_geom,
                      point_time,
                      d
               from agg
               ---条件invalid.number = 1和invalid.number = 2代表一组异常点,根据实际情况添加条件
               ---这里添加了三组异常点,当然多添加几个条件并不会影响结果
               where not (
                           point_time > (select point_time from invalid where invalid.number = 1 limit 1)
                       and point_time <= (select point_time from invalid where invalid.number = 2 limit 1)
                   )
                  or not (
                           point_time > (select point_time from invalid where invalid.number = 3 limit 1)
                       and point_time <= (select point_time from invalid where invalid.number = 4 limit 1)
                   )
                  or not (
                           point_time > (select point_time from invalid where invalid.number = 5 limit 1)
                       and point_time <= (select point_time from invalid where invalid.number = 6 limit 1)
                   )
               order by point_time)
select st_makeline(valid.the_geom)
from valid;

在这里插入图片描述

最后可以使用平滑函数来平滑一下轨迹线

...
select st_simplify(st_makeline(valid.the_geom),0.002)
from valid;

在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

llc的足迹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值