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

苏南大叔:qgis插件开发:如何在地图上标记一个QgsVertexMarker点? - qgis-plugin-marker
qgis插件开发:如何在地图上标记一个QgsVertexMarker点?(图3-1)

本文测试环境:qgis@3.16.14-hannoverwin10。本文中的代码,点坐标格式是:lat,lon。例如:115.001,29.112

基本代码

代码中涉及的canvas是下面这句话里面定义的:

self.canvas = iface.mapCanvas()

效果很简单,截图如下:

苏南大叔:qgis插件开发:如何在地图上标记一个QgsVertexMarker点? - qgis-plugin-marker-1
qgis插件开发:如何在地图上标记一个QgsVertexMarker点?(图3-2)

获取一个point

有了坐标值后,目前,有三种方式来获取一个点。分别是:

方案一:在maptool里面可以生效:

point = self.toMapCoordinates(e.pos())

方案二:从已知点上构造:

from qgis.core import QgsPointXY
point = 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 QgsVertexMarker
self.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 : 漏斗形

苏南大叔:qgis插件开发:如何在地图上标记一个QgsVertexMarker点? - all_marker
qgis插件开发:如何在地图上标记一个QgsVertexMarker点?(图3-3)

删除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])

相关链接

总结

本文侧重于对marker点的显示和删除,进行操作。qgis对象是:QgsVertexMarker,记得设置import才能使用。更多qgis插件文章,请点击苏南大叔的博客文章:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。