给定构成边界的 GPS 坐标列表,如何计算我的位置是否在该边界内?
Given a list of GPS coordinates making up a boundary, how can I calculate if my location is within that boundary?
假设我有成百上千个 GPS 坐标、纬度和经度构成一个国家的边界。
我也有我当前位置的纬度和经度。
我如何确定(使用 C#,为 Windows10 UWP 编程)我的位置是否在一个国家/地区的边界内?
假设我在下图中拥有构成红线的所有点。如果我在 X 位置,我的函数将 return 为真。如果我在 Y 位置,我的函数将 return false。
多边形中的点 (PIP) 是计算几何中众所周知的问题。 Wikipedia mentions two common solutions/algorithms, the Ray casting algorithm and the Winding number algorithm. You can try to implement them on your own or search for some library (the Java Topology Suite provides a solution for Java, there is a .NET port named NetTopologySuite).
定义一个点,肯定在外面,或者肯定在里面。
现在从你的位置到那个已知点创建一条线,并将它与圆周的每一段相交。计算交叉点的数量。
如果偶数,你就是你之前定义的点(里面或外面)
如果是奇数,则与你定义的点相反
感谢收到的两个答案,我找到了我正在尝试做的事情的实际名称..."Point in Polygon"。
知道这个,我就能找到这个Stack Overflow question and answer
如果上面的代码消失了,这里是代码:
/// <summary>
/// Determines if the given point is inside the polygon
/// </summary>
/// <param name="polygon">the vertices of polygon</param>
/// <param name="testPoint">the given point</param>
/// <returns>true if the point is inside the polygon; otherwise, false</returns>
public static bool IsPointInPolygon4(PointF[] polygon, PointF testPoint)
{
bool result = false;
int j = polygon.Count() - 1;
for (int i = 0; i < polygon.Count(); i++)
{
if (polygon[i].Y < testPoint.Y && polygon[j].Y >= testPoint.Y || polygon[j].Y < testPoint.Y && polygon[i].Y >= testPoint.Y)
{
if (polygon[i].X + (testPoint.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) * (polygon[j].X - polygon[i].X) < testPoint.X)
{
result = !result;
}
}
j = i;
}
return result;
}
它需要一组构成多边形的点和一个要测试的点,returns 真或假。在我的所有测试中都运行良好。
假设我有成百上千个 GPS 坐标、纬度和经度构成一个国家的边界。
我也有我当前位置的纬度和经度。
我如何确定(使用 C#,为 Windows10 UWP 编程)我的位置是否在一个国家/地区的边界内?
假设我在下图中拥有构成红线的所有点。如果我在 X 位置,我的函数将 return 为真。如果我在 Y 位置,我的函数将 return false。
多边形中的点 (PIP) 是计算几何中众所周知的问题。 Wikipedia mentions two common solutions/algorithms, the Ray casting algorithm and the Winding number algorithm. You can try to implement them on your own or search for some library (the Java Topology Suite provides a solution for Java, there is a .NET port named NetTopologySuite).
定义一个点,肯定在外面,或者肯定在里面。
现在从你的位置到那个已知点创建一条线,并将它与圆周的每一段相交。计算交叉点的数量。 如果偶数,你就是你之前定义的点(里面或外面) 如果是奇数,则与你定义的点相反
感谢收到的两个答案,我找到了我正在尝试做的事情的实际名称..."Point in Polygon"。
知道这个,我就能找到这个Stack Overflow question and answer
如果上面的代码消失了,这里是代码:
/// <summary>
/// Determines if the given point is inside the polygon
/// </summary>
/// <param name="polygon">the vertices of polygon</param>
/// <param name="testPoint">the given point</param>
/// <returns>true if the point is inside the polygon; otherwise, false</returns>
public static bool IsPointInPolygon4(PointF[] polygon, PointF testPoint)
{
bool result = false;
int j = polygon.Count() - 1;
for (int i = 0; i < polygon.Count(); i++)
{
if (polygon[i].Y < testPoint.Y && polygon[j].Y >= testPoint.Y || polygon[j].Y < testPoint.Y && polygon[i].Y >= testPoint.Y)
{
if (polygon[i].X + (testPoint.Y - polygon[i].Y) / (polygon[j].Y - polygon[i].Y) * (polygon[j].X - polygon[i].X) < testPoint.X)
{
result = !result;
}
}
j = i;
}
return result;
}
它需要一组构成多边形的点和一个要测试的点,returns 真或假。在我的所有测试中都运行良好。