大家后,这是我的第一篇技术博客,采用简书因为它的用户体验和清晰明了。废话少说,对于GISer来说,QGIS由于其开源的特性和详尽的插件功能,被众多地理信息用户所选择。由于近期要做一些水动力学模型的前处理,于是就下载安装了QGIS3.10.2进行工作。
机器环境:MACOS 10.14.6(Mojave)
QGIS3.10.2安装的官网上的最新版本https://qgis.org/downloads/macos/qgis-macos-pr.dmg,也可以安装3.4稳定版本:https://qgis.org/downloads/macos/qgis-macos-ltr.dmg,我选择的是3.10.2,效果和3.4一样。从3.4开始QGIS提供集成了python,GDAL,GRASS等众多基础环境和插件的安装包,零配置,推荐。不推荐自己一步一步的安装配置了。
在利用GDAL的模块【栅格提取】进行DEM切割时,
切割失败,日志中的具体错误表现如下:
GDAL command output:
dyld: Symbol not found: _iconv
Referenced from: /usr/lib/libcups.2.dylib
Expected in: /Applications/QGIS3.10.app/Contents/MacOS/lib/libiconv.2.dylib
in /usr/lib/libcups.2.dylib
搜遍了大江南北国内国外也没找到一个一样的错误,和解决方案。不得已自己做了大量思考,原谅我好久没有做技术了,所以思考过程确实很漫长。不过最后还是搞定了。
错误原因:
QGIS在调用GDAL的插件时用的命令是:
processing.run("gdal:cliprasterbyextent", {'INPUT':'/zys/develop/jumahe/dem/all1.tif','PROJWIN':'473173.63254772004,482875.5593773756,4342250.956946625,4350751.327620829 [EPSG:4548]','NODATA':None,'OPTIONS':'','DATA_TYPE':0,'EXTRA':'','OUTPUT':'/zys/develop/jumahe/dem/testgrid.tif'})(这个可以在【处理】-【历史】模块中看到)
调用时需要链接/Applications/QGIS3.10.app/Contents/MacOS/lib/libiconv.2.dylib这个动态链接库,然而在系统目录/usr/lib下面已经存在一个libiconv.2.dylib(我的系统里版本高于QGIS自己带的),我估计这个系统目录/usr/lib/libiconv.2.dylib已经被/usr/lib/libcups.2.dylib链接,QGIS去链接自己带libiconv.2.dylib失败。
解决方案:
删除/Applications/QGIS3.10.app/Contents/MacOS/lib/libiconv.2.dylib文件,记得删除时先备份一下,万一这招不灵呢。
附加彩蛋:
这一招不仅仅能解决GDAL插件的运行错误,GRASS和SAGA都类似。