判断点是否落在面中的Oracle存储过程描述
1.背景 公司在乐亭的项目中,工程同事提出了需要在对接车辆GPS上报点时,能够实时判断该点是否落在乐亭行政区内。如果不在,将其报
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点串。然后选择多个点进行测试。
重复测试多个样本,均符合要求。
本文永久更新链接地址:

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

This article explores optimizing MySQL memory usage in Docker. It discusses monitoring techniques (Docker stats, Performance Schema, external tools) and configuration strategies. These include Docker memory limits, swapping, and cgroups, alongside

This article addresses MySQL's "unable to open shared library" error. The issue stems from MySQL's inability to locate necessary shared libraries (.so/.dll files). Solutions involve verifying library installation via the system's package m

The article discusses using MySQL's ALTER TABLE statement to modify tables, including adding/dropping columns, renaming tables/columns, and changing column data types.

This article compares installing MySQL on Linux directly versus using Podman containers, with/without phpMyAdmin. It details installation steps for each method, emphasizing Podman's advantages in isolation, portability, and reproducibility, but also

This article provides a comprehensive overview of SQLite, a self-contained, serverless relational database. It details SQLite's advantages (simplicity, portability, ease of use) and disadvantages (concurrency limitations, scalability challenges). C

This guide demonstrates installing and managing multiple MySQL versions on macOS using Homebrew. It emphasizes using Homebrew to isolate installations, preventing conflicts. The article details installation, starting/stopping services, and best pra

Article discusses configuring SSL/TLS encryption for MySQL, including certificate generation and verification. Main issue is using self-signed certificates' security implications.[Character count: 159]

Article discusses popular MySQL GUI tools like MySQL Workbench and phpMyAdmin, comparing their features and suitability for beginners and advanced users.[159 characters]
