首页 > 其他分享 >QGis插件编写-GeocodeCN

QGis插件编写-GeocodeCN

时间:2022-12-12 19:11:31浏览次数:82  
标签:文件 插件 QGis 编译 UI GeocodeCN 图标

 

以前写的插件记录,我把它搬到博客园上来,代码已更新许多,以最新为准。

该工具目的是地址转为坐标点(地理编码),刚开始只是一小段Python脚本,批量请求百度地图开放接口进行编码,这确实满足了我的需求,不过每次编码都需要生成csv文件后再导入GSI软件生成矢量点图层查看,还是不够简单高效,于是萌生将其集成到QGis的想法。QGis现存地理编码插件,我所知道的,一般是请求开放街道地图(OSM)的服务,总所周知,OSM作为国外地理数据提供者,可能会存在关于我国领土边界的问题,所以决定自行写一个。

1.目标

  • 批量获取感兴趣地址点的百度坐标。
  • 自动生成点图层。

 

2.准备

在开始编写之前需要做如下准备:

2.1 安装插件

构造插件——PluginBuildet,重载插件——PluginReloader

上述两个插件在官方插件仓库里没有获取到,只能在官网上以将其下载下来,然后以离线方式安装,地址:https://plugins.qgis.org/

image-20220108162215762

2.2 配置UI工具

UI工具可以是QtCreator或者QtDesigner,后边要修改UI页面文件,我使用的Qgis版本为3.22.0,已经自带QtDesigner,没必要再单独配置。

 

3.过程

3.1 生成插件模板

打开安装好的PluginBuilder插件,按照提示把相关信息填写好

image-20220108163131914

image-20220108163306354

image-20220108163400462

 

最后选择保存文件位置,生成相关模板文件。

image-20220108163430414

 

3.2 插件结构

这是官网展示的插件结构图,每一个插件都包含下面所列的文件,关于每一个文件的意义也作了说明。

image-20220108164103571

 

下图为PluginBuilder生成的模板,它包含了官网所列的必要文件,如果该插件移到Qgis插件目录下,重启后就能看到被加载到qgis里。

image-20220108164216108

3.3 设计UI及编译资源

启动QtDesigner,打开GeocodeCn_dialog_base.ui文件,根据需求设计界面元素。原始界面只包含【确认】和【取消】按钮,下图已设计好。

GeocodeCN_dialog.py文件会自动将UI文件编译为python类,不建议修改UI文件名称、以及GeocodeCN_dialog的代码,除非清楚如何修复它。

image-20220108204625559

 

新设计一个格式为.png的图标文件,替换模板中的icon.png,它是插件的图标。

icon

原始图标

 

icon

新图标

 

图标经过编译为.py文件之后,才能引用,感觉资源编译这一块问题出得比较多,因为网上蛮多人在问,目前所知的方法如下:

  • 使用pb_tool1:这是PluginBuilder作者gsherman提供的编译工具

                1
    pb_tool compile --config config_file.cfg
       
  • 使用pyqt5ac,使用详情见2

  • 使用pyrcc5

前两个模块提供有命令行编译,运行会报错,看起来不是用的QGis自带的解释器,而是本机的默认解释器,我文件移动到一个先前建好的虚拟环境里(前提是安装PyQt5),运行无问题。

image-20220108221053394

 

我的编译方法是借助pyrcc,在PyCharm中使用pyrcc需要提前配置,具体步骤为:前往 Settings --> Tools --> External Tools

image-20220108222328775

  • Program为pyrcc.exe所在路径,一般在scripts路径下
  • Arguments:设置为FileName -o FileNameWithoutExtension_rc.py
  • Working Directory:FileDir

配置完成后,可以一键编译。

image-20220108222916870

 

下图是编译好的插件图标在QGis的显示效果。

image-20220108170539539

 

3.4 环境配置

完成UI界面,准备编写逻辑代码,由于插件是在QGis自带Python解释器里执行,所以开始前先配置环境,便于引入相关依赖,此处参考知乎用户【才华横溢吴道简】3的文章。

进入Python控制台,输入如下代码,可以看到python解释器所在路径

            1
