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(); }
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); }
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); }
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()); }
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(); }