基于GDAL的gdb格式数据读写功能实现

时间:2022-12-20 12:52:30

一、GDAL类库下载:

下载地址:GISInternals Support Site

比如我下载的是release-1930-x64-gdal-3-4-2-mapserver-7-6-4

基于GDAL的gdb格式数据读写功能实现

 

 点击release-1930-x64-gdal-3-4-2-mapserver-7-6-4的链接,下载这两个文件

基于GDAL的gdb格式数据读写功能实现

 

 二、解压文件和安装gdb插件

1.下载好的两个文件,解压其中zip文件,

解压后如图

基于GDAL的gdb格式数据读写功能实现

 

2.将filegdb.msi文件安装,安装后找到对应文件夹,如图

基于GDAL的gdb格式数据读写功能实现

 3.将gdadlplugins文件夹和FileGDBAPI.dll文件拷贝到release-1930-x64-gdal-3-4-2-mapserver-7-6-4文件夹下的bin文件夹下;

4.将D:\release-1930-x64-gdal-3-4-2-mapserver-7-6-4\bin\gdal\csharp下的8个dll拷贝到release-1930-x64-gdal-3-4-2-mapserver-7-6-4文件夹下的bin文件夹下;

5.用vs2019创建windows桌面程序(netframework为4.7.2),一定要注意以x64程序运行;

6.将release-1930-x64-gdal-3-4-2-mapserver-7-6-4文件夹下的bin文件夹内容(除exe)拷贝到debug下;

7.添加引用 包含四个dll  gdal_csharp.dll gdalconst_csharp.dll  ogr_csharp  osr_csharp ,路径为release-1930-x64-gdal-3-4-2-mapserver-7-6-4\bin

8.初始化代码以及读写gdb文件方法

            Gdal.AllRegister();
            Ogr.RegisterAll();
            Gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
            // 为了使属性表字段支持中文,请添加下面这句
            Gdal.SetConfigOption("SHAPE_ENCODING", ""); //避免乱码
            Gdal.SetConfigOption("FILEGDB_ENCODING", "UTF-8");
            Utils utils = new Utils();
            string gdbFile = "D:\\test.gdb";


            DataSource sourceDs = utils.ReadVectorFile(gdbFile);
            //创建目标数据
            String outFileDir = "D:\\OUT";
            DataSource targetDs = utils.WriteVectorFile(sourceDs, outFileDir + "\\outData.gdb");
  public  DataSource WriteVectorFile(DataSource dataSource, string strVectorFile)
        {

            string strDriverName = "FileGDB";
            // 创建一个文件,根据strDriverName扩展名自动判断驱动类型
            OSGeo.OGR.Driver oDriver = Ogr.GetDriverByName(strDriverName);
            if (oDriver == null)
            {
                Console.WriteLine(strVectorFile + " 驱动不可用!\n");
                return null;
            }
            DataSource oDS = oDriver.CreateDataSource(strVectorFile, null);
            if (oDS == null)
            {
                Console.WriteLine("创建文件【" + strVectorFile + "】失败!\n");
                return null;
            }
           
            return oDS;
        }


        public  DataSource ReadVectorFile(string strVectorFile)
        {

            string strDriverName = "OpenFileGDB";
            // 创建一个文件,根据strDriverName扩展名自动判断驱动类型
            OSGeo.OGR.Driver oDriver = Ogr.GetDriverByName(strDriverName);
            if (oDriver == null)
            {
                Console.WriteLine(strVectorFile + " 驱动不可用!\n");
                return null;
            }
            DataSource oDS = oDriver.Open(strVectorFile, 0);
            if (oDS == null)
            {
                Console.WriteLine("读取gdb文件【" + strVectorFile + "】失败!\n");
                return null;
            }
            return oDS;
        }

9.环境变量设置:

GDAL_HOME   D:\release-1930-x64-gdal-3-4-2-mapserver-7-6-4

GDAL_DRIVER_PATH D:\release-1930-x64-gdal-3-4-2-mapserver-7-6-4\bin\gdalplugins

GDAL_DATA    D:\release-1930-x64-gdal-3-4-2-mapserver-7-6-4\bin\gdal-data

path: %GDAL_HOME%\bin  %GDAL_HOME%\bin\gdal\java  %PROJ_LIB%  %GDAL_DATA%