public DbaseFileEnumerator(DbaseFileReader parent) { _parent = parent; FileStream stream = new FileStream(parent._filename, FileMode.Open, FileAccess.Read, FileShare.Read); _dbfStream = new BinaryReader(stream); ReadHeader(); }
public void Test_TestProperties() { DbaseFileReader dbfReader = new DbaseFileReader(Global.GetUnitTestRootDirectory()+@"\IO\Shapefile\Testfiles\statepop.dbf"); DbaseFileHeader dbfHeader = dbfReader.GetHeader(); Assertion.AssertEquals("Dbase header: Num records", 49, dbfHeader.NumRecords); Assertion.AssertEquals("Dbase header: Num fields", 252, dbfHeader.NumFields); Assertion.AssertEquals("Field 0: name", "STATE_NAME", dbfHeader.Fields[0].Name); Assertion.AssertEquals("Field 0: name", 'C', dbfHeader.Fields[0].DbaseType); Assertion.AssertEquals("Field 0: name", typeof(string), dbfHeader.Fields[0].Type); Assertion.AssertEquals("Field 0: name", 25, dbfHeader.Fields[0].Length); Assertion.AssertEquals("Field 251: name", "SAMP_POP", dbfHeader.Fields[251].Name); Assertion.AssertEquals("Field 251: name", 'N', dbfHeader.Fields[251].DbaseType); Assertion.AssertEquals("Field 251: name", typeof(double), dbfHeader.Fields[251].Type); Assertion.AssertEquals("Field 251: name", 19, dbfHeader.Fields[251].Length); // note alaska and hawaii are missing - hence 48 states not 50. int i=0; foreach(ArrayList columnValues in dbfReader) { if (i==0) { Assertion.AssertEquals("Row1: STATE_NAME:","Illinois", columnValues[0]); Assertion.AssertEquals("Row1: STATE_FIPS:","17", columnValues[1].ToString()); Assertion.AssertEquals("Row1: SAMP_POP", 1747776.0, columnValues[251]); } if (i==48) { Assertion.AssertEquals("Row1: STATE_NAME:","Washington", columnValues[0]); Assertion.AssertEquals("Row1: STATE_FIPS:","53", columnValues[1].ToString()); Assertion.AssertEquals("Row1: SAMP_POP", 736744.0, columnValues[251]); } i++; } Assertion.AssertEquals("48 Records",48,i-1); DbaseFileReader dbfReader2 = new DbaseFileReader(Global.GetUnitTestRootDirectory()+@"\IO\Shapefile\Testfiles\statepop.dbf"); i=0; foreach(ArrayList columnValues in dbfReader2) { if (i==0) { Assertion.AssertEquals("Row1: STATE_NAME:","Illinois", columnValues[0]); Assertion.AssertEquals("Row1: STATE_FIPS:","17", columnValues[1].ToString()); Assertion.AssertEquals("Row1: SAMP_POP", 1747776.0, columnValues[251]); } if (i==48) { Assertion.AssertEquals("Row1: STATE_NAME:","Washington", columnValues[0]); Assertion.AssertEquals("Row1: STATE_FIPS:","53", columnValues[1].ToString()); Assertion.AssertEquals("Row1: SAMP_POP", 736744.0, columnValues[251]); } i++; } Assertion.AssertEquals("48 Records",48,i-1); }
/// <summary> /// Tests the constructor /// </summary> public void Test_Constructor() { try { DbaseFileReader dbfReader = new DbaseFileReader(null); } catch (ArgumentNullException) { } }
public DataTable Query(Envelope extents) { DataTable table = this.GetDataTable(); ArrayList indexes = new ArrayList(_spatialIndex.query(extents).toArray()); // Sort the results so we can go through the files sequentially indexes.Sort(); ShapeHandler handler = null; switch (_type) { case ShapeType.Point: handler = new PointHandler(); break; case ShapeType.Arc: handler = new MultiLineHandler(); break; case ShapeType.Polygon: handler = new PolygonHandler(); break; } using (BinaryReader dbfReader = new BinaryReader(File.OpenRead(Path.Combine(Path.GetDirectoryName(_path), Path.GetFileNameWithoutExtension(_path) + ".dbf")))) using (BigEndianBinaryReader shpReader = new BigEndianBinaryReader(File.OpenRead(_path))) { foreach (ShapefileRecordPointer pointer in indexes) { ArrayList record = new ArrayList(); // Step 1: Get the geometry // NOTE: We add 8 here to skip the content length and record numer - we // already have that information in the pointer object. shpReader.BaseStream.Position = pointer.GeometryOffset + 8; record.Add(handler.Read(shpReader, _factory)); // Step 2: Get the attributes dbfReader.BaseStream.Position = pointer.AttributesOffset; record.AddRange(DbaseFileReader.ReadRecord(dbfReader, _dbfHeader)); table.Rows.Add(record.ToArray()); } } return(table); }
//byte[] _wkb; // GeometryWKBWriter _wkbWriter; #region Constructors /// <summary> /// Initializes a new instance of the ShapefileDataReader class. /// </summary> /// <param name="filename">The shapefile to read (minus the .shp extension)</param> ///<param name="geometryFactory">The GeometryFactory to use.</param> public ShapefileDataReader(string filename, GeometryFactory geometryFactory) { if (filename == null) { throw new ArgumentNullException("filename"); } if (geometryFactory == null) { throw new ArgumentNullException("geometryFactory"); } _geometryFactory = geometryFactory; _open = true; if (filename.ToLower().EndsWith(".shp")) { filename = filename.ToLower().Replace(".shp", ""); } _dbfReader = new DbaseFileReader(filename + ".dbf"); _shpReader = new ShapefileReader(filename + ".shp", geometryFactory); _dbfHeader = _dbfReader.GetHeader(); _recordCount = _dbfHeader.NumRecords; // _wkbWriter = new GeometryWKBWriter(_geometryFactory); // copy dbase fields to our own array. Insert into the first position, the shape column _dbaseFields = new DbaseFieldDescriptor[_dbfHeader.Fields.Length + 1]; _dbaseFields[0] = DbaseFieldDescriptor.ShapeField(); //_dbaseFields[1] = DbaseFieldDescriptor.IdField(); for (int i = 0; i < _dbfHeader.Fields.Length; i++) { _dbaseFields[i + 1] = _dbfHeader.Fields[i]; } _shpHeader = _shpReader.Header; _dbfEnumerator = _dbfReader.GetEnumerator(); _shpEnumerator = _shpReader.GetEnumerator(); _moreRecords = true; }
public void Test_Constructor() { DbaseFileReader dbfReader = new DbaseFileReader(null); }
/// <summary> /// Read a single dbase record /// </summary> /// <returns>return the read shapefile record or null if there are no more records</returns> private ArrayList Read() { return(DbaseFileReader.ReadRecord(_dbfStream, _header)); }
public DbaseFileEnumerator(DbaseFileReader parent) { _parent = parent; _dbfStream = new BinaryReader(File.OpenRead(parent._filename)); ReadHeader(); }
public DbaseFileEnumerator(DbaseFileReader parent) { _parent = parent; _dbfStream = new BinaryReader(File.OpenRead(parent._filename)); ReadHeader(); }
/// <summary> /// Initializes a new instance of the ShapefileDataReader class. /// </summary> /// <param name="filename">The shapefile to read (minus the .shp extension)</param> ///<param name="geometryFactory">The GeometryFactory to use.</param> public ShapefileDataReader(string filename, GeometryFactory geometryFactory) { if (filename==null) { throw new ArgumentNullException("filename"); } if (geometryFactory==null) { throw new ArgumentNullException("geometryFactory"); } _geometryFactory = geometryFactory; _open=true; if (filename.ToLower().EndsWith(".shp")) { filename = filename.ToLower().Replace(".shp",""); } _dbfReader = new DbaseFileReader(filename+".dbf"); _shpReader = new ShapefileReader(filename+".shp", geometryFactory); _dbfHeader = _dbfReader.GetHeader(); _recordCount = _dbfHeader.NumRecords; // _wkbWriter = new GeometryWKBWriter(_geometryFactory); // copy dbase fields to our own array. Insert into the first position, the shape column _dbaseFields = new DbaseFieldDescriptor[_dbfHeader.Fields.Length + 1]; _dbaseFields[0] = DbaseFieldDescriptor.ShapeField(); //_dbaseFields[1] = DbaseFieldDescriptor.IdField(); for(int i=0; i < _dbfHeader.Fields.Length; i++) { _dbaseFields[i+1] = _dbfHeader.Fields[i]; } _shpHeader = _shpReader.Header; _dbfEnumerator = _dbfReader.GetEnumerator(); _shpEnumerator = _shpReader.GetEnumerator(); _moreRecords = true; }