public static void ReportFeature(Feature feat, FeatureDefn def) { Console.WriteLine( "Feature(" + def.GetName() + "): " + feat.GetFID() ); for( int iField = 0; iField < feat.GetFieldCount(); iField++ ) { FieldDefn fdef = def.GetFieldDefn( iField ); Console.Write( fdef.GetNameRef() + " (" + fdef.GetFieldTypeName(fdef.GetFieldType()) + ") = "); if( feat.IsFieldSet( iField ) ) Console.WriteLine( feat.GetFieldAsString( iField ) ); else Console.WriteLine( "(null)" ); } if( feat.GetStyleString() != null ) Console.WriteLine( " Style = " + feat.GetStyleString() ); Geometry geom = feat.GetGeometryRef(); if( geom != null ) Console.WriteLine( " " + geom.GetGeometryName() + "(" + geom.GetGeometryType() + ")" ); Envelope env = new Envelope(); geom.GetEnvelope(env); Console.WriteLine( " ENVELOPE: " + env.MinX + "," + env.MaxX + "," + env.MinY + "," + env.MaxY); string geom_wkt; geom.ExportToWkt(out geom_wkt); Console.WriteLine( " " + geom_wkt ); Console.WriteLine( "" ); }
/* public virtual FeatureDataSet ExecuteQuery(string query) { return ExecuteQuery(query, null); }*/ /* public virtual FeatureDataSet ExecuteQuery(string query, Geometry filter) { try { var featureDataSet = new FeatureDataSet(); featureDataTable.Clear(); using (Layer ogrLayer = ogrDataSource.ExecuteSQL(query, filter, "")) { ogrLayer.ResetReading(); int featureCount = ogrLayer.GetFeatureCount(1); for (int i = 0; i < featureCount;i++ ) { using (var ogrFeature = ogrLayer.GetNextFeature()) { FeatureDataRow feature = featureDataTable.NewRow(); feature.Id = ogrFeature.GetFID(); SetFeatureValuesInRow(featureDataTable, ogrFeature, feature); using (var geometry = ogrFeature.GetGeometryRef()) { feature.Geometry = ParseOgrGeometry(geometry); } featureDataTable.AddRow(feature); ogrFeature.Dispose();//release memory, do not wait for gc to do this! } } featureDataSet.Tables.Add(featureDataTable); ogrDataSource.ReleaseResultSet(ogrLayer); return featureDataSet; } } catch (Exception exception) { log.Error("Error while reading features", exception); return new FeatureDataSet(); } } */ private static void SetFeatureValuesInRow(FeatureDataTable featureDataTable, Feature ogrFeature, FeatureDataRow feature) { for (int iField = 0; iField < ogrFeature.GetFieldCount(); iField++) { if (featureDataTable.Columns[iField].DataType == Type.GetType("System.String")) { feature[iField] = ogrFeature.GetFieldAsString(iField); } else if (featureDataTable.Columns[iField].DataType == Type.GetType("System.Int32")) { feature[iField] = ogrFeature.GetFieldAsInteger(iField); } else if (featureDataTable.Columns[iField].DataType == Type.GetType("System.Double")) { feature[iField] = ogrFeature.GetFieldAsDouble(iField); } else if (featureDataTable.Columns[iField].DataType == Type.GetType("System.DateTime")) { int year; int month; int day; int hour; int minute; int second; int TZflag; ogrFeature.GetFieldAsDateTime(iField, out year, out month, out day, out hour, out minute, out second, out TZflag); if (year == 0 || month == 0 || day == 0) { feature[iField] = DBNull.Value; } else { feature[iField] = new DateTime(year, month, day, hour, minute, second); } } else { feature[iField] = ogrFeature.GetFieldAsString(iField); } } }
public static void ReportFeature(Feature feat, FeatureDefn def) { Console.WriteLine( "Feature(" + def.GetName() + "): " + feat.GetFID() ); for( int iField = 0; iField < feat.GetFieldCount(); iField++ ) { FieldDefn fdef = def.GetFieldDefn( iField ); Console.Write( fdef.GetNameRef() + " (" + fdef.GetFieldTypeName(fdef.GetFieldType()) + ") = "); if( feat.IsFieldSet( iField ) ) { if (fdef.GetFieldType() == FieldType.OFTStringList) { string[] sList = feat.GetFieldAsStringList(iField); foreach (string s in sList) { Console.Write("\"" + s + "\" "); } Console.WriteLine(); } else if (fdef.GetFieldType() == FieldType.OFTIntegerList) { int count; int[] iList = feat.GetFieldAsIntegerList(iField, out count); for (int i = 0; i < count; i++) { Console.Write(iList[i] + " "); } Console.WriteLine(); } else if (fdef.GetFieldType() == FieldType.OFTRealList) { int count; double[] iList = feat.GetFieldAsDoubleList(iField, out count); for (int i = 0; i < count; i++) { Console.Write(iList[i].ToString() + " "); } Console.WriteLine(); } else Console.WriteLine(feat.GetFieldAsString(iField)); } else Console.WriteLine( "(null)" ); } if( feat.GetStyleString() != null ) Console.WriteLine( " Style = " + feat.GetStyleString() ); Geometry geom = feat.GetGeometryRef(); if( geom != null ) { Console.WriteLine( " " + geom.GetGeometryName() + "(" + geom.GetGeometryType() + ")" ); Geometry sub_geom; for (int i = 0; i < geom.GetGeometryCount(); i++) { sub_geom = geom.GetGeometryRef(i); if ( sub_geom != null ) { Console.WriteLine( " subgeom" + i + ": " + sub_geom.GetGeometryName() + "(" + sub_geom.GetGeometryType() + ")" ); } } Envelope env = new Envelope(); geom.GetEnvelope(env); Console.WriteLine(" ENVELOPE: " + env.MinX + "," + env.MaxX + "," + env.MinY + "," + env.MaxY); string geom_wkt; geom.ExportToWkt(out geom_wkt); Console.WriteLine(" " + geom_wkt); } Console.WriteLine( "" ); }