gps - 给定所有纬度/经度坐标,如何确定点是否在矩形内?

标签 gps latitude-longitude rectangles

如果给出矩形所有 4 个角的 x/y 坐标,然后给出另一个 x/y,如果左上角为 0,0,则很容易确定该点是否在矩形内。

但是如果坐标是纬度/经度,它们可以是负数(请参阅附件)怎么办?是否有适用于这种情况的公式?

enter image description here

最佳答案

在数学上,您可以使用不等式来确定这一点。

编辑:在做这个例子时,我注意到你把坐标放在相反的格式 (y,x) 而不是 (x,y)。在我的示例中,我使用 (x,y) 格式,所以我只是颠倒顺序以便于解释。

假设 A = (-130,10) B = (-100,20) C = (-125,-5) D = (-100,5)

你从你的矩形边缘建立一个不等式:

if( (x,y) < AB && (x,y) > AC && (x,y) > CD && (x,y) < BD) then
    (x,y) belongs to rectangle ABCD
end if

如果所有不等式都为真,那么你的点属于矩形


具体例子:

AB代表线段但可以用公式表示:y = ax + b

确定a(公式的斜率,不是A点)你得到的差值

(Ay - By) / (Ax - Bx) 

Ay 表示点 A 的 Y 分量,在这种情况下为 10

这个公式给了我们

(10 - 20) / (-130 - -100) = -10 / -30 = 1/3

现在我们有

y = x/3 + b

我们现在确定 b。我们现在 A 点和 B 点都属于该公式。所以我们用它们中的任何一个来替换公式中的 x,y 值。让我们来看看 B 点:

20 = -100/3 + b

我们隔离 b 给我们:

b = -100 / 60 = -10/6

我们现在

y = x/3 - (6/10)

所以如果我们想确定点 Z (10, 15) 是否属于你的 retangle,你首先检查是否

y > x/3 - (10/6)

然后在 Z(10, 15) 的情况下:

15 > 10/3 - (10/6)

15 > 10/6

15 > 1.66 is true

因此这条边满足条件。您需要为每条边采用相同的逻辑。

请注意,要确定您使用的是 > 还是 <,您需要判断在某个 x 值处,我们的点是否具有比我们的矩形边缘更大或更小的 y 值。

如果你想让一个点严格在矩形内,你可以使用<和>; <= 和 >= 如果矩形边缘上的点也属于矩形。您决定。

我希望我的解释是清楚的。如果有些地方不清楚,请随时询问。

关于gps - 给定所有纬度/经度坐标,如何确定点是否在矩形内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13772690/

相关文章:

ios - 固定标记位置,移动谷歌地图并获取经纬度

ios - Google Maps SDK iOS 使用经度和纬度获取首都的简单方法

python - 使用 Lat-Lon 和时间序列 Pandas 进行操作

Java Rect.intersects() 有时不工作

ios - 需要有关使用核心位置计算距离的帮助

安卓 : Remove LocationListener

安卓谷歌播放服务 : Best practices to make location request

java - 如何在java中测试多个交叉点?

java - 如何在LWJGL中绕其中心旋转矩形?

java - 使用纬度/经度计算从点 A 到线段的距离