这篇公众号文章里,初步记录了使用python调用org2ogr进行数据格式转换以及打包exe的过程,测试了常用的几种数据,shp数据、dxf数据、dwg数据、KML数据,shp和kml互转没有问题,牵扯到dxf和dwg的都有问题,主要是:
1ERROR 4: Failed to find template header file header.dxf for reading,
is GDAL_DATA set properly?
DXF driver failed to create out.dxf
当输入输出的数据类型有dxf时,则会报这个错误
从错误的字面理解来看,查找header.dxf文件失败,是否正确设置了GDAL_DATA,意思是,执行该操作,需要用到header.dxf这个文件,可是程序找不到这个文件,这个文件应该通过GDAL_DATA设置。
解决办法:在环境变量添加GDAL_DATA,值为header.dxf所在的路径
重启vscode再次执行即可正确实现dxf与shapefile之间的互转,dxf与kml之间的互转。不过在执行kml转dxf的时候,可能会出现一些错误,提示某些字段无法正常创建,主要是因为不同的格式之间,不可避免的存在一些差异,无法一一对应的转换,如果只对图形有要求,这些错误可以忽略。
2、
CAD driver does not support data source creation.
当进行CAD数据与其他数据之间转换时,会出现这个错误,字面意思是CAD驱动器不支持数据源的创建。这主要是因为CAD驱动器对版本有要求,我不知道是我安装的ogr2ogr版本老了还是怎么滴,该工具只支持R2000,瞬间让我觉得这个功能非常鸡肋,这个淘汰了那么多年的版本现在几乎见不到,只能二次转换,当转换一个R2000版本的CAD时,可以顺利转出,然而,当别的格式转换成CAD时,就不牵扯到版本了,程序可以按照它自己的要求转出CAD版本,然后,这个错误一直没有解决。
3、这个不是错误,pyinstaller打包exe时图标更换
加入-i 参数
pyinstaller --onefile --windowed g:\python\learting\shapefile\ToKML.PY -i g:\python\learting\shapefile\favicon.ico
整体来说,org2ogr功能强大,将很多复杂的转换通过命令行的形式简单解决,原来写一个kml和dxf转换的程序,花了几千行代码,只能转换部分要素,这几个加起来不到100行,极大提高了效率,但是它确实也有不足啊:
-
版本要求严格,且有的数据格式支持版本有限
-
CSV到kml无法进行坐标转换,只能直接写入,其他数据转换为空不知道为什么
-
同样存在数据丢失的情况
测试了自己常用的几个数据,其它几十种等用得到有数据再测试看看吧。