大数跨境
0
0

关于地理围栏算法的一点心得

关于地理围栏算法的一点心得 网信科技
2019-01-25
1
导读:作者:网信科技智慧旅游产品部——王东风

作者:网信科技智慧旅游产品部——王东风


前不久,我们智慧旅游产品部开发了一款产品《运维管理信息系统》,在此软件的演示会议上,被老总独到的眼光发现了一些问题,并提出了一些升级改进的宝贵意见:

1. 片区全是圆形区域,做不到真正片区不规则化的全覆盖。

2. 在片区中添加一些维护部件,却需要手动选择片区,无法自动识别。


针对以上2个问题,要解决的话,就不可避免地要涉及到地理围栏的技术范畴,经过一番的查询资料并研究,终于得以解决。

原来的解决方案:

 


现在的解决方案

 


片区自动识别,仅仅只需拖动目标点,片区自动切换

 

 

效果图已放出,现在说说这背后的技术实现核心:

简单来说就是需要判断一个点是否在区域内的问题,如果这个区域是圆形的话,仅仅需要比较目标点与圆心的地理距离与圆的半径大小,小在内,大则在外。


如果这个区域是不规则的多边形呢,怎么判断一个点在区域内?


如以下一些典型的不规则区域:



现在,我们采用目前流行的算法:射线法

 


从目标点延横坐标向一个方向引出一条直线,这条直线会与这个多边形的一些边进行相交,如果所有的相交点为奇数量,则判断点在多边形区域内,反之为偶数的话,则在区域外。


算法解析:

1. 遍历此多边形的所有边。

2. 确定当前边的2个端点的纬度点一个在目标点纬度的上或上边,一个在下边。

3. 确定交叉点在左侧(需要用到直线斜率的变形公式计算交叉点的值)。


那么,同时满足以上3个条件,则判断这个交叉点有效。累加全部交叉点数量,若是奇数则为在区域内,反之在区域外部。


程序实现:



以上是核心代码的实现,但是具体地理围栏处理要涉及的也许非常多的区域,且每个区域若边很多的情况下,就要考虑另一种算法:R树,关于这个算法的实现不在此文讨论范围,其实它的核心思想就是计算每个区域的最小矩形,判断每个矩形的话就简单多了,这一步称之为粗筛,直白地说就是先确定大范围。



IT综合服务

智慧旅游解决方案专家




【声明】内容源于网络
0
0
网信科技
苏州网信信息科技股份有限公司成立于2007年,公司总部设立在江苏省苏州市,目前拥有近百名员工。公司主要从事智慧城市规划设计与实施,包括智慧城市、数字企业、信息安全、信创服务、大数据、云计算、元宇宙等业务方向。
内容 403
粉丝 0
网信科技 苏州网信信息科技股份有限公司成立于2007年,公司总部设立在江苏省苏州市,目前拥有近百名员工。公司主要从事智慧城市规划设计与实施,包括智慧城市、数字企业、信息安全、信创服务、大数据、云计算、元宇宙等业务方向。
总阅读297
粉丝0
内容403