判断点是否落在面中的Oracle存储过程描述
来源:互联网 发布:mysql约束 编辑:程序博客网 时间:2024/05/16 05:31
文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。
1.背景
公司在乐亭的项目中,工程同事提出了需要在对接车辆GPS上报点时,能够实时判断该点是否落在乐亭行政区内。如果不在,将其报警。
处理思路分为了两种,一种是前端实时从数据库中拉取存入的GPS点,然后判断点是否落在区域面中。第二种,就是在与GPS厂商实时对接GPS数据,将GPS数据存入到我方数据库中对应表时,就进行点是否落在区域面中的判断,如果不是,则在对应表的判断点面关系字段中将其标注。
考虑到效率以及记录的保存,最后选择第二种方案,即在数据库层面进行操作,并保存判断记录方式。
2.判断点面关系的算法
2.1 算法选择
判断点面关系的算法一般有如下几种:
a差乘判别法(只针对凸多边形)
b.面积判别法(只针对凸多边形)
c.角度和判别法等(任意多边形均可)
为了以后存储过程的通用性,选择使用角度和判别法更符合需求。
2.2 角度和判别方法的原理
原理:令P={p1,p2,…,pn,p1}是一个顶点为pi(xi,yi), i=1,2,…,n的封闭多角形,pt是一个测试点。PtPi为连接pt和pi的向量,αi表示向量PtPi到PtPi+1的夹角。
若Σαi = 0 Pt在P的外面;
若Σαi = ±2π Pt在P里面。
3.用存储过程实现该算法
3.1 单个角度获取(夹角αi算法)
3.2 角度总和判别
3.算法优化
以上角度和算法是相对耗时的,如果我们在判断点面关系前先用最简单的方式做一次过滤判断,让只有满足要求的点进入到角度和算法的判断中,会对效率提示有更大的帮助。
这里,可以直接在获取到点时使用范围的四角坐标对该点进行过滤。
4.算法测试
因为GPS存在一定的误差范围,特将乐亭的边界进行了一定的外延。然后将外延的范围变成ring格式的json点串。然后选择多个点进行测试。
重复测试多个样本,均符合要求。
- 判断点是否落在面中的Oracle存储过程描述
- 判断一个点是否落在多边形内
- 判断一个点是否落在多边形内
- 判断一个点是否落在多边形内
- 分享自己推导的判断点是否落在三角形中的算法
- 要判断点是否落在多边形的关系
- Mysql中判断一个点是否落在多边形内。
- GIS-判断点是否落在指点的多边形区域内
- 判断点是否落在多边形内部的算法
- MySQL中判断一个点是否落在多边形内
- Qt 判断一个点是否落在三角形内(算法)
- oracle判断存储过程是否执行完成
- 如何判断一个指定的经纬度点是否落在一个多边形区域内?
- 如何判断一个指定的经纬度点是否落在一个多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形内
- 如何判断一个指定的经纬度点是否落在一个多边形内
- Matlab如何判断一个点是否落在一个不规则的封闭区域中
- 在Android里如何判断一个指定的经纬度点是否落在一个多边形区域内
- 组合数学+高精度 BZOJ2729 [HNOI2012]排队
- 组合数学+gcd BZOJ3505 [Cqoi2014]数三角形
- 组合数学 BZOJ2467 [中山市选2010]生成树
- [置顶]大坑【持续更新......】
- Android Gradle Build Error:Some file crunching failed, see logs for details解决办法
- 判断点是否落在面中的Oracle存储过程描述
- Spark Streaming 运行时Java VM内存不足
- 使用fastText进行文本分类
- 文章阅读(入门ML、DL;BAT经验)
- Android内存优化(四)解析Memory Monitor、Allocation Tracker和Heap Dump
- Oracle_spatial的几何处理函数
- js与oc交互以及cookie设置 UIWebView与WKWebview兼容
- 用Oracle的函数,判断点是否在多边形内
- Java精选笔记_网络编程