📄 ntsgeometryconverter.cs
字号:
// Copyright 2006 - Diego Guidi
//
// This file is part of NtsProvider.
// NtsProvider is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// SharpMap is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Lesser General Public License for more details.
// You should have received a copy of the GNU Lesser General Public License
// along with NtsProvider; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Diagnostics;
using System.Text;
namespace SharpMap.Converters.NTS
{
/// <summary>
/// Provides static methods that performs conversions
/// between geometric elements provides by SharpMap and NetTopologySuite libraries.
/// </summary>
public static class GeometryConverter
{
/// <summary>
/// Converts any <see cref="SharpMap.Geometries.Geometry"/> array to the correspondant
/// <see cref=GisSharpBlog.NetTopologySuite.Geometries.Geometry"/> array.
/// </summary>
/// <param name="geometries"></param>
/// <param name="factory"></param>
/// <returns></returns>
public static GisSharpBlog.NetTopologySuite.Geometries.Geometry[] ToNTSGeometry(SharpMap.Geometries.Geometry[] geometries,
GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
{
GisSharpBlog.NetTopologySuite.Geometries.Geometry[] converted = new GisSharpBlog.NetTopologySuite.Geometries.Geometry[geometries.Length];
int index = 0;
foreach (SharpMap.Geometries.Geometry geometry in geometries)
converted[index++] = GeometryConverter.ToNTSGeometry(geometry, factory);
if((geometries.Length != converted.Length))
throw new ApplicationException("Conversion error");
return converted;
}
/// <summary>
/// Converts any <see cref=GisSharpBlog.NetTopologySuite.Geometries.Geometry"/> to the correspondant
/// <see cref="SharpMap.Geometries.Geometry"/>.
/// </summary>
/// <param name="geometry"></param>
/// <returns></returns>
public static GisSharpBlog.NetTopologySuite.Geometries.Geometry ToNTSGeometry(SharpMap.Geometries.Geometry geometry,
GisSharpBlog.NetTopologySuite.Geometries.GeometryFactory factory)
{
if (geometry == null)
throw new NullReferenceException("geometry");
if (geometry.GetType() == typeof(SharpMap.Geometries.Point))
return ToNTSPoint(geometry as SharpMap.Geometries.Point, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.LineString))
return ToNTSLineString(geometry as SharpMap.Geometries.LineString, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.Polygon))
return ToNTSPolygon(geometry as SharpMap.Geometries.Polygon, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.MultiPoint))
return ToNTSMultiPoint(geometry as SharpMap.Geometries.MultiPoint, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.MultiLineString))
return ToNTSMultiLineString(geometry as SharpMap.Geometries.MultiLineString, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.MultiPolygon))
return ToNTSMultiPolygon(geometry as SharpMap.Geometries.MultiPolygon, factory);
else if (geometry.GetType() == typeof(SharpMap.Geometries.GeometryCollection))
return ToNTSGeometryCollection(geometry as SharpMap.Geometries.GeometryCollection, factory);
else throw new NotSupportedException("Type " + geometry.GetType().FullName + " not supported");
}
/// <summary>
/// Converts any <see cref=GisSharpBlog.NetTopologySuite.Geometries.Geometry"/> array to the correspondant
/// <see cref="SharpMap.Geometries.Geometry"/> array.
/// </summary>
/// <param name="geometries"></param>
/// <returns></returns>
public static SharpMap.Geometries.Geometry[] ToSharpMapGeometry(GisSharpBlog.NetTopologySuite.Geometries.Geometry[] geometries)
{
SharpMap.Geometries.Geometry[] converted = new SharpMap.Geometries.Geometry[geometries.Length];
int index = 0;
foreach (GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry in geometries)
converted[index++] = GeometryConverter.ToSharpMapGeometry(geometry);
if ((geometries.Length != converted.Length))
throw new ApplicationException("Conversion error");
return converted;
}
/// <summary>
/// Converts any <see cref="SharpMap.Geometries.Geometry"/> to the correspondant
/// <see cref=GisSharpBlog.NetTopologySuite.Geometries.Geometry"/>.
/// </summary>
/// <param name="geometry"></param>
/// <returns></returns>
public static SharpMap.Geometries.Geometry ToSharpMapGeometry(GisSharpBlog.NetTopologySuite.Geometries.Geometry geometry)
{
if (geometry == null)
throw new NullReferenceException("geometry");
if(geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.Point))
return ToSharpMapPoint(geometry as GisSharpBlog.NetTopologySuite.Geometries.Point);
else if(geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.LineString))
return ToSharpMapLineString(geometry as GisSharpBlog.NetTopologySuite.Geometries.LineString);
else if (geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.Polygon))
return ToSharpMapPolygon(geometry as GisSharpBlog.NetTopologySuite.Geometries.Polygon);
else if (geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.MultiPoint))
return ToSharpMapMultiPoint(geometry as GisSharpBlog.NetTopologySuite.Geometries.MultiPoint);
else if (geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.MultiLineString))
return ToSharpMapMultiLineString(geometry as GisSharpBlog.NetTopologySuite.Geometries.MultiLineString);
else if (geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.MultiPolygon))
return ToSharpMapMultiPolygon(geometry as GisSharpBlog.NetTopologySuite.Geometries.MultiPolygon);
else if (geometry.GetType() == typeof(GisSharpBlog.NetTopologySuite.Geometries.GeometryCollection))
return ToSharpMapGeometryCollection(geometry as GisSharpBlog.NetTopologySuite.Geometries.GeometryCollection);
else throw new NotSupportedException("Type " + geometry.GetType().FullName + " not supported");
}
/// <summary>
/// Converts the <see cref="GisSharpBlog.NetTopologySuite.Geometries.Envelope"/> instance <paramref name="envelope"/>
/// into a correspondant <see cref="SharpMap.Geometries.BoundingBox"/>.
/// </summary>
/// <param name="envelope"></param>
/// <returns></returns>
public static SharpMap.Geometries.BoundingBox ToSharpMapBoundingBox(GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope)
{
return new SharpMap.Geometries.BoundingBox(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY);
}
/// <summary>
/// Converts the <see cref="GisSharpBlog.NetTopologySuite.Geometries.Envelope"/> instance <paramref name="envelope"/>
/// into a correspondant <see cref="SharpMap.Geometries.Geometry"/>.
/// </summary>
/// <param name="envelope"></param>
/// <returns></returns>
public static SharpMap.Geometries.Geometry ToSharpMapGeometry(GisSharpBlog.NetTopologySuite.Geometries.Envelope envelope)
{
return ToSharpMapGeometry(new SharpMap.Geometries.BoundingBox(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY));
}
/// <summary>
/// Converts the <see cref="SharpMap.Geometries.BoundingBox"/> instance <paramref name="boundingBox"/>
/// into a correspondant <see cref="SharpMap.Geometries.Polygon"/>.
/// </summary>
/// <param name="boundingBox"></param>
/// <returns></returns>
public static SharpMap.Geometries.Geometry ToSharpMapGeometry(SharpMap.Geometries.BoundingBox boundingBox)
{
Collection<SharpMap.Geometries.Point> vertices = new Collection<SharpMap.Geometries.Point>();
vertices.Add(new SharpMap.Geometries.Point(boundingBox.Min.X, boundingBox.Min.Y));
vertices.Add(new SharpMap.Geometries.Point(boundingBox.Max.X, boundingBox.Min.Y));
vertices.Add(new SharpMap.Geometries.Point(boundingBox.Max.X, boundingBox.Max.Y));
vertices.Add(new SharpMap.Geometries.Point(boundingBox.Min.X, boundingBox.Max.Y));
vertices.Add(new SharpMap.Geometries.Point(boundingBox.Min.X, boundingBox.Min.Y));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -