public object get_mapped_value(OSGeo.OGR.Feature feature, int esriFieldsIndex) { // get the ESRI Field ESRI.ArcGIS.Geodatabase.IField pField = m_fields.get_Field(esriFieldsIndex); if (esriFieldsIndex == m_oidFieldIndex) return feature.GetFID(); if (esriFieldsIndex == m_geometryFieldIndex) { System.Diagnostics.Debug.Assert(false); return null; // this should never be called for geometries } int ogrIndex = (int) m_fieldMapping[esriFieldsIndex]; if (!feature.IsFieldSet(ogrIndex)) return null; switch (feature.GetFieldType(ogrIndex)) { // must be kept in sync with utilities library case OSGeo.OGR.FieldType.OFTInteger: return feature.GetFieldAsInteger(ogrIndex); case OSGeo.OGR.FieldType.OFTReal: return feature.GetFieldAsDouble(ogrIndex); case OSGeo.OGR.FieldType.OFTString: return ogr_utils.ghetto_fix_ogr_string(feature.GetFieldAsString(ogrIndex)); case OSGeo.OGR.FieldType.OFTBinary: // WTF, the C# bindings don't have a blob retrieval until this ticket gets solved // http://trac.osgeo.org/gdal/ticket/4457#comment:2 return null; case OSGeo.OGR.FieldType.OFTDateTime: { int year, month, day, hour, minute, second, flag; feature.GetFieldAsDateTime(ogrIndex, out year, out month, out day, out hour, out minute, out second, out flag); DateTime date = new DateTime(year, month, day, hour, minute, second); return date; } default: return ogr_utils.ghetto_fix_ogr_string(feature.GetFieldAsString(ogrIndex)); //most things coerce as strings } }
private static FeatureDataRow OgrFeatureToFeatureDataRow(FeatureDataTable table, OSGeo.OGR.Feature ogrFeature) { FeatureDataRow fdr = table.NewRow(); Int32 fdrIndex = 0; for (int iField = 0; iField < ogrFeature.GetFieldCount(); iField++) { switch (ogrFeature.GetFieldType(iField)) { case OgrFieldType.OFTString: case OgrFieldType.OFTWideString: fdr[fdrIndex++] = ogrFeature.GetFieldAsString(iField); break; case OgrFieldType.OFTStringList: case OgrFieldType.OFTWideStringList: break; case OgrFieldType.OFTInteger: fdr[fdrIndex++] = ogrFeature.GetFieldAsInteger(iField); break; case OgrFieldType.OFTIntegerList: break; case OgrFieldType.OFTReal: fdr[fdrIndex++] = ogrFeature.GetFieldAsDouble(iField); break; case OgrFieldType.OFTRealList: break; case OgrFieldType.OFTDate: case OgrFieldType.OFTDateTime: case OgrFieldType.OFTTime: Int32 y, m, d, h, mi, s, tz; ogrFeature.GetFieldAsDateTime(iField, out y, out m, out d, out h, out mi, out s, out tz); fdr[fdrIndex++] = new DateTime(y, m, d, h, mi, s); break; default: Debug.WriteLine(string.Format("Cannot handle Ogr DataType '{0}'", ogrFeature.GetFieldType(iField))); break; } } fdr.Geometry = ParseOgrGeometry(ogrFeature.GetGeometryRef()); return fdr; }
private static FeatureDataRow LoadOgrFeatureToFeatureDataRow(FeatureDataTable table, OSGeo.OGR.Feature ogrFeature, GeoAPI.Geometries.IGeometryFactory factory) { var values = new object[ogrFeature.GetFieldCount()]; for (var iField = 0; iField < ogrFeature.GetFieldCount(); iField++) { // No need to get field value if there's no value available... if (!ogrFeature.IsFieldSet(iField)) { continue; } int count; switch (ogrFeature.GetFieldType(iField)) { case OgrFieldType.OFTString: case OgrFieldType.OFTWideString: values[iField] = ogrFeature.GetFieldAsString(iField); break; case OgrFieldType.OFTStringList: case OgrFieldType.OFTWideStringList: values[iField] = ogrFeature.GetFieldAsStringList(iField); break; case OgrFieldType.OFTInteger: values[iField] = ogrFeature.GetFieldAsInteger(iField); break; case OgrFieldType.OFTIntegerList: values[iField] = ogrFeature.GetFieldAsIntegerList(iField, out count); break; case OgrFieldType.OFTReal: values[iField] = ogrFeature.GetFieldAsDouble(iField); break; case OgrFieldType.OFTRealList: values[iField] = ogrFeature.GetFieldAsDoubleList(iField, out count); break; case OgrFieldType.OFTDate: case OgrFieldType.OFTDateTime: case OgrFieldType.OFTTime: Int32 y, m, d, h, mi, s, tz; ogrFeature.GetFieldAsDateTime(iField, out y, out m, out d, out h, out mi, out s, out tz); try { if (y == 0 && m == 0 && d == 0) values[iField] = DateTime.MinValue.AddMinutes(h * 60 + mi); else values[iField] = new DateTime(y, m, d, h, mi, s); } // ReSharper disable once EmptyGeneralCatchClause catch { } break; default: Debug.WriteLine("Cannot handle Ogr DataType '{0}'", ogrFeature.GetFieldType(iField)); break; } } var fdr = (FeatureDataRow)table.LoadDataRow(values, true); using (var gr = ogrFeature.GetGeometryRef()) { fdr.Geometry = ParseOgrGeometry(gr, factory); gr.Dispose(); } return fdr; }
private static FeatureDataRow OgrFeatureToFeatureDataRow(FeatureDataTable table, OSGeo.OGR.Feature ogrFeature, GeoAPI.Geometries.IGeometryFactory factory) { FeatureDataRow fdr = table.NewRow(); Int32 fdrIndex = 0; for (int iField = 0; iField < ogrFeature.GetFieldCount(); iField++) { if (!ogrFeature.IsFieldSet(iField)) continue; switch (ogrFeature.GetFieldType(iField)) { case OgrFieldType.OFTString: case OgrFieldType.OFTWideString: fdr[fdrIndex++] = ogrFeature.GetFieldAsString(iField); break; case OgrFieldType.OFTStringList: case OgrFieldType.OFTWideStringList: break; case OgrFieldType.OFTInteger: fdr[fdrIndex++] = ogrFeature.GetFieldAsInteger(iField); break; case OgrFieldType.OFTIntegerList: break; case OgrFieldType.OFTReal: fdr[fdrIndex++] = ogrFeature.GetFieldAsDouble(iField); break; case OgrFieldType.OFTRealList: break; case OgrFieldType.OFTDate: case OgrFieldType.OFTDateTime: case OgrFieldType.OFTTime: Int32 y, m, d, h, mi, s, tz; ogrFeature.GetFieldAsDateTime(iField, out y, out m, out d, out h, out mi, out s, out tz); try { if (y == 0 && m == 0 && d == 0) fdr[fdrIndex++] = DateTime.MinValue.AddMinutes(h*60 + mi); else fdr[fdrIndex++] = new DateTime(y, m, d, h, mi, s); } catch { } break; default: Debug.WriteLine(string.Format("Cannot handle Ogr DataType '{0}'", ogrFeature.GetFieldType(iField))); break; } } using (var gr = ogrFeature.GetGeometryRef()) { fdr.Geometry = ParseOgrGeometry(gr, factory); gr.Dispose(); } return fdr; }