arcengine几何转换(线面互换,几何与geojson、wkt互换)
线转面
/// <summary>
/// 线转面
/// </summary>
/// <param name="geo"></param>
/// <returns></returns>
public static IPolygon PolylineToPolygon(object geo)
{
ISegmentCollection polygons = new PolygonClass();
var segment = geo as ISegmentCollection;
polygons.AddSegmentCollection(segment);
var polyLine = polygons as IPolygon;
return polyLine;
}
面转线
/// <summary>
/// 面转线
/// </summary>
/// <param name="geo"></param>
/// <returns></returns>
public static IPolyline PolygonToPolyline(object geo)
{
ISegmentCollection lines = new PolylineClass();
var segment = geo as ISegmentCollection;
lines.AddSegmentCollection(segment);
var polyLine = lines as IPolyline;
return polyLine;
}
IGoemetry与Wkt
需要引用NTS的nuget包,包括:NetTopologySuite、NetTopologySuite.Features、NetTopologySuite.IO.GeoJSON
/// <summary>
/// geometry与wkt互转
/// </summary>
/// <param name="geometry"></param>
/// <returns></returns>
public static string GeometryToWkt(IGeometry geometry)
{
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
ITopologicalOperator op = geometry as ITopologicalOperator;
op?.Simplify();
var bytes = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
WKBReader reader = new WKBReader();
WKTWriter writer = new WKTWriter();
return writer.Write(reader.Read(bytes));
}
/// <summary>
/// wkt转IGeometry
/// </summary>
/// <param name="wkt"></param>
/// <returns></returns>
public static IGeometry WktToGeometry(string wkt)
{
//wkt转wkb,wkb转IGeometry
WKBWriter writer = new WKBWriter();
WKTReader reader = new WKTReader();
byte[] wkb = writer.Write(reader.Read(wkt));
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
factory.CreateGeometryFromWkbVariant(wkb, out IGeometry geometry, out int countin);
return geometry;
}
IGeometry与json
需要引用NTS的nuget包,包括:NetTopologySuite、NetTopologySuite.Features、NetTopologySuite.IO.GeoJSON
/// <summary>
/// IGeometry转成JSON字符串
/// </summary>
public static string GeometryToGeojson(IGeometry geometry)
{
IJSONWriter jsonWriter = new JSONWriterClass();
jsonWriter.WriteToString();
JSONConverterGeometryClass jsonCon = new JSONConverterGeometryClass();
jsonCon.WriteGeometry(jsonWriter, null, geometry, false);
return Encoding.UTF8.GetString(jsonWriter.GetStringBuffer());
}
/// <summary>
/// IGeometry转成JSON字符串
/// </summary>
public static string GeometryToEsrijson(IGeometry geometry)
{
IJSONWriter jsonWriter = new JSONWriterClass();
jsonWriter.WriteToString();
JSONConverterGeometryClass jsonCon = new JSONConverterGeometryClass();
jsonCon.WriteGeometry(jsonWriter, null, geometry, false);
return Encoding.UTF8.GetString(jsonWriter.GetStringBuffer());
}
/// <summary>
/// IGeometry转成JSON字符串
/// </summary>
public static string GeometryToGeojson(IGeometry geometry)
{
IGeometryFactory3 factory = new GeometryEnvironment() as IGeometryFactory3;
ITopologicalOperator op = geometry as ITopologicalOperator;
op?.Simplify();
var bytes = factory.CreateWkbVariantFromGeometry(geometry) as byte[];
WKBReader reader = new WKBReader();
GeoJsonWriter writer = new GeoJsonWriter();
return writer.Write(reader.Read(bytes));
}
Geojson与Wkt
需要引用NTS的nuget包,包括:NetTopologySuite、NetTopologySuite.Features、NetTopologySuite.IO.GeoJSON
/// <summary>
/// geoJson面转wkt
/// </summary>
/// <param name="json"></param>
/// <returns></returns>
public static string GeoJsonToWkt<T>(string json)where T: Geometry
{
var writer = new WKTWriter();
var reader = new GeoJsonReader();
return writer.Write(reader.Read<T>(json));
}
/// <summary>
/// WKT转geojson
/// </summary>
/// <param name="wkt"></param>
/// <returns></returns>
public static string WktToGeoJson(string wkt)
{
var writer = new GeoJsonWriter();
var reader = new WKTReader();
return writer.Write(reader.Read(wkt));
}