NetTopologySuite 是一个功能强大的几何处理库,它是由前身java的一个库改为C#的一个库得来,广泛用于地理信息系统 (GIS) 和计算几何应用中。它提供了丰富的几何对象和操作函数,以下是一些基本成员函数和类的介绍:
基本几何对象
- Coordinate 和 CoordinateZ
Coordinate: 表示一个二维点,包含 X 和 Y 坐标。
CoordinateZ: 扩展了 Coordinate,增加了 Z 坐标,表示三维点。
Coordinate coord = new Coordinate(1.0, 2.0);
CoordinateZ coordZ = new CoordinateZ(1.0, 2.0, 3.0); - Point
表示一个点对象。
Point point = new Point(1.0, 2.0); - LineString
表示由一系列点组成的线段。
Coordinate[] coords = new Coordinate[] { new Coordinate(1.0, 1.0), new Coordinate(2.0, 2.0) };
LineString lineString = new LineString(coords); - Polygon
表示一个多边形,由一个外部环和零个或多个内部环组成。
LinearRing shell = new LinearRing(new Coordinate[] {
new Coordinate(0, 0),
new Coordinate(0, 1),
new Coordinate(1, 1),
new Coordinate(1, 0),
new Coordinate(0, 0)
});
Polygon polygon = new Polygon(shell); - MultiPoint, MultiLineString, MultiPolygon
分别表示多个点、线段和多边形的集合。
MultiPoint multiPoint = new MultiPoint(new Point[] { new Point(1.0, 2.0), new Point(3.0, 4.0) });
MultiLineString multiLineString = new MultiLineString(new LineString[] { lineString });
MultiPolygon multiPolygon = new MultiPolygon(new Polygon[] { polygon });
几何工厂
GeometryFactory
用于创建几何对象。
GeometryFactory factory = new GeometryFactory();
Point point = factory.CreatePoint(new Coordinate(1.0, 2.0));
几何操作 - Intersection
计算两个几何对象的交集。
Geometry intersection = geom1.Intersection(geom2); - Union
计算两个几何对象的并集。
Geometry union = geom1.Union(geom2); - Difference
计算两个几何对象的差集。
Geometry difference = geom1.Difference(geom2); - SymmetricDifference
计算两个几何对象的对称差集。
Geometry symDifference = geom1.SymmetricDifference(geom2); - Buffer
计算几何对象的缓冲区。
Geometry buffer = geom.Buffer(10.0);
测量和查询 - Distance
计算两个几何对象之间的最短距离。
double distance = geom1.Distance(geom2); - Within
判断一个几何对象是否在另一个几何对象内。
bool isWithin = geom1.Within(geom2); - Contains
判断一个几何对象是否包含另一个几何对象。
bool contains = geom1.Contains(geom2); - Touches
判断两个几何对象是否接触。
bool touches = geom1.Touches(geom2); - Overlaps
判断两个几何对象是否重叠。
bool overlaps = geom1.Overlaps(geom2);
拓扑操作
DelaunayTriangulationBuilder
用于生成 Delaunay 三角网。
DelaunayTriangulationBuilder dtb = new DelaunayTriangulationBuilder();
dtb.SetSites(multiPoint);
GeometryCollection triangles = (GeometryCollection)dtb.GetTriangles(new GeometryFactory());
VoronoiDiagramBuilder
用于生成 Voronoi 图。
VoronoiDiagramBuilder vdb = new VoronoiDiagramBuilder();
vdb.SetSites(multiPoint);
GeometryCollection voronoiDiagram = (GeometryCollection)vdb.GetDiagram(new GeometryFactory());
LineMerger
用于合并线段。
LineMerger lineMerger = new LineMerger();
lineMerger.Add(lineString);
ICollection mergedLines = lineMerger.GetMergedLineStrings();
示例
以下是一个简单的示例,展示如何使用 NetTopologySuite 的基本功能:
using NetTopologySuite.Geometries;
using NetTopologySuite.Triangulate;
using NetTopologySuite.Operation.Linemerge;
using System.Collections.Generic;
public class Example
{
public void Run()
{
GeometryFactory geometryFactory = new GeometryFactory();
// 创建点
Point point1 = geometryFactory.CreatePoint(new Coordinate(1.0, 1.0));
Point point2 = geometryFactory.CreatePoint(new Coordinate(2.0, 2.0));
// 创建线段
LineString lineString = geometryFactory.CreateLineString(new Coordinate[] {
new Coordinate(0, 0),
new Coordinate(1, 1),
new Coordinate(2, 2)
});
// 创建多边形
Polygon polygon = geometryFactory.CreatePolygon(new Coordinate[] {
new Coordinate(0, 0),
new Coordinate(0, 1),
new Coordinate(1, 1),
new Coordinate(1, 0),
new Coordinate(0, 0)
});
// 生成 Delaunay 三角网
DelaunayTriangulationBuilder dtb = new DelaunayTriangulationBuilder();
dtb.SetSites(new MultiPoint(new Point[] { point1, point2 }));
GeometryCollection triangles = (GeometryCollection)dtb.GetTriangles(geometryFactory);
// 合并线段
LineMerger lineMerger = new LineMerger();
lineMerger.Add(lineString);
ICollection mergedLines = lineMerger.GetMergedLineStrings();
}
}