c#找到包含坐标的所有多边形的最佳方法/数据结构?

c#找到包含坐标的所有多边形的最佳方法/数据结构?,c#,data-structures,point-in-polygon,C#,Data Structures,Point In Polygon,我有大约10000个多边形,由lat/long点组成。 每个多边形都有关于它是什么以及它包含什么的元数据。 所有多边形都可以彼此相交 我现在要做的是得到所有包含特定lat/long点的多边形 什么是有效的方法? 有没有比遍历所有多边形并分别检查它们更快的方法? 是否存在某种智能索引数据结构,我可以在其中存储多边形,以便我可以在C#中执行此类查询?首先,如果您尚未执行此操作,则应为每个多边形指定一个边界框。这是完全包含多边形的最小矩形。创建多边形时指定边界框,如果调整多边形大小,则调整BB的大小

我有大约10000个多边形,由lat/long点组成。 每个多边形都有关于它是什么以及它包含什么的元数据。 所有多边形都可以彼此相交

我现在要做的是得到所有包含特定lat/long点的多边形

什么是有效的方法? 有没有比遍历所有多边形并分别检查它们更快的方法?
是否存在某种智能索引数据结构,我可以在其中存储多边形,以便我可以在C#中执行此类查询?

首先,如果您尚未执行此操作,则应为每个多边形指定一个边界框。这是完全包含多边形的最小矩形。创建多边形时指定边界框,如果调整多边形大小,则调整BB的大小

快速检查每个多边形是否包含该点:

// untested code
// in scope is pointOfInterest
var candidatePolygons = from poly in allPolygons
                           where poly.BoundingBox.contains(pointOfInterest)
                           select poly;

//BoundingBox类的方法
公共布尔包含(LatLongClass pointOfInterest)
{
return pointOfInterest.Longitude.AsX>=this.minX&&
pointOfInterest.longide.AsX=this.minY&&

pointOfInterest.Latitude.AsY如果多边形是按
x
点开始排序的,则可以跳过交叉点检查,直到找到第一个
x
的多边形,其中
x
是您的特定点。结束x、开始/结束y也是如此。如果有用的话。
// method of BoundingBox class
public Boolean contains(LatLongClass pointOfInterest)
{
   return pointOfInterest.Longitude.AsX >= this.minX &&
          pointOfInterest.Longitude.AsX <= this.maxX &&
          pointOfInterest.Latitude.AsY >= this.minY &&
          pointOfInterest.Latitude.AsY <= this.maxY;
}