Le jeudi 13 décembre 2012 02:24:40, Jeremy Palmer a écrit : > Hi, > > I'm trying to copy data from PostgreSQL to FileGDB. My PostgreSQL table has > a primary key column and ogr indenties it as the FID e.g > > CREATE TABLE public.test_fileGDB ( > id INTEGER PRIMARY KEY, > data1 TEXT, > shape GEOMETRY(POINT, 4167) > ); > > INSERT INTO public.test_fileGDB (id, data1, shape) VALUES (100, 'FileGDB > test record', ST_SetSrid(ST_MakePoint(160, -40), 4167)); > > ogrinfo PG:'dbname=my_db' public.test_filegdb > INFO: Open of `PG:dbname=my_db' > using driver `PostgreSQL' successful. > > Layer name: test_filegdb > Geometry: Point > Feature Count: 1 > Extent: (160.000000, -40.000000) - (160.000000, -40.000000) > Layer SRS WKT: > GEOGCS["NZGD2000", > DATUM["New_Zealand_Geodetic_Datum_2000", > SPHEROID["GRS 1980",6378137,298.257222101, > AUTHORITY["EPSG","7019"]], > TOWGS84[0,0,0,0,0,0,0], > AUTHORITY["EPSG","6167"]], > PRIMEM["Greenwich",0, > AUTHORITY["EPSG","8901"]], > UNIT["degree",0.0174532925199433, > AUTHORITY["EPSG","9122"]], > AUTHORITY["EPSG","4167"]] > FID Column = id > Geometry Column = shape > data1: String (0.0) > > OGRFeature(test_filegdb):100 > data1 (String) = FileGDB test record > POINT (160 -40) > > However when I try to copy it into a FileGDB the FID data is lost: > > ogr2ogr -preserve_fid --config FGDB_BULK_LOAD YES -f FileGDB test.gdb > PG:'dbname=my_db' public.test_filegdb -nln test_filegdb > > ogrinfo test.gdb test_filegdb > INFO: Open of `test.gdb' > using driver `FileGDB' successful. > > Layer name: test_filegdb > Geometry: Point > Feature Count: 1 > Extent: (160.000000, -40.000000) - (160.000000, -40.000000) > Layer SRS WKT: > GEOGCS["NZGD2000", > DATUM["New_Zealand_Geodetic_Datum_2000", > SPHEROID["GRS 1980",6378137,298.257222101, > AUTHORITY["EPSG","7019"]], > TOWGS84[0,0,0,0,0,0,0], > AUTHORITY["EPSG","6167"]], > PRIMEM["Greenwich",0, > AUTHORITY["EPSG","8901"]], > UNIT["degree",0.0174532925199433, > AUTHORITY["EPSG","9122"]], > AUTHORITY["EPSG","4167"]] > FID Column = OBJECTID > Geometry Column = SHAPE > data1: String (0.0) > OGRFeature(test_filegdb):1 > data1 (String) = FileGDB test record > POINT (160 -40) > > > Is this a bug or did I use the wrong ogr2ogr options?
At first sight, I would say it is a limitation of the FileGDB API. In FGdbLayer::CreateFeature( OGRFeature *poFeature ), you can see the following commented code : /* Cannot write to FID field - it is managed by GDB*/ //std::wstring wfield_name = StringToWString(m_strOIDFieldName); //hr = fgdb_row.SetInteger(wfield_name, poFeature->GetFID()); So there was an attempt made of preserving the FID, but apparently it doesn't work. Looking at Row.h in the FileGDB API include files, I can see that there's a public GetOID() method, but SetOID() is private. So it seems that the FileGDB API manages itself the OID. Even _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/gdal-dev