Exemple #1
0
        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());
        }