private static SqlGeometry CreateDefault(ShapeType esriType, int srid) { switch (esriType) { case ShapeType.Point: case ShapeType.PointM: case ShapeType.PointZ: return(SqlSpatialExtensions.CreateEmptyPoint(srid)); case ShapeType.MultiPoint: case ShapeType.MultiPointM: case ShapeType.MultiPointZ: return(SqlSpatialExtensions.CreateEmptyMultipoint(srid)); case ShapeType.PolyLine: case ShapeType.PolyLineM: case ShapeType.PolyLineZ: return(SqlSpatialExtensions.CreateEmptyLineString(srid)); case ShapeType.Polygon: case ShapeType.PolygonM: case ShapeType.PolygonZ: return(SqlSpatialExtensions.CreateEmptyPolygon(srid)); case ShapeType.NullShape: case ShapeType.MultiPatch: default: return(SqlGeometry.Null); } }
private static void AddGeometryCollection(SqlGeometryBuilder builder, Geometry geometry) { //SqlGeometryBuilder builder = new SqlGeometryBuilder(); //builder.SetSrid(geometry.Srid); builder.BeginGeometry(OpenGisGeometryType.GeometryCollection); foreach (var item in geometry.Geometries) { if (geometry.IsNullOrEmpty()) { SqlSpatialExtensions.AddEmptySqlGeometry(builder, item.Type); } switch (item.Type) { case GeometryType.Point: AddPoint(builder, item); break; case GeometryType.LineString: AddLineString(builder, item); break; case GeometryType.Polygon: AddPolygon(builder, item); break; case GeometryType.MultiPoint: AddMultiPoint(builder, item); break; case GeometryType.MultiLineString: AddMultiLineString(builder, item); break; case GeometryType.MultiPolygon: AddMultiPolygon(builder, item); break; case GeometryType.GeometryCollection: case GeometryType.CircularString: case GeometryType.CompoundCurve: case GeometryType.CurvePolygon: default: throw new NotImplementedException(); } } builder.EndGeometry(); //return builder.ConstructedGeometry.MakeValid(); }
//public static SqlGeometry AsSqlGeometry(this IPoint point, int srid) //{ // return SqlGeometry.STPointFromText(new System.Data.SqlTypes.SqlChars(new System.Data.SqlTypes.SqlString(string.Format(CultureInfo.InvariantCulture, "POINT({0:G16} {1:G16})", point.X, point.Y))), srid); //} public static SqlGeometry AsSqlGeometry(this Geometry geometry) { var type = geometry.Type; if (geometry.IsNullOrEmpty()) { return(SqlSpatialExtensions.CreateEmptySqlGeometry(type, geometry.Srid)); } SqlGeometryBuilder builder = new SqlGeometryBuilder(); builder.SetSrid(geometry.Srid); switch (type) { case GeometryType.GeometryCollection: AddGeometryCollection(builder, geometry); break; case GeometryType.Point: AddPoint(builder, geometry); break; case GeometryType.MultiPoint: AddMultiPoint(builder, geometry); break; case GeometryType.LineString: AddLineString(builder, geometry); break; case GeometryType.MultiLineString: AddMultiLineString(builder, geometry); break; case GeometryType.MultiPolygon: AddMultiPolygon(builder, geometry); break; case GeometryType.Polygon: AddPolygon(builder, geometry); break; case GeometryType.CircularString: case GeometryType.CompoundCurve: case GeometryType.CurvePolygon: default: throw new NotImplementedException(); } return(builder.ConstructedGeometry.MakeValid()); }