判断点是否落在面中的Oracle存储过程描述

简介: 文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/。 1.背景 公司在乐亭的项目中,工程同事提出了需要在对接车辆GPS上报点时,能够实时判断该点是否落在乐亭行政区内。

文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处: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点串。然后选择多个点进行测试。

 

重复测试多个样本,均符合要求。

 

                                                                      -----欢迎转载,但保留版权,请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/

                                                                           如果您觉得本文确实帮助了您,可以微信扫一扫,进行小额的打赏和鼓励,谢谢 ^_^

                                      

 

目录
相关文章
|
3月前
|
存储 Oracle 关系型数据库
Oracle存储过程插入临时表优化与慢查询解决方法
优化是一个循序渐进的过程,就像雕刻一座雕像,需要不断地打磨和细化。所以,耐心一点,一步步试验这些方法,最终你将看到那个让你的临时表插入操作如同行云流水、快如闪电的美丽时刻。
193 14
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(上)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
10月前
|
存储 Oracle 关系型数据库
oracle服务器存储过程中调用http
通过配置权限、创建和调用存储过程,您可以在Oracle数据库中使用UTL_HTTP包发起HTTP请求。这使得Oracle存储过程可以与外部HTTP服务进行交互,从而实现更复杂的数据处理和集成。在实际应用中,根据具体需求调整请求类型和错误处理逻辑,以确保系统的稳定性和可靠性。
467 0
|
SQL 存储 Oracle
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法(下)
一篇文章带你学会 Oracle 存储过程的基本介绍和高阶用法
|
存储 SQL Oracle
oracle 存储过程导出sql语句 导出为文件
oracle 存储过程导出sql语句 导出为文件
283 0
|
存储 SQL Oracle
Oracle存储过程与自定义函数的调用:异同与实战场景
【4月更文挑战第19天】Oracle的存储过程与自定义函数各有特色,存储过程用于封装复杂SQL操作,常在批量处理和数据维护中使用,通过CALL或EXECUTE调用;而自定义函数则用于简单计算和查询,返回单一值,可直接在SQL语句中调用。了解两者异同,如返回值方式、调用方式和应用场景,能提升数据库管理效率。实战场景包括:使用存储过程定期清理过期数据,用自定义函数在查询中动态计算字段值。
|
存储 SQL Oracle
Oracle存储过程:数据王国的魔法师
【4月更文挑战第19天】Oracle存储过程是封装复杂SQL操作的魔法工具,存储在数据库中以便重复调用。它们提供高效执行和安全,类似于预编译的程序。创建存储过程涉及定义名称和参数,如示例所示,创建一个根据员工ID获取姓名和薪资的`get_employee_info`过程。调用存储过程可提高代码可读性和性能,使数据库管理更为便捷。
|
10天前
|
Oracle 关系型数据库 Linux
【赵渝强老师】Oracle数据库配置助手:DBCA
Oracle数据库配置助手(DBCA)是用于创建和配置Oracle数据库的工具,支持图形界面和静默执行模式。本文介绍了使用DBCA在Linux环境下创建数据库的完整步骤,包括选择数据库操作类型、配置存储与网络选项、设置管理密码等,并提供了界面截图与视频讲解,帮助用户快速掌握数据库创建流程。
176 93
|
2月前
|
存储 Oracle 关系型数据库
服务器数据恢复—光纤存储上oracle数据库数据恢复案例
一台光纤服务器存储上有16块FC硬盘,上层部署了Oracle数据库。服务器存储前面板2个硬盘指示灯显示异常,存储映射到linux操作系统上的卷挂载不上,业务中断。 通过storage manager查看存储状态,发现逻辑卷状态失败。再查看物理磁盘状态,发现其中一块盘报告“警告”,硬盘指示灯显示异常的2块盘报告“失败”。 将当前存储的完整日志状态备份下来,解析备份出来的存储日志并获得了关于逻辑卷结构的部分信息。
|
22天前
|
SQL Oracle 关系型数据库
Oracle数据库创建表空间和索引的SQL语法示例
以上SQL语法提供了一种标准方式去组织Oracle数据库内部结构,并且通过合理使用可以显著改善查询速度及整体性能。需要注意,在实际应用过程当中应该根据具体业务需求、系统资源状况以及预期目标去合理规划并调整参数设置以达到最佳效果。
81 8

推荐镜像

更多