如何在无QGIS的GUI界面情况下,将shapefile导出为可自定义的标准化地图图件?
技术路线
- 搭建好开发环境
- 准备
shapefile文件 - 进行程序编写
-
- 读入文件并将其转化为
layer - 将
layer添加至project - 在
project中新建layout - 设置
setting - 设置
layout并与setting关联
- 读入文件并将其转化为
代码:
QgsApplication的初始化
from qgis.core import *
# Supply path to qgis install location 这一步需要参考官方文档,设置这个 prefixPath
QgsApplication.setPrefixPath("/path/to/qgis/installation", True)
# Create a reference to the QgsApplication. Setting the
# second argument to False disables the GUI. 第二个参数设为 false 从而忽略 GUI
qgs = QgsApplication([], False)
# Load providers
qgs.initQgis()
# Write your code here to load some layers, use processing
# algorithms, etc.
# 这段注释很关键,我们的所有的处理脚本都应该在这个区间内执行
# 这块代码还没有好好组织,组织好之后,再补充到这里!
# Finally, exitQgis() is called to remove the
# provider and layer registries from memory
qgs.exitQgis()
注意:
- QGIS 官方文档中针对pyhton的使用方式给出的样例均是在
qgis console中执行的,如果想抛弃QGIS GUI界面,单纯使用python做集成或者二次开发(官方文档中称其为custom application),那么官方文档中的样例是少了很多关键步骤的 - 其中最重要的一点,就是官网的样例是环环相扣的,比如
project的初始化,需要在qgis app的初始化完成之后才能完成,如果单独进行project初始化也不会报错提示,本质上程序确实没有异常,但是输出结果一直是不对的,这是一个很大的坑 - 还有就是
layout中的地图显示,需要先设置一个setting,这个是官网样例中没有的,我把国内外的资料都找遍了,才在一个国外开发者写的layout单元测试中,找到了这个setting的设置,最难受的是:即便不设置setting, 导出文件中的title``legend,都是可以正常显示的,唯独其中最关键的map不能够正常显示,这一度让我以为是地图显示范围问题,变着花样排除,到最后才感觉不对劲,找到了这个setting的设置
效果:
结语
其实早在2020年,我就开始关注GPT语言模型,当时还有一位创业的大哥付了一笔咨询费让我帮助他修改一个人工智能项目的商业计划书,那个时候,GPT就号称有上亿个参数,是描述能力最强的AI模型,到如今,ChatGPT又一次一鸣惊人,火出了圈,像极了当年凭借围棋比赛出圈的AlphaGO;坦率来讲,GPT的能力绝对是颠覆性的,甚至我觉得能够脱离复杂的语境可以用语言描述出来的问题在不久的未来都可以用GPT来解决,绝对比人工来的高效和得体,可以说GPT比人类个体更能描述人类整体吧;但是如果某一个细分领域的问题必须依赖及其复杂的语境才能描述清楚,那在这种场景下,才是人类个体智慧发挥价值的时候,类似于灵光一闪这种感觉,应该就是ChatGPT等语言模型无法在短期内突破的瓶颈;所以说人类个体的价值在于对细分领域的深入,qgis专家的价值在短期内可能无法体现,但是长期来看这绝对是作为一个人类个体能够在AI时代"自保"的一个绝招!
参考资料
其他
- 如果没有可用代码的逻辑组织,就不算功能的完成
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 4 天,点击查看活动详情