检查地图上的一个地理GPS点(纬度,经度)是否位于一个定义的矩形内部

3

我在地图上定义了一个带有4个节点的矩形。

每个节点都是一个(X,Y) 坐标对。

X:纬度

Y:经度

X,Y : 地理坐标 (双精度值)

我想检查一个 (X,Y) 是否在矩形内。

该点将是用户的当前位置 (当前位置来自移动设备的GPS输出)。

是否有特定的数学公式?如何确定特定点是否属于一个矩形?

因为我想在C#中实现它。


该矩形是否有任何限制?它的边是否始终平行于坐标轴? - Dmitry
嗨,不,边并不总是平行于轴。所以我这里遇到了一个问题。 - programmer
所以,我需要更通用的东西,也许适用于具有4个节点的多边形。 - programmer
3个回答

7

根据这个链接

经度可以在-180.0180.0范围内变动,因此你需要非常准确地使用-180/180,因为-180经度等同于180,就像一个矩形一样。

  (15, 178, 25, -178)

(20, 179)应该在矩形内,而(20, 177)则不应该在内;这就是为什么RectangleF.Contains()在某些情况下可能是不正确的原因。

// Just to show the idea with 180 latitude;
// First 4 parameters could be crammed into RectangleF
// And last 2 parameters into PointF
public static Boolean WithinRectangle(Double latitudeNorth,
                                      Double longitudeWest,  
                                      Double latitudeSouth,
                                      Double longitudeEast,
                                      Double latitude,
                                      Double longitude) {
  if (latitude > latitudeNorth)
    return false;
  else if (latitude < latitudeSouth)
    return false;

  if (longitudeEast >= longitudeWest)
    return ((longitude >= longitudeWest) && (longitude <= longitudeEast))
  else
    return (longitude >= longitudeWest) || (longitude <= longitudeEast);

  return false;
}

你的代码能处理那些边不与X轴和Y轴平行的矩形吗? - programmer
@程序员:不,它不是。矩形的边应该是纬度和经度。 - Dmitry Bychenko

4

这个函数能处理地理坐标吗?因为我有双精度数值。 - programmer
基本上是一样的,但我建议使用RectangleF。根据所使用的坐标系,浮点数部分可能很关键。 - drew_w
1
@程序员,为此使用RectangaleF - Habib
1
@程序员,你不必绘制矩形,只需在内存中创建它,然后检查是否包含即可。 - Habib
我使用了UnityEngine命名空间的Rect方法,而不是.net RectangleF方法。我注意到,当边不与X和Y轴平行时,Contains方法不会返回正确的输出(真或假)。即使点不在矩形内,它也会返回true。那么我该怎么办?我应该使用一个具有4个节点的多边形方法吗? - programmer
显示剩余2条评论

1

由于矩形的边不平行于X和Y轴,因此我认为最好寻找PIP(多边形内部点)问题,这比矩形更加通用。

因此,我测试了以下帖子中的代码,似乎适用于具有WGS84地理坐标的多边形。

https://dev59.com/tHNA5IYBdhLWcg3wh-YC#7739297

感谢您之前的回答。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接