QStandardPaths.standardLocations(QStandardPaths.AppDataLocation)
   

image-20220108172514200

在PycCharm中打开模板所在文件夹,选择 Settings --> Project --> Project Interpreter

image-20220108173130116

设置路径为bin文件夹下的【python-qgis.bat],该批处理文件把QGIS的Python环境都配置好,只要把它设置为解释器,就不需要再配置别的环境变量。

image-20220108173254803

 

3.5 代码编写

完整代码可访问获取:https://gitee.com/ShihanW/geocode-cn

遇到的问题如下:

  • QThread: Destroyed while thread is still running

类似代码如下:

image-20220108224221696

原因是在cerate_thread方法内,th作为一个局部变量,在方法结束之后就结束期生命周期,但是线程仍在运行,可以修改th作为类属性成员。

image-20220108224440270

 

 

参考:


1 http://g-sherman.github.io/plugin_build_tool/ 2 https://pypi.org/project/pyqt5ac/ 3 https://zhuanlan.zhihu.com/p/344965380

标签:文件,插件,QGis,编译,UI,GeocodeCN,图标
From: https://www.cnblogs.com/wsh233/p/16976884.html

相关文章

  • UE4 GAS插件入门学习记录1——初步认识及使用
    ​引言本系列文章内容仅为个人学习记录,使用UE的版本为4.27,如有侵权请联系我学习来源及各参考文档:GASDocumentation_Chinese原文地址:tranek/GASDocumentation翻译地......
  • IDEA UI插件
    https://blog.csdn.net/zhaoxiace/article/details/124974225简单来说  MaterialThemeUI官方文档:https://www.material-theme.com/docs/introduction/ 经过测试......
  • Kubernetes Flannel 高性能网络插件的两种常用工作模式
      Flannel是为Kubernetes设计的一种简单易用的容器网络解决方案,将所有的Pod都组织在同一个子网的虚拟大二层网络中。Flannel支持的后端转发方式有许多种,本文将介绍其......
  • 插件1
    链接本地文件插件EasyFileDialog //可以用来打开文件 第一个是对话框窗口的名称第二个是默认打开路径第三个是默认添加文件名称第四个是默认打开文件类型  ......
  • Ansible如何使用lookup插件模板化外部数据
    写在前面今天和小伙伴分享使用lookup插件模板化外部数据博文内容比较简单主要介绍的常用lookup插件和对应的Demo外部数据如何代替cat等通过lookup插件读取理解不足小伙伴帮......
  • MBR20200FCT-ASEMI插件低压降肖特基二极管
    编辑:llMBR20200FCT-ASEMI插件低压降肖特基二极管型号:MBR20200FCT品牌:ASEMI封装:TO-220F正向电流:20A反向电压:200V引线数量:3芯片个数:2芯片尺寸:102MIL漏电流:10ua恢复时间:5ns浪涌......
  • Elasticsearch Head插件使用小结
    作者:崔雄华1ElasticsearchHead是什么ElasticSearchhead就是一款能连接ElasticSearch搜索引擎,并提供可视化的操作页面对ElasticSearch搜索引擎进行各种设置和数据检索功能......
  • fluentd中,当设置多个worker进程时,如何将插件与进程进行绑定?
    设置多worker进程 当通过如下的命令,设置多个worker进程时: <system>workers4</system> 示例配置 可以特定的插件与进程进行绑定,如:<system>worke......
  • MBR20200FCT-ASEMI插件低压降肖特基二极管
    编辑:llMBR20200FCT-ASEMI插件低压降肖特基二极管型号:MBR20200FCT品牌:ASEMI封装:TO-220F正向电流:20A反向电压:200V引线数量:3芯片个数:2芯片尺寸:102MIL漏电流:10ua恢......
  • 一起来写 VS Code 插件:为你的团队提供常用代码片段
    前言VSCode是前端开发者最佳的开发工具,你在开发中是否疲倦了从一个文件拷贝来新建一个文件呢?或者在你的团队内部是否有一些内部组件库,比如AntDesign、Reacthooks等组......