12-API参考手册

第十二章:API 参考手册

12.1 几何类型

12.1.1 Geometry(抽象基类)

所有几何类型的基类。

public abstract class Geometry
{
    // 属性
    public abstract GeometryType Type { get; }
    public abstract bool IsEmpty { get; }
    public abstract int Dimension { get; }
    public bool IsPoint { get; }
    public bool IsLinear { get; }
    public bool IsArea { get; }
    
    // 方法
    public abstract Envelope GetEnvelope();
    public virtual double CalculateArea2D();
    public virtual double CalculateLength2D();
    public virtual Geometry Copy();
    public virtual bool IsValid();
}

12.1.2 Point(点)

public class Point : Geometry
{
    // 构造函数
    public Point();
    public Point(double x, double y);
    public Point(double x, double y, double z);
    
    // 属性
    public double X { get; set; }
    public double Y { get; set; }
    public double? Z { get; set; }
    public double? M { get; set; }
    
    // 方法
    public double Distance(Point other);
    public bool Equals(Point other, double tolerance = GeometryConstants.DefaultTolerance);
}

12.1.3 MultiPoint(多点)

public class MultiPoint : Geometry
{
    // 构造函数
    public MultiPoint();
    public MultiPoint(IEnumerable<Point> points);
    
    // 属性
    public int Count { get; }
    
    // 方法
    public Point GetPoint(int index);
    public void Add(Point point);
    public IEnumerable<Point> GetPoints();
}

12.1.4 Line(线段)

public class Line : Geometry
{
    // 构造函数
    public Line();
    public Line(Point start, Point end);
    
    // 属性
    public Point Start { get; set; }
    public Point End { get; set; }
    public double Length { get; }
}

12.1.5 Polyline(折线)

public class Polyline : Geometry
{
    // 构造函数
    public Polyline();
    
    // 属性
    public int PathCount { get; }
    public double Length { get; }
    
    // 方法
    public void AddPath(IEnumerable<Point> points);
    public IReadOnlyList<Point> GetPath(int index);
    public IEnumerable<IReadOnlyList<Point>> GetPaths();
}

12.1.6 Polygon(多边形)

public class Polygon : Geometry
{
    // 构造函数
    public Polygon();
    
    // 属性
    public int RingCount { get; }
    public double Area { get; }
    
    // 方法
    public void AddRing(IEnumerable<Point> points);
    public IReadOnlyList<Point> GetRing(int index);
    public IEnumerable<IReadOnlyList<Point>> GetRings();
}

12.1.7 Envelope(包络矩形)

public class Envelope : Geometry
{
    // 构造函数
    public Envelope();
    public Envelope(double xMin, double yMin, double xMax, double yMax);
    
    // 属性
    public double XMin { get; set; }
    public double YMin { get; set; }
    public double XMax { get; set; }
    public double YMax { get; set; }
    public double Width { get; }
    public double Height { get; }
    public Point Center { get; }
    public double Area { get; }
    
    // 方法
    public bool Contains(Point point);
    public bool Intersects(Envelope other);
    public void Merge(Point point);
    public void Merge(Envelope other);
}

12.2 空间关系操作符

12.2.1 ContainsOperator

测试 geometry1 是否包含 geometry2。

ContainsOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Contains(geometry1, geometry2);

12.2.2 IntersectsOperator

测试两个几何对象是否相交。

IntersectsOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Intersects(geometry1, geometry2);

12.2.3 DistanceOperator

计算两个几何对象之间的距离。

DistanceOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Distance(geometry1, geometry2);

12.2.4 EqualsOperator

测试两个几何对象是否空间相等。

EqualsOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Equals(geometry1, geometry2);

12.2.5 DisjointOperator

测试两个几何对象是否分离。

DisjointOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Disjoint(geometry1, geometry2);

12.2.6 WithinOperator

测试 geometry1 是否在 geometry2 内部。

WithinOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Within(geometry1, geometry2);

12.2.7 CrossesOperator

测试两个几何对象是否交叉。

CrossesOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Crosses(geometry1, geometry2);

12.2.8 TouchesOperator

测试两个几何对象是否接触。

TouchesOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Touches(geometry1, geometry2);

12.2.9 OverlapsOperator

测试两个几何对象是否重叠。

OverlapsOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Overlaps(geometry1, geometry2);

12.3 几何运算操作符

12.3.1 BufferOperator

创建缓冲区。

BufferOperator.Instance.Execute(geometry, distance);
GeometryEngine.Buffer(geometry, distance);

12.3.2 ConvexHullOperator

