想判断一个点是否在一个polygon内。
听说有个gis的算法 ,就是用点发出一条射线,判断射线经过的polygon,在经过一个polygon后,如果点与polygon的交点数是奇数的话,就在这个polygon内,否则就不在。大家有谁听过这个算法啊?
SharpMap中有提供相关的东西吗 或者有类似的判断的方法?谢谢
问题补充:
我找到了within方法,但是呢,现在还有连个问题。
1, SharpMap.Geometries.BoundingBox bbox = new SharpMap.Geometries.Point(lon, lat).GetBoundingBox();
List<Geometry> list = layCountries.DataSource.GetGeometriesInView(bbox);
Point point = new Point(lon, lat);
for (int k = 0; k < list.Count; k++)
{
if (list[k].Contains(point))
{
return "find it";
}
}
我用这得到的list,不包含我要的那个点。
2, 加入我找到了包含那个点的Polygon的话,我也得不出来我要的polygon的属性,因为layCountries.DataSource.ExecuteIntersectionQuery(list[k], ds)出错了,报了个NotSupportedException.也就是说,我没办法把一个Geometry的信息读出来。但是layCountries.DataSource.ExecuteIntersectionQuery(bbox,ds)是可以读出来的。
为什么Geometry不行但是BoundingBox可以呢?