判断两条轨迹是否重合的思路(存储过程描述)

本文介绍了一种通过存储过程判断两条轨迹是否重合的算法,首先不考虑方向性,通过粗略判断、线外判断和垂线判断三个步骤实现。然后讨论了考虑方向性的实现方式,只需用变量记录吻合位置即可。提供了具体存储过程的代码示例。

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

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

1.背景

假设有两条轨迹,一条是预定轨迹,一条是实际轨迹,分别为L1、L2。L1由点(A1、A2、A3、...、AN)组成,L2由(B1、B2、B3、…、BM)组成。现在给出了一个容差范围,即L2上的点能与L1这条预定路线的垂直容差范围Range,求L2上满足要求的实际点。

这个需求我们实际可以分为两种情况来考虑,一种是此需求单纯的仅仅是要求得到与L1能有一定匹配度的点。但是,如果我们深入分析,会发现L1作为一条线,其本身是有方向性的,如果我们还将线的方向性考虑进来,即L2的点不仅要在与L1的Range范围内,还要此时的点的前进趋势与L1是相同的。

当然,我们通过AGS或者GeoServer之类的NA服务是可以实现最邻路径生成的方法的,这个方法我们留在我的从底层谈WebGIS的设计实现系列中跟大家一起探讨。这里我要跟大家讨论一种效率更高的方法,直接通过数据库的存储过程来实现。

我在上面提到的两种情况(不考虑方向性和考虑方向性),这两者是层层递进的。我们首先考虑如何通过不考虑方向性来解决。然后再进一步探讨如果有方向性,我们该用什么思路去实现。

2.不考虑方向性的算法实现

2.1进一步简化问题

这里,首先我们将问题进一步简化,即如何判断一个点是否落在两个点组成的线的容差范围内,距离描述为:a点、b点两个计划点,c点为实际点,现在要判断c点是否在a点和b点连接成的直线的容差范围内。

2.2解决简化问题的思路

我将解决步骤分为三步。分别为:1.粗略判断;2.判断是否落在线外;3.垂线判断。

详细过程便是:

A.粗略判断,c点和a点以及b点的连线是否在容差范围内,即ac或者bc是否在容差范围内。如果是,返回true。否则,进一步判断。

B.判断c点是否在ab直线的外侧,即c点到ab的垂足在ab的延长线上(如果是这种情况,只给一个容差范围是很难确定是否符合标准的,需要多个与容差有关的参数,比如水平容差和垂直容差等,为了简化,此种情况下,直接返回false)。如果垂足在ab上,则进行下一步。

C.算出c点到ab的垂线距离d。判断d是否在容差范围内,如果在,返回true;否则,返回false。

2.3实现判断点是否在线范围内(使用存储过程)

利用海伦公式求点到线段的距离。

传递的参数中。x0、y0、x1、y1为预定轨迹的两个坐标(P0,P1),x2、y2为第三个坐标(实际位置S)的坐标, f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值