引用库:
代码如下:
using GeoAPI.Geometries;
using NetTopologySuite.Features;
using NetTopologySuite.Geometries;
using NetTopologySuite;
using NetTopologySuite.IO;
using Coordinate = NetTopologySuite.Geometries.Coordinate;
using GeoAPI;
using NetTopologySuite.Operation.Polygonize;
using System.Threading;
using Point = NetTopologySuite.Geometries.Point;
using Polygon = NetTopologySuite.Geometries.Polygon;
using IFoxCAD.Cad;
using NetTopologySuite.Index.Quadtree;
using NetTopologySuite.Index.Strtree;
using NetTopologySuite.Triangulate;
using NetTopologySuite.Operation.Linemerge;
[assembly: CommandClass(typeof(IfoxDemo.NTS自己))]//只允许此类快捷键命令
namespace IfoxDemo
{
public class NTS自己
{
[CommandMethod("xx")]
public static void shp()
{
"ad".Print();
// 创建一个点对象
var point = new Point(10, 20);
// 创建一条线段对象
var line = new LineString(new[] { new Coordinate(0, 0),
new Coordinate(10, 10),
new Coordinate(20, 0)
});
// 创建一个多边形对象
var polygon = new Polygon(new LinearRing(new[] {
new Coordinate(0, 0),
new Coordinate(0, 10),
new Coordinate(10, 10),
new Coordinate(10, 0),
new Coordinate(0, 0)
}));
// 计算两个几何对象之间的距离
var distance = point.Distance(line);
// 计算一个几何对象的缓冲区
var buffer = polygon.Buffer(0.5);
// 判断两个几何对象是否相交
var isIntersect = line.Intersects(polygon);
// 创建一个包含所有几何对象的边界框
// var envelope = line.Envelope.Union(polygon.Envelope);
// 创建一个 Quadtree 索引
var index = new Quadtree<NetTopologySuite.Geometries.Geometry>();
//index.Insert(line);//有bug
//index.Insert(polygon);
// 在索引中查找与一个几何对象相交的对象
var results = index.Query(line.EnvelopeInternal);
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 polygon2 = 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);
System.Collections.ICollection mergedLines =(System.Collections.ICollection) lineMerger.GetMergedLineStrings();
}
}
}