检查地图(lat,lon)上的地理GPS点是否在定义的矩形内

时间:2014-04-15 13:26:18

标签: c# coordinates point rectangles

我在地图上使用 4个节点定义了一个矩形。

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

X:纬度

Y:经度

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

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

这一点将成为用户的当前位置 (当前位置来自移动设备的GPS输出)

是否有特定的数学公式? 如何找到特定点是否属于矩形?

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

3 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:4)

根据这个

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

经度可以从-180.0180.0;所以必须准确-180/180,因为-180 \ ncontritude 等于 180一个;想象一个矩形

  (15, 178, 25, -178)

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

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

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

  return false;
}

答案 2 :(得分:1)

由于矩形的边与X轴和Y轴不平行, 我认为最好找PIP(Point in Polygon)问题, 更普遍的一个矩形。

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

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

感谢您之前的回答