= FileGDB = [[TOC]] * http://www.gdal.org/drv_filegdb.html * initial discussion on gdal-dev mailing list: read [http://osgeo-org.1560.n6.nabble.com/gdal-dev-FileGDB-OGR-driver-test-td3742842.html here] * Also see the OpenFileGDB driver: http://gdal.org/drv_openfilegdb.html = Build GDAL with FileGDB Support = == Download the API / SDK == * Latest SDK: see list at https://github.com/Esri/file-geodatabase-api * older release location: http://www.esri.com/apps/products/download/#File_Geodatabase_API_1.4 (you will need an 'ESRI Global Account') == Compile == === Windows (Visual Studio 2008) - FileGDB driver as a plugin === You may compile filegdb as a ''plugin'' for GDAL: 1. Compile GDAL with the FGDB section commented 2. Now edit your ''nmake.opt'' (or add it in nmake.local) so it contains something like the following (pay attention to the FGDB_SDK path): {{{ FGDB_ENABLED = YES FGDB_PLUGIN = YES FGDB_SDK = $(GDAL_HOME)\..\FileGDB_API_VS2008_1_0Final FGDB_INC = $(FGDB_SDK)\include FGDB_LIB = $(FGDB_SDK)\lib\FileGDBAPI.lib }}} 3. Next, cd to the ''/ogr/ogrsf_frmts/filegdb'' directory 4. Execute the following: {{{ nmake /f makefile.vc plugin }}} A file named ''ogr_FileGDB.dll'' should be generated. 5. You will also need the file: ''FileGDB_API_VS2008_1_0Final/bin/FileGDBAPI.dll'' === Windows (Visual Studio 2008) - FileGDB driver built inside gdalXX.dll === 1. Edit your ''nmake.opt'' (or add it in nmake.local) so it contains something like the following (pay attention to the FGDB_SDK path and let FGDB_PLUGIN commented): {{{ FGDB_ENABLED = YES #FGDB_PLUGIN = YES FGDB_SDK = $(GDAL_HOME)\..\FileGDB_API_VS2008_1_0Final FGDB_INC = $(FGDB_SDK)\include FGDB_LIB = $(FGDB_SDK)\lib\FileGDBAPI.lib }}} 2. Compile GDAL 3. You will also need the file: ''FileGDB_API_VS2008_1_0Final/bin/FileGDBAPI.dll'' === Unix (Tested on Ubuntu 8.04 and trunk 22708) === FileGDB is supported through ./configure Assuming you've installed ''libFileGDBAPI'' library under the default location, the procedure of adding FileGDB support to GDAL/OGR is relatively simple. First, you need to append the FileGDB_API path (e.g., ''/usr/local/FileGDB_API/lib'') to ''/etc/ld.so.conf''. Next, update the dynamic linker with: ''sudo ldconfig''. Finally, provide GDAL/OGR ''configure'' with the path to the FileGDB installation (replace /usr/local/FileGDB_API with whereever you extracted FileGDB_API_.tar.gz) prefix: {{{ $ cd /path/to/gdal $ ./configure --with-fgdb=/usr/local/FileGDB_API $ make # make install }}} === How to deal with GCC >= 5.1 C++11 ABI on Linux === Starting with GCC 5.1, GCC links against [https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html libstdc++ using the C++11 ABI]. This cause issues with FileGDB ABI SDK <= 1.4 which are provided using the old C++ ABI. You'll get linking issues such as {{{ .libs/libgdal.so: undefined reference to `FileGDBAPI::Geodatabase::Delete(std::__cxx11::basic_string, std::allocator > const&, std::__cxx11::basic_string, std::allocator > const&)' .libs/libgdal.so: undefined reference to `FileGDBAPI::Row::SetFloat(std::__cxx11::basic_string, std::allocator > const&, float)' }}} Proper solution: use the FileGDB_API_1_5_32gcc51.tar.gz or FileGDB_API_1_5_64gcc51.tar.gz packages from https://github.com/Esri/file-geodatabase-api/tree/master/FileGDB_API_1.5 With earlier version, to workaround the link issues, run configure with: {{{ $ CXXFLAGS="-D_GLIBCXX_USE_CXX11_ABI=0" ./configure --with-fgdb=/usr/local/FileGDB_API }}} Note that by doing so, you might have issues if using C++ gdal dependencies built with the new ABI, or if using GDAL in a C++ software built with the new ABI. So update to FileGDB API 1.5 GCC51 packages is strongly recommended. == Testing the driver == To test if the driver is been loaded, make sure that the path to ''ogr_FileGDB.dll'' is defined with the GDAL_DRIVER_PATH environmenet variable and ''FileGDBAPI.dll'' is found in your path, and then execute the following (look for "FileGDB" in the results): {{{ .\> ogrinfo --formats Supported Formats: -> "FileGDB" (read/write) -> "ESRI Shapefile" (read/write) -> "MapInfo File" (read/write) -> "UK .NTF" (readonly) -> "SDTS" (readonly) -> "TIGER" (read/write) -> "S57" (read/write) -> "DGN" (read/write) -> "VRT" (readonly) -> "REC" (readonly) }}} '''Note for Unix when note compiled as plugin:''' The order in supported formats (and I think order in which drivers are attempted) is slightly different. {{{ $ ogrinfo --formats Supported Formats: ... -> "PostgreSQL" (read/write) -> "PCIDSK" (read/write) -> "FileGDB" (read/write) -> "XPlane" (readonly) ... }}} Then test with a sample file (such as [http://trac.osgeo.org/gdal/raw-attachment/wiki/FileGDB/test_fgdb.gdb.zip here]): {{{ ogrinfo test_fgdb.gdb INFO: Open of `test_fgdb.gdb' using driver `FileGDB' successful. 1: basetable_2 (None) 2: basetable (None) 3: base_table1 (None) 4: test_lines (3D Multi Line String) 5: more_test_lines (3D Multi Line String) 6: test_points (3D Point) 7: test_areas (3D Multi Polygon) }}} '''Note:''' FileGDB_API 1.0 only supports a FileGDB created with ArcGIS>=10.0. If you try accessing a FileGDB created with an earlier ArcGIS version you will get the following error: {{{ ERROR 1: Error: Failed to open Geodatabase (This release of the GeoDatabase is either invalid or out of date.) }}} = Open Tickets = (May also show tickets about ArcObjects Driver which can also read FileGDB but requires an ArcObjects license) [[TicketQuery(status=new|assigned|reopened&keywords~=FileGDB&order=priority)]]