/// <summary> /// Gets the feature at the specified Object ID /// </summary> /// <param name="oid">Row index. Zero-based.</param> /// <param name="table">The feature table containing the schema used to /// read the row.</param> /// <returns>The feature row for the given row index</returns> /// <exception cref="InvalidDbaseFileOperationException"> /// Thrown if this reader is closed (check <see cref="IsOpen"/> before calling), /// or if the column is an unsupported type. /// </exception> /// <exception cref="ArgumentOutOfRangeException">Thrown if <paramref name="oid"/> /// < 0 or <paramref name="oid"/> >= <see cref="RecordCount"/></exception> /// <exception cref="ArgumentNullException">Thrown if <paramref name="table"/> is /// null</exception> /// <exception cref="ObjectDisposedException">Thrown when the method is called and /// Object has been disposed</exception> internal IFeatureDataRecord GetAttributes(UInt32 oid, FeatureDataTable <UInt32> table) { checkState(); if (!_isOpen) { throw new InvalidDbaseFileOperationException("An attempt was made to read " + "from a closed dBase file"); } if (oid <= 0 || oid > RecordCount) { throw new ArgumentOutOfRangeException("Invalid DataRow requested " + "at index " + oid); } if (_reader.IsRowDeleted(oid)) // is record marked deleted? { return(null); } if (table != null) { FeatureDataRow <UInt32> dr = table.NewRow(oid); foreach (DbaseField field in Header.Columns) { try { dr[field.ColumnName] = _reader.GetValue(oid, field); } catch (NotSupportedException) { String message = String.Format("Column type {0} is not supported.", field.DataType); throw new InvalidDbaseFileOperationException(message); } } return(dr); } else { ShapeFileFeatureDataRecord dr = new ShapeFileFeatureDataRecord(Header.Columns); dr.SetColumnValue(0, oid); dr.SetColumnValues(1, 1 + Header.Columns.Count, _reader.GetValues(oid));//jd: added 1 to Header.Columns.Count because we are offsetting the start index by one (OID is stored at zero) return(dr); } }
public void ExecuteRobustIntersectionQuery(ShapeFile shapeFile, Envelope bbox, FeatureDataSet ds) { //Use the spatial index to get a list of features whose boundingbox intersects bbox var objectlist = shapeFile.GetObjectIDsInView(bbox); Stream stream = new FileStream(shapeFile.Filename, FileMode.Open, FileAccess.Read); string dbfFile = Path.ChangeExtension(shapeFile.Filename, ".dbf"); string indexFile = Path.ChangeExtension(shapeFile.Filename, ".shx"); DbaseReader dbaseReader = null; if (File.Exists(dbfFile)) { dbaseReader = new DbaseReader(dbfFile); dbaseReader.Open(); } using (BinaryReader br = new BinaryReader(stream)) { using (DbaseReader dbaseFile = dbaseReader) { var dt = dbaseFile.NewTable; dt.BeginLoadData(); for (var i = 0; i < objectlist.Count; i++) { FeatureDataRow fdr; try { var geometry = shapeFile.GetFeature(objectlist[i]).Geometry; //fdr.Geometry = ReadGeometry(objectlist[i], br, dbaseFile); fdr = (FeatureDataRow)dt.LoadDataRow(dbaseFile.GetValues(objectlist[i]), true); fdr.Geometry = geometry; } catch (Exception) { Debug.WriteLine("ERROR: Bad geometry for feature at index " + objectlist[i]); } } dt.EndLoadData(); dt.AcceptChanges(); ds.Tables.Add(dt); dbaseFile.Close(); } br.Close(); } }
public void TestDbaseReader() { using (DbaseReader reader = new DbaseReader(GetTestFile())) { reader.Open(); int numberOfRecords = GetNumberOfRecords(reader); // read entire file for (uint rowid = 0; rowid < numberOfRecords; rowid++) { var values = reader.GetValues(rowid); } } }
public void TestDbaseReader() { using (DbaseReader reader = new DbaseReader(TestUtility.GetPathToTestFile("SPATIAL_F_SKARVMUFF.dbf"))) { reader.Open(); int numberOfRecords = GetNumberOfRecords(reader); // read entire file for (uint rowid = 0; rowid < numberOfRecords; rowid++) { var values = reader.GetValues(rowid); } } }
public void TestDbaseReader() { using (DbaseReader reader = new DbaseReader(GetTestFile())) { reader.Open(); int numberOfRecords = GetNumberOfRecords(reader); // read entire file for (uint rowid = 0; rowid < numberOfRecords; rowid++) { var values = reader.GetValues(rowid); } } }
public void TestDbaseBinaryTree() { using (DbaseReader reader = new DbaseReader(GetTestFile())) { reader.Open(); int numberOfRecords = GetNumberOfRecords(reader); // Create index on OBJECTNO column var indexOBJECTNO = reader.CreateDbfIndex <int>(0); // Test if index contains all records Assert.AreEqual(numberOfRecords, indexOBJECTNO.InOrder.Count()); // Test searching for all records individually for (uint rowid = 0; rowid < numberOfRecords; rowid++) { int value = (int)reader.GetValues(rowid)[1]; Assert.AreEqual(1, indexOBJECTNO.Find(value).Count()); } } }
public void TestDbaseBinaryTree() { using (DbaseReader reader = new DbaseReader(GetTestFile())) { reader.Open(); int numberOfRecords = GetNumberOfRecords(reader); // Create index on OBJECTNO column var indexOBJECTNO = reader.CreateDbfIndex<int>(0); // Test if index contains all records Assert.AreEqual(numberOfRecords, indexOBJECTNO.InOrder.Count()); // Test searching for all records individually for (uint rowid = 0; rowid < numberOfRecords; rowid++) { int value = (int)reader.GetValues(rowid)[1]; Assert.AreEqual(1, indexOBJECTNO.Find(value).Count()); } } }
private List<Tuple<string, string>> GetNameAndCode(int count) { // Generate Tuple (ideally struct), containing names and codes. List<Tuple<string,string>> nameAndCode; using (DbaseReader db = new DbaseReader (DbfFileName)) { db.Open (); int start = 0; //int count = stateBorders.Count (); var regionIdx = Enumerable.Range (start, count); // struct would look nicer here. nameAndCode = regionIdx.Select (iRegion => Tuple.Create ( (string)((object[])db.GetValues ((uint)iRegion)) [1], (string)((object[])db.GetValues ((uint)iRegion)) [5] )).ToList (); db.Close (); } return nameAndCode; }