예제 #1
0
        internal static byte[] WriteHeaderToByte(int recordNumber, IEsriShape shape)
        {
            System.IO.MemoryStream result = new System.IO.MemoryStream();

            result.Write(IRI.Msh.Common.Helpers.StreamHelper.Int32ToBigEndianOrderedBytes(recordNumber), 0, ShapeConstants.IntegerSize);

            result.Write(IRI.Msh.Common.Helpers.StreamHelper.Int32ToBigEndianOrderedBytes(shape.ContentLength), 0, ShapeConstants.IntegerSize);

            return(result.ToArray());
        }
예제 #2
0
        public static SqlGeometry AsSqlGeometry(this IEsriShape shape)
        {
            //try
            //{
            //    return SqlGeometry.STGeomFromWKB(new SqlBytes(shape.AsWkb()), srid).MakeValid();
            //}
            //catch (Exception ex)
            //{
            //    return SqlGeometry.Null;
            //}

            SqlGeometryBuilder builder = new SqlGeometryBuilder();

            builder.SetSrid(shape.Srid);

            try
            {
                switch (shape.Type)
                {
                case EsriShapeType.NullShape:
                    return(SqlGeometry.Null);

                case EsriShapeType.EsriPoint:
                case EsriShapeType.EsriPointM:
                case EsriShapeType.EsriPointZ:
                    WriteEsriPoint(builder, (IPoint)shape);
                    break;

                case EsriShapeType.EsriMultiPoint:
                case EsriShapeType.EsriMultiPointM:
                case EsriShapeType.EsriMultiPointZ:
                    WriteEsriMultiPoint(builder, (IEsriSimplePoints)shape);
                    break;

                case EsriShapeType.EsriPolyLine:
                case EsriShapeType.EsriPolyLineM:
                case EsriShapeType.EsriPolyLineZ:
                    WriteEsriPolyline(builder, (IEsriSimplePoints)shape);
                    break;

                case EsriShapeType.EsriPolygon:
                case EsriShapeType.EsriPolygonM:
                case EsriShapeType.EsriPolygonZ:
                    WriteEsriPolygon(builder, (IEsriSimplePoints)shape);
                    break;

                case EsriShapeType.EsriMultiPatch:
                default:
                    break;
                }

                var result = builder.ConstructedGeometry.MakeValid();

                if (!result.IsNullOrEmpty() && !AreConsistent(shape.Type, result.GetOpenGisType()))
                {
                    return(ClearGeometry(shape.Type, result, shape.Srid));
                }

                return(result);
            }
            catch (Exception ex)
            {
                return(CreateDefault(shape.Type, shape.Srid));
            }
        }