qgis插件开发:QgsPoint和PixelPoint坐标如何相互转换?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
正常来说,图片的单位都是像素,而这个图片如果是地理信息系统里面的图片的话,单位就变成了经纬度。那么,本文的主题就是:如何在像素栅格坐标和经纬度直接进行换算。
用qgis
的专业词汇来说,就是如何在QgsPoint
和PixelPoint
之间进行转换。本文环境基于:win10
,qgis@3.16.14-hannover
。插件制作的基本流程,请参考下面这篇文章:
本文基于如下语句:
self.canvas = iface.mapCanvas()
mapTool
中可同时获得,无需转换
在苏南大叔的以往文章里面,大家可以知道:可以通过对canvas
增加一个mapTool
,然后就可以监控鼠标事件了。在事件里面就可以拿到当前坐标。那么,本文也是从这里开始的。经典文章回顾:
正常情况下,获得的位置信息,要转化为经纬度坐标点QgsPoint
:
def canvasReleaseEvent(self, e):
point = self.toMapCoordinates(e.pos())
# ...
或者:
def canvasReleaseEvent(self, e):
# from qgis._core import QgsPointXY
point = QgsPointXY(e.pos().x(),e.pos().y())
# print(point.x(),point.y())
# 输出类似:116.322271,39.997951
# ...
实际上,在这里,也可以获得传统数学意义上的像素栅格坐标点PixelPoint
:
def canvasReleaseEvent(self, e):
point = e.originalPixelPoint()
# print(point.x(),point.y())
# 输出类似:0,100
# ...
经纬度转化为像素栅格坐标值维度
from qgis._core import QgsPointXY
trans = self.canvas.getCoordinateTransform()
point = QgsPointXY(116.322271,39.997951)
x = trans.transform(point).x() # 0
y = trans.transform(point).y() # 100
像素栅格坐标值维度转化为经纬度
如下代码可以获得地图左上角0,0
位置的点的经纬度信息:
trans = self.canvas.getCoordinateTransform()
point = trans.toMapCoordinates(0,0)
x = point.x() # 116.322271
y = point.y() # 39.997951
相关链接
- https://newsn.net/say/qgis-plugin-marker.html
- https://newsn.net/say/qgis-plugin-maptool.html
- https://newsn.net/say/qgis-plugin.html
总结
qgis
插件开发教程,写到这里已经有好多篇内容了,不知道您看了几篇?点击下面的链接,查看更多文章。
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。