计算凸包。

ConvexHullOperator.Instance.Execute(geometry);
GeometryEngine.ConvexHull(geometry);

12.3.3 AreaOperator

计算面积。

AreaOperator.Instance.Execute(geometry);
GeometryEngine.Area(geometry);

12.3.4 LengthOperator

计算长度。

LengthOperator.Instance.Execute(geometry);
GeometryEngine.Length(geometry);

12.3.5 SimplifyOperator

简化几何对象。

SimplifyOperator.Instance.Execute(geometry, tolerance);
GeometryEngine.Simplify(geometry, tolerance);

12.3.6 CentroidOperator

计算质心。

CentroidOperator.Instance.Execute(geometry);
GeometryEngine.Centroid(geometry);

12.3.7 BoundaryOperator

获取边界。

BoundaryOperator.Instance.Execute(geometry);
GeometryEngine.Boundary(geometry);

12.3.8 GeneralizeOperator

概化几何对象。

GeneralizeOperator.Instance.Execute(geometry, maxDeviation);
GeometryEngine.Generalize(geometry, maxDeviation);

12.3.9 DensifyOperator

密化几何对象。

DensifyOperator.Instance.Execute(geometry, maxSegmentLength);
GeometryEngine.Densify(geometry, maxSegmentLength);

12.3.10 ClipOperator

裁剪几何对象。

ClipOperator.Instance.Execute(geometry, envelope);
GeometryEngine.Clip(geometry, envelope);

12.3.11 OffsetOperator

偏移几何对象。

OffsetOperator.Instance.Execute(geometry, distance);
GeometryEngine.Offset(geometry, distance);

12.4 集合操作符

12.4.1 UnionOperator

计算并集。

UnionOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Union(geometry1, geometry2);

12.4.2 IntersectionOperator

计算交集。

IntersectionOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Intersection(geometry1, geometry2);

12.4.3 DifferenceOperator

计算差集。

DifferenceOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.Difference(geometry1, geometry2);

12.4.4 SymmetricDifferenceOperator

计算对称差。

SymmetricDifferenceOperator.Instance.Execute(geometry1, geometry2);
GeometryEngine.SymmetricDifference(geometry1, geometry2);

12.5 大地测量操作符

12.5.1 GeodesicDistanceOperator

计算大地测量距离。

GeodesicDistanceOperator.Instance.Execute(point1, point2);
GeometryEngine.GeodesicDistance(point1, point2);

12.5.2 GeodesicAreaOperator

计算大地测量面积。

GeodesicAreaOperator.Instance.Execute(polygon);
GeometryEngine.GeodesicArea(polygon);

12.6 邻近操作

12.6.1 Proximity2DOperator

// 获取最近坐标
Proximity2DOperator.Instance.GetNearestCoordinate(geometry, inputPoint, testPolygonInterior);
GeometryEngine.GetNearestCoordinate(geometry, inputPoint, testPolygonInterior);

// 获取最近顶点
Proximity2DOperator.Instance.GetNearestVertex(geometry, inputPoint);
GeometryEngine.GetNearestVertex(geometry, inputPoint);

// 获取范围内的顶点
Proximity2DOperator.Instance.GetNearestVertices(geometry, inputPoint, searchRadius, maxVertexCount);
GeometryEngine.GetNearestVertices(geometry, inputPoint, searchRadius, maxVertexCount);

12.6.2 Proximity2DResult

public class Proximity2DResult
{
    public Point Coordinate { get; }
    public int VertexIndex { get; }
    public double Distance { get; }
    public bool IsEmpty { get; }
}

12.7 数据格式

12.7.1 WKT

// 导出
WktExportOperator.ExportToWkt(geometry);
GeometryEngine.GeometryToWkt(geometry);

// 导入
WktImportOperator.ImportFromWkt(wkt);
GeometryEngine.GeometryFromWkt(wkt);

12.7.2 WKB

// 导出
WkbExportOperator.ExportToWkb(geometry, bigEndian);
GeometryEngine.GeometryToWkb(geometry, bigEndian);

// 导入
WkbImportOperator.ImportFromWkb(wkb);
GeometryEngine.GeometryFromWkb(wkb);

12.7.3 GeoJSON

// 导出
GeoJsonExportOperator.ExportToGeoJson(geometry);
GeometryEngine.GeometryToGeoJson(geometry);

// 导入
GeoJsonImportOperator.ImportFromGeoJson(geoJson);
GeometryEngine.GeometryFromGeoJson(geoJson);

12.7.4 Esri JSON

