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