【问题标题】:Check whether a geographic-GPS point on a map (lat,lon) is inside a defined rectangle检查地图上的地理 GPS 点(纬度、经度)是否在定义的矩形内
【发布时间】:2014-04-15 13:26:17
【问题描述】:

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

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

X:纬度

Y:经度

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

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

该点将成为用户的当前位置 (当前位置来自手机的GPS输出)

有具体的数学公式吗? 如何判断某个点是否属于矩形?

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

【问题讨论】:

  • 该矩形有什么限制吗?它的边总是平行于轴吗?
  • 嗨,不,边并不总是平行于轴。所以我在这里遇到了问题。
  • 所以,我需要一些更通用的东西,也许是一个有 4 个节点的多边形。

标签: c# coordinates point rectangles


【解决方案1】:

据此

http://msdn.microsoft.com/en-us/library/system.device.location.geocoordinate(v=vs.110).aspx

经度范围可以从-180.0180.0;所以你必须准确 -180/180 因为-180 logitude 等于 180 1;想象一个矩形

  (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:不,它没有。矩形的边应该是纬度和经度
【解决方案2】:

您可以为这 4 个点创建Rectangle 结构,然后使用Rectangle.Contains Method (Point) 检查该点是否存在于矩形中。

对于浮点使用RectangleF 及其RectangleF.Contains Method (PointF)

我还建议您查看SharpMap,这是一个用于 GIS 应用程序的开源项目。它有 Point、Line、Polygon、BoundingBox 等类,它们都有 Intersect、GetBoundingBox、ToWKT 等方法。它们对于空间项目非常有用。

【讨论】:

  • 这个函数是否适用于地理坐标?因为,我有双值。
  • 基本相同,但我推荐RectangleF。根据使用的坐标系,数字的浮点部分可能很关键。
  • 我用的是Unity3d,所以我想我得在地图上画一个矩形,然后用Contains方法
  • @programmer,为此使用RectangaleF
  • @programmer,你不必绘制矩形,你可以在内存中创建它然后检查包含。
【解决方案3】:

由于矩形的边不平行于 X 和 Y 轴, 我认为最好寻找 PIP(多边形中的点)问题, 比矩形更通用的东西。

所以,我在下面的帖子中测试了代码,它似乎可以工作 对于具有地理 WGS84 坐标的多边形。

https://stackoverflow.com/a/7739297/805660

感谢您之前的回答

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2019-09-26
    • 2011-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-08
    相关资源
    最近更新 更多