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 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
: 漏斗形
删除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
插件文章,请点击苏南大叔的博客文章:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。