// 导出
EsriJsonExportOperator.Instance.Execute(geometry, spatialReference);
GeometryEngine.GeometryToEsriJson(geometry);

// 导入
EsriJsonImportOperator.ImportFromEsriJson(esriJson);
GeometryEngine.GeometryFromEsriJson(esriJson);

12.8 空间参考

12.8.1 SpatialReference

public class SpatialReference
{
    // 构造函数
    public SpatialReference();
    public SpatialReference(int wkid);
    
    // 属性
    public int? Wkid { get; set; }
    public int? LatestWkid { get; set; }
    public string? Wkt { get; set; }
    
    // 工厂方法
    public static SpatialReference Wgs84();       // EPSG:4326
    public static SpatialReference WebMercator(); // EPSG:3857
}

12.8.2 MapGeometry

public class MapGeometry
{
    // 构造函数
    public MapGeometry();
    public MapGeometry(Geometry geometry, SpatialReference spatialReference);
    
    // 属性
    public Geometry? Geometry { get; set; }
    public SpatialReference? SpatialReference { get; set; }
    
    // 方法
    public bool Equals(MapGeometry other);
    public override int GetHashCode();
    public override string ToString();
}

12.9 GeometryEngine

统一的静态 API 入口。

public static class GeometryEngine
{
    // 空间关系
    public static bool Contains(Geometry g1, Geometry g2);
    public static bool Intersects(Geometry g1, Geometry g2);
    public static double Distance(Geometry g1, Geometry g2);
    public static bool Equals(Geometry g1, Geometry g2);
    public static bool Disjoint(Geometry g1, Geometry g2);
    public static bool Within(Geometry g1, Geometry g2);
    public static bool Crosses(Geometry g1, Geometry g2);
    public static bool Touches(Geometry g1, Geometry g2);
    public static bool Overlaps(Geometry g1, Geometry g2);
    
    // 集合操作
    public static Geometry Union(Geometry g1, Geometry g2);
    public static Geometry Intersection(Geometry g1, Geometry g2);
    public static Geometry Difference(Geometry g1, Geometry g2);
    public static Geometry SymmetricDifference(Geometry g1, Geometry g2);
    
    // 几何操作
    public static Geometry Buffer(Geometry g, double distance);
    public static Geometry ConvexHull(Geometry g);
    public static double Area(Geometry g);
    public static double Length(Geometry g);
    public static Geometry Simplify(Geometry g, double tolerance);
    public static Geometry SimplifyOGC(Geometry g, SpatialReference? sr);
    public static bool IsSimpleOGC(Geometry g, SpatialReference? sr);
    public static Point Centroid(Geometry g);
    public static Geometry Boundary(Geometry g);
    public static Geometry Generalize(Geometry g, double maxDeviation);
    public static Geometry Densify(Geometry g, double maxSegmentLength);
    public static Geometry Clip(Geometry g, Envelope clipEnvelope);
    public static Geometry Offset(Geometry g, double distance);
    
    // 大地测量
    public static double GeodesicDistance(Point p1, Point p2);
    public static double GeodesicArea(Polygon polygon);
    
    // 邻近操作
    public static Proximity2DResult GetNearestCoordinate(Geometry g, Point p, bool testPolygonInterior);
    public static Proximity2DResult GetNearestVertex(Geometry g, Point p);
    public static Proximity2DResult[] GetNearestVertices(Geometry g, Point p, double radius, int maxCount);
    
    // 数据格式
    public static string GeometryToWkt(Geometry g);
    public static Geometry GeometryFromWkt(string wkt);
    public static byte[] GeometryToWkb(Geometry g, bool bigEndian);
    public static Geometry GeometryFromWkb(byte[] wkb);
    public static string GeometryToGeoJson(Geometry g);
    public static Geometry GeometryFromGeoJson(string geoJson);
    public static string GeometryToEsriJson(Geometry g);
    public static Geometry GeometryFromEsriJson(string esriJson);
}

12.10 常量

public static class GeometryConstants
{
    public const double DefaultTolerance = 1e-10;
    public const double Epsilon = 1e-12;
}

12.11 枚举

public enum GeometryType
{
    Unknown = 0,
    Point = 1,
    Line = 2,
    Envelope = 3,
    MultiPoint = 4,
    Polyline = 5,
    Polygon = 6
}

本手册涵盖了 geometry-api-net 的所有公共 API。如需更多详细信息,请参阅源代码中的 XML 文档注释。

posted @ 2025-12-03 16:29  我才是银古  阅读(7)  评论(0)    收藏  举报