qgis插件开发:如何在地图上标记一个QgsVertexMarker点?
发布于 作者:苏南大叔 来源:程序如此灵动~
继续苏南大叔的qgis插件之旅,本文的主要内容是:如何在地图上添加一个标记。当然,本文要求您懂的基本的qgis插件开发流程。在文章的末尾会有相关的链接,如果您还不熟悉qgis插件的开发流程,那么就请先看看相关文章吧!

本文测试环境:qgis@3.16.14-hannover,win10。本文中的代码,点坐标格式是:lat,lon。例如:115.001,29.112。
基本代码
代码中涉及的canvas是下面这句话里面定义的:
self.canvas = iface.mapCanvas()效果很简单,截图如下:

获取一个point
有了坐标值后,目前,有三种方式来获取一个点。分别是:
方案一:在maptool里面可以生效:
point = self.toMapCoordinates(e.pos())方案二:从已知点上构造:
from qgis.core import QgsPointXYpoint = QgsPointXY(e.pos().x(),e.pos().y())方案三:从文本上构造:
from qgis.core import QgsPointXY# coordTxt是个输入框
text = self.coordTxt.text().strip()
lat = text.split(",")[0]
lon = text.split(",")[1]
point = QgsPointXY(float(lat),float(lon))添加marker
代码如下:
from PyQt5.QtGui import QColor
from qgis._gui import QgsVertexMarkerself.marker = QgsVertexMarker(self.canvas)
self.marker.setColor(QColor(0, 255, 0))
self.marker.setCenter(point)
self.marker.setIconSize(18)
self.marker.setPenWidth(2)
self.marker.setIconType(QgsVertexMarker.ICON_TRIANGLE)对于这个marker的表现类型是什么,可以对setIconType做一些设定,如下所示:
ICON_TRIANGLE: 三角形ICON_X: 叉子ICON_CROSS: 十字ICON_BOX: 正方形ICON_CIRCLE:圆形ICON_RHOMBUS:菱形ICON_DOUBLE_TRIANGLE: 漏斗形

删除marker
有添加就有删除,那么删除一个marker的语句是这样的:
self.canvas.scene().removeItem(self.marker)批量删除marker
苏南大叔在unload()函数里面批量删除这些marker:
objects = list(self.canvas.scene().items())
for i in range(objects.__len__()):
# print(type(objects[i]))
if type(objects[i]) is QgsVertexMarker:
self.canvas.scene().removeItem(objects[i])相关链接
- https://newsn.net/say/qgis-plugin-btn-status.html
- https://newsn.net/say/qgis-plugin-btn-position.html
- https://newsn.net/say/qgis-plugin-action.html
- https://newsn.net/say/qgis-plugin.html
总结
本文侧重于对marker点的显示和删除,进行操作。qgis对象是:QgsVertexMarker,记得设置import才能使用。更多qgis插件文章,请点击苏南大叔的博客文章: