飞道的博客

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

785人阅读  评论(0)

一、GDAL类库下载:

下载地址:GISInternals Support Site

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

 

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

 

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

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

解压后如图

 

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

 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文件方法


  
  1. Gdal.AllRegister();
  2. Ogr.RegisterAll();
  3. Gdal.SetConfigOption( "GDAL_FILENAME_IS_UTF8", "YES");
  4. // 为了使属性表字段支持中文,请添加下面这句
  5. Gdal.SetConfigOption( "SHAPE_ENCODING", ""); //避免乱码
  6. Gdal.SetConfigOption( "FILEGDB_ENCODING", "UTF-8");
  7. Utils utils = new Utils();
  8. string gdbFile = "D:\\test.gdb";
  9. DataSource sourceDs = utils.ReadVectorFile(gdbFile);
  10. //创建目标数据
  11. String outFileDir = "D:\\OUT";
  12. DataSource targetDs = utils.WriteVectorFile(sourceDs, outFileDir + "\\outData.gdb");

  
  1. public DataSource WriteVectorFile (DataSource dataSource, string strVectorFile)
  2. {
  3. string strDriverName = "FileGDB";
  4. // 创建一个文件,根据strDriverName扩展名自动判断驱动类型
  5. OSGeo.OGR. Driver oDriver = Ogr.GetDriverByName(strDriverName);
  6. if (oDriver == null)
  7. {
  8. Console.WriteLine(strVectorFile + " 驱动不可用!\n");
  9. return null;
  10. }
  11. DataSource oDS = oDriver.CreateDataSource(strVectorFile, null);
  12. if (oDS == null)
  13. {
  14. Console.WriteLine( "创建文件【" + strVectorFile + "】失败!\n");
  15. return null;
  16. }
  17. return oDS;
  18. }
  19. public DataSource ReadVectorFile (string strVectorFile)
  20. {
  21. string strDriverName = "OpenFileGDB";
  22. // 创建一个文件,根据strDriverName扩展名自动判断驱动类型
  23. OSGeo.OGR. Driver oDriver = Ogr.GetDriverByName(strDriverName);
  24. if (oDriver == null)
  25. {
  26. Console.WriteLine(strVectorFile + " 驱动不可用!\n");
  27. return null;
  28. }
  29. DataSource oDS = oDriver.Open(strVectorFile, 0);
  30. if (oDS == null)
  31. {
  32. Console.WriteLine( "读取gdb文件【" + strVectorFile + "】失败!\n");
  33. return null;
  34. }
  35. return oDS;
  36. }

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%


转载:https://blog.csdn.net/xlp789/article/details/128363235
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场