public static void Write(string fileName, IEsriShapeCollection shapes, EsriShapeType shapeType, bool overwrite = false)
        {
            System.IO.MemoryStream shxWriter = new System.IO.MemoryStream();

            int offset = 50;

            foreach (IEsriShape item in shapes)
            {
                shxWriter.Write(WriteHeaderToByte(offset, item.ContentLength), 0, 2 * ShapeConstants.IntegerSize);

                offset += item.ContentLength + 4;
            }

            System.IO.MemoryStream writer = new System.IO.MemoryStream();

            int fileLength = (int)shxWriter.Length / 2 + 50;

            writer.Write(WriteMainHeader(shapes, fileLength, shapeType), 0, 100);

            writer.Write(shxWriter.ToArray(), 0, (int)shxWriter.Length);

            //var mode = overwrite ? System.IO.FileMode.Create : System.IO.FileMode.CreateNew;
            var mode = Shapefile.GetMode(fileName, overwrite);

            System.IO.FileStream stream = new System.IO.FileStream(fileName, mode);

            writer.WriteTo(stream);

            shxWriter.Close();

            writer.Close();

            stream.Close();
        }
Example #2
0
        public static List <EsriPoint> ExtractPoints(this IEsriShapeCollection shapes)
        {
            List <EsriPoint> result = new List <EsriPoint>();

            foreach (IEsriSimplePoints shape in shapes)
            {
                result.AddRange(shape.Points);
            }

            return(result);
        }
Example #3
0
        public static List <SqlGeometry> AsSqlGeometry(this IEsriShapeCollection shapes)
        {
            var count = shapes.Count();

            List <SqlGeometry> result = new List <SqlGeometry>(count);

            for (int i = 0; i < count; i++)
            {
                result.Add(shapes[i].AsSqlGeometry());
            }

            return(result);
        }
Example #4
0
        internal static byte[] WriteMainHeader(IEsriShapeCollection shapes, int fileLength, EsriShapeType shapeType)
        {
            System.IO.MemoryStream result = new System.IO.MemoryStream();

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

            result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

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

            result.Write(System.BitConverter.GetBytes(ShapeConstants.Version), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes((int)shapeType), 0, ShapeConstants.IntegerSize);

            result.Write(System.BitConverter.GetBytes(shapes.MainHeader.XMin), 0, ShapeConstants.DoubleSize);

            result.Write(System.BitConverter.GetBytes(shapes.MainHeader.YMin), 0, ShapeConstants.DoubleSize);

            result.Write(System.BitConverter.GetBytes(shapes.MainHeader.XMax), 0, ShapeConstants.DoubleSize);

            result.Write(System.BitConverter.GetBytes(shapes.MainHeader.YMax), 0, ShapeConstants.DoubleSize);


            double tempValue = shapes.MainHeader.ZMin;

            if (double.IsNaN(tempValue))
            {
                tempValue = 0;
            }

            result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            tempValue = shapes.MainHeader.ZMax;

            if (double.IsNaN(tempValue))
            {
                tempValue = 0;
            }

            result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            tempValue = shapes.MainHeader.MMin;

            if (double.IsNaN(tempValue))
            {
                tempValue = 0;
            }

            result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            tempValue = shapes.MainHeader.MMax;

            if (double.IsNaN(tempValue))
            {
                tempValue = 0;
            }

            result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);

            return(result.ToArray());
        }
Example #5
0
        private ShapefileDataSource(string shapefileName,
                                    IEsriShapeCollection geometries,
                                    EsriAttributeDictionary attributes,
                                    Func <SqlGeometry, Dictionary <string, object>, T> map,
                                    Func <T, List <object> > inverseAttributeMap,
                                    SrsBase targetSrs)
        {
            if (attributes == null)
            {
                throw new NotImplementedException();
            }

            this._shapefileName = shapefileName;

            _sourceSrs = IRI.Ket.ShapefileFormat.Shapefile.TryGetSrs(shapefileName);

            _targetSrs = targetSrs;

            Func <Point, Point> transformFunc = null;

            if (targetSrs != null)
            {
                transformFunc = p => p.Project(_sourceSrs, targetSrs);
            }

            //string title = System.IO.Path.GetFileNameWithoutExtension(shapefileName);

            this.Extent = geometries.MainHeader.MinimumBoundingBox;

            if (transformFunc != null)
            {
                this.Extent = this.Extent.Transform(p => transformFunc(p));
            }

            // 1400.02.03-comment
            //this._fields = new ObjectToDfbFields<T>() { ExtractAttributesFunc = inverseAttributeMap, Fields = attributes.Fields };

            // 1400.02.19
            this._fields = new List <ObjectToDbfTypeMap <T> >();

            for (int i = 0; i < attributes.Fields.Count; i++)
            {
                this._fields.Add(new ObjectToDbfTypeMap <T>(attributes.Fields[i], t => inverseAttributeMap(t)[i]));
            }


            if (geometries?.Count != attributes.Attributes?.Count)
            {
                throw new NotImplementedException();
            }

            this._features = new List <T>();

            for (int i = 0; i < geometries.Count; i++)
            {
                SqlGeometry geometry = null;

                if (transformFunc == null)
                {
                    geometry = geometries[i].AsSqlGeometry().MakeValid();
                }
                else
                {
                    geometry = geometries[i].AsSqlGeometry().MakeValid().Transform(p => transformFunc(p), targetSrs.Srid);//targetSrs should not be null in this case
                }

                var feature = map(geometry, attributes.Attributes[i]);

                feature.Id = GetNewId();

                this._idFunc = id => this._features.Single(f => f.Id == id);

                this._features.Add(feature);
            }
        }
        internal static byte[] WriteMainHeader(IEsriShapeCollection shapes, int fileLength, EsriShapeType shapeType)
        {
            return(ShpWriter.WriteMainHeader(shapes, fileLength, shapeType));
            //System.IO.MemoryStream result = new System.IO.MemoryStream();

            //result.Write(IRI.Ket.IO.Binary.Int32ToBigEndianOrderedBytes(ShapeConstants.FileCode), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(0), 0, ShapeConstants.IntegerSize);

            //result.Write(IRI.Ket.IO.Binary.Int32ToBigEndianOrderedBytes(fileLength), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(ShapeConstants.Version), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes((int)shapeType), 0, ShapeConstants.IntegerSize);

            //result.Write(System.BitConverter.GetBytes(MapStatistics.GetMinX(shapes)), 0, ShapeConstants.DoubleSize);

            //result.Write(System.BitConverter.GetBytes(MapStatistics.GetMinY(shapes)), 0, ShapeConstants.DoubleSize);

            //result.Write(System.BitConverter.GetBytes(MapStatistics.GetMaxX(shapes)), 0, ShapeConstants.DoubleSize);

            //result.Write(System.BitConverter.GetBytes(MapStatistics.GetMaxY(shapes)), 0, ShapeConstants.DoubleSize);


            //double tempValue = MapStatistics.GetMinZ(shapes);

            //if (double.IsNaN(tempValue)) { tempValue = 0; }

            //result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            //tempValue = MapStatistics.GetMaxZ(shapes);

            //if (double.IsNaN(tempValue)) { tempValue = 0; }

            //result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            //tempValue = MapStatistics.GetMinM(shapes);

            //if (double.IsNaN(tempValue)) { tempValue = 0; }

            //result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);


            //tempValue = MapStatistics.GetMaxM(shapes);

            //if (double.IsNaN(tempValue)) { tempValue = 0; }

            //result.Write(System.BitConverter.GetBytes(tempValue), 0, ShapeConstants.DoubleSize);

            //return result.ToArray();
        }