Python实现mdb(个人地理数据库)转shape file


mdb转shp,你会说,使用ArcMap转换啊!

我没有,且在mdb的问题上,ArcGIS Pro与ArcMap由于64位应用架构的原因,已经各自安好了。

你会说,用FME啊,用ogr2ogr啊,自定义脚本啊,……


        在地理信息系统(GIS)应用中,地理数据的存储和交换是一个常见的需求。个人文件地理数据库(MDB)是一种常见的地理数据存储格式,但是在实际应用中,有时需要将MDB文件转换为Shapefile(SHP)格式,以便在不同的GIS软件中使用。虽然听起来简单,但实际上这个过程可能会面临一些挑战。

        回忆一下,是否还能记清它的脸……

图片

图片

        ArcMap退出历史的舞台,ArcGIS Pro不再支持mdb数据库,基于Pro的Python环境进行开发时,mdb终于成为不能逃避的那一道坎。

一、需求背景

        我需要入库一批数据,数据量很大,是省级量级的成果,数据按州市、区县、成果类型等文件夹一层层递进存放,到地理数据库时,文件夹最深的目录有7级。

        此外,存放矢量数据的格式包括,gdb、mdb、shp,图层名、字段名,中英文切换自如……

        如果使用ArcMap来处理这样的需求,是一个很简单的事情。但是如果使用ArcGIS Pro,那么问题就很大,很大……,全卡在mdb格式上。

1.1 ArcGIS Pro 使用数据互操作(没解决)

        第一:你得有数据互操作模块许可;

        第二:我尝试了一下,没解决。将过程记录一下。

        第一步:授权数据互操作模块后,打开”快速转换“应用程序:

图片

        第二步:填写转换参数

图片

        第三步:安装Microsoft Access Driver(*.mdb)ODBC驱动程序,为什么是第三步,因为第一次使用,大概率你的环境缺失驱动,会得到这么一个报错信息:

        PERSONAL_GEODATABASE reader: Unable to initialize ODBC connection to DSN for D:\data\tess.mdb,……

        第四步:执行正确,除了字段名长度、一些字段属性值被忽略的警告,以及一些字符不能被正确解码等。能看到如下界面:

图片

        执行结果对比如下:

        首先是,中文图层名、中文字段名未被正确解析。

图片

图片

        其次是包含中文的属性值未能正确解析:

图片

1.2 ogr2ogr GDAL 命令行工具(没解决)

又是一堆安装配置。

        第一步:打开https://www.gisinternals.com/release.php

图片

        本人电脑是x64,下载对应版本release-1930-x64-gdal-3-8-4-mapserver-8-0-1.zip

        第二步:解压压缩包

图片

        第三步:配置

        (1)新增SDK_ROOT变量名,值为D:\release-1930-x64-gdal-3-8-4-mapserver-8-0-1(根据解压的路径设置)

        (2)编辑path变量,新增值

%SDK_ROOT%\bin;%SDK_ROOT%\bin\gdal\python\osgeo;%SDK_ROOT%\bin\proj\apps;%SDK_ROOT%\bin\gdal\apps;%SDK_ROOT%\bin\ms\apps;%SDK_ROOT%\bin\gdal\csharp;%SDK_ROOT%\bin\ms\csharp;%SDK_ROOT%\bin\curl;%PATH% GDAL_DATA=%SDK_ROOT%bin\gdal-data GDAL_DRIVER_PATH=%SDK_ROOT%\bin\gdal\plugins PYTHONPATH=%SDK_ROOT%\bin\gdal\python;%SDK_ROOT%\bin\ms\python PROJ_LIB=%SDK_ROOT%\bin\proj\SHARE;

图片

        第四步:打开命令行界面,输入ogr2ogr进行测试

图片

        第五步:输入命令 

        ogr2ogr -f "ESRI Shapefile" output.shp input.mdb

图片

        执行结果对比如下:

        首先,对比ArcGIS Pro的数据转化工具,只是图层名乱码,中文字段名解析正确。

图片

图片

        其次,包含中文的属性值也未能正确解析:

图片

1.3  自定义脚本(解决)

        过程如下:

        (1)使用ogr读取数据,并正确解码中文图层名、字段名和包含中文的属性值;

        (2)使用Fiona创建shape file,ogr也能创建shp,但是含中文的图层名或字段名都不能被识别,因为使用的是编码方式是ISO-8859-1;

        (3)将ogr解析的几何对象和字段属性值,添加到shp文件中;

脚本执行过程如下图:

图片

执行结果对比如下:

        首先,中文图层名和中文字段名都能正确解析。

图片

图片

        其次,包含中文的字段属性值也能正确解析。

图片

二、归纳一下

        使用自定义脚本的方式实现了mdb转shp,并且不乱码的需求。

接下来的工作:

        (1)因为转出格式是shp,不能保持原mdb的数据组织结构,如存在数据集的情况;

        (2)mdb中的表(dbf)未进行导出处理。

        虽然MDB文件转换为SHP格式可能会面临一些挑战,但通过选择合适的工具和技术路线,并结合代码实现,我们可以轻松地完成这一任务。因此,无论是在GIS应用中的数据转换需求,还是在其他领域的数据处理工作中,我们都可以通过一些技术手段来解决问题,实现数据的有效管理和利用。

图片

  • 25
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

craybb

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值