检查给定区域/坐标内的点的算法

Posted

技术标签:

【中文标题】检查给定区域/坐标内的点的算法【英文标题】:algorithm to check point inside a given area / coordinates 【发布时间】:2019-06-24 11:11:58 【问题描述】:

我在这里需要帮助。我仍然不知道如何检查一个点是否在某个位置(由某些坐标给出的位置)内。例如,我有一个区域,给定的纬度和经度像这张图片

(https://i.stack.imgur.com/zR9VX.png)(被线覆盖的那个)

和它里面的一个点(标志)。检查该点是在区域内还是区域外的最快方法是什么?

请帮帮我

【问题讨论】:

developers.google.com/maps/documentation/javascript/examples/… en.wikipedia.org/wiki/Point_in_polygon github.com/alexpechkarev/geometry-library 总体思路是计算与来自您的点的任何半线相交的线段数。如果交叉点的数量是奇数,那么您就在多边形内。如果是偶数,那么你就在外面。 感谢大家的回复。 @Quasimodo'sclone 推荐的图书馆提供我需要的东西 【参考方案1】:

我们从纬度线和北极之间的地球面积公式开始。

A = 2*pi*R*h

其中 R 是地球的半径,h 是从包含纬线的平面到极点的垂直距离。我们可以使用三角函数计算 h

h = R*(1-sin(lat))

因此一条纬线以北的面积是

A = 2*pi*R^2(1-sin(lat))

两条纬线之间的面积是一个纬度以北的面积与另一纬度以北的面积之差:

A = |2*pi*R^2(1-sin(lat2)) - 2*pi*R^2(1-sin(lat1))|
= 2*pi*R^2 |sin(lat1) - sin(lat2)|

经纬矩形的面积与经度差成正比。我刚刚计算的面积是经线之间相差 360 度的面积。因此我们寻找的区域是

A = 2*pi*R^2 |sin(lat1)-sin(lat2)| |lon1-lon2|/360
= (pi/180)R^2 |sin(lat1)-sin(lat2)| |lon1-lon2|

【讨论】:

作者不求面积计算 geeksforgeeks.org/… 我认为这个链接应该足够了。

以上是关于检查给定区域/坐标内的点的算法的主要内容,如果未能解决你的问题,请参考以下文章

获取特定区域内的坐标

PKU 1379 Run Away(模拟退火算法)

找到最小矩形数量的算法

图像旋转算法与实现

计算机图形学——区域填充算法

给定距离内的点分组算法