如何在 C# 中从 OpenStreetMap 边界关系创建一个或多个多边形?

Ton*_*oei 3 c# openstreetmap nettopologysuite

我正在使用OSMSharp(C# OpenStreetMap 库)从 osm.pbf 文件获取区域(例如城市、州)的边界。我得到的结构是一个包含Ways的Relation,其中包含Nodes。道路包含一组 WGS84 点(纬度、经度),由属于道路一部分的节点表示。组合路径(路径就像具有多个点的线)可以产生一个或多个表示区域面积的多边形。我需要帮助才能到达那里。

路径的顺序不是连续的,并且不清楚哪条路径是哪个区域多边形的一部分(如果有多个)。我认为 C# NetTopologySuite 有一种方法可以将这些方法组合到一个或多个多边形,以便使用OsmSharp.FilterSpatial方法。但我找不到它。有人知道可以执行此操作的 C# 库吗?

Ton*_*oei 5

找到了解决方案。NetTopologySuite Polygonizer非常适合解决这个问题。

List<IGeometry> lines = new List<IGeometry>();
lines.Add(new LineString(new Coordinate[] { new Coordinate(0, 0), new Coordinate(1, 0) }));
lines.Add(new LineString(new Coordinate[] { new Coordinate(1, 0), new Coordinate(1, 1) }));
lines.Add(new LineString(new Coordinate[] { new Coordinate(1, 1), new Coordinate(0, 1) }));
lines.Add(new LineString(new Coordinate[] { new Coordinate(0, 1), new Coordinate(0, 0) }));

Polygonizer polygonizer = new Polygonizer();
polygonizer.Add(lines);

IList<IGeometry> polys = polygonizer.GetPolygons();
Run Code Online (Sandbox Code Playgroud)