.Net5使用Gdal加载Esri的GDB与MDB(一)

.Net5使用Gdal加载Esri的GDB与MDB(一)

概述

最近项目上有在自建的GIS库上解析Arcgis导出的GDB、MDB数据的需求,项目基于.Net5与NTS开发,支持跨平台,所以将几种可用方案进行了对比

一、Esri.FileGDBAPI

Esri官网提供的免费的API,从、基于C++,可在 此处下载,分为linux、mac、windows三个版本,windows版下载后有C#调用示例,优点是功能全,支持读写,不过Dll的.net的版本比较老( 最新的应该是.Net45的),并且在linux下可能还要花点功夫研究,本次只有读的需求,并且其并不支持MDB的操作,所以并没有采用该方案

二、GDAL

GDAL本身就不多做介绍了,强大是很强大的,资料及官方API上显示,GDAL从2.0开始支持对GDB与MDB的读写功能,所以本次的预期是找一个GDAL的Core版本,支持跨平台并且同时解决GDB与MDB的读问题。
本次实验了三个不同的GDAL下的Nuget,分别为ThinkGeo.GdalGdal.CoreMaxRev.Gdal.Core
ThinkGeo.Gdal: 优点是GDAL的版本比较高,缺点是依赖项太多,并且内置数据库等其他一些相关DLL,对我的需求来说比较冗余;
Gdal.Core: 做了一版,这个正式的只有1.0版,其他都是beta版本,不过本身就是GDAL的调用封装而已,影响不大,使用GDAL的版本为2.3.0-dev,但是读出来的属性数据中文乱码,网上一大堆读取Shapefile乱码的解决方案并不适用,搜索源码应该是只在SHAPEFILE驱动中对“SHAPEFILE_ENCODING”做了处理,换成“OPENFILEGDB_ENCODING”也并没有什么用。

OSGeo.GDAL.Gdal.SetConfigOption("SHAPEFILE_ENCODING", "UTF-8")

MaxRev.Gdal.Core: 该包使用的是GDAL的3.4.0版,解决了GDB的中文乱码问题,但是没高兴多久,在MDB中又出现了中文乱码的问题- -!,最终无力再搞,采用此包暂时满足项目上的需求,MDB采取了混用的问题临时解决(使用GDAL解析几何数据,使用OLEDB解析属性数据)。

总结

几种方案都不够完美,尤其MDB读了两次文件,性能上肯定是有所损耗,可能更新GDAL版本或者对源码做修改可以解决MDB乱码的问题(C++能力有限,太麻烦),后面对MDB的处理打算采用自己解析MDB二进制的方式,目前已测试过对MDB二进制的读写,后续有时间再共享出来。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值