正常来说,图片的单位都是像素,而这个图片如果是地理信息系统里面的图片的话,单位就变成了经纬度。那么,本文的主题就是:如何在像素栅格坐标和经纬度直接进行换算。

苏南大叔:qgis插件开发:QgsPoint和PixelPoint坐标如何相互转换? - qgis-transform-point
qgis插件开发:QgsPoint和PixelPoint坐标如何相互转换?(图1-1)

qgis的专业词汇来说,就是如何在QgsPointPixelPoint之间进行转换。本文环境基于:win10qgis@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

相关链接

总结

qgis插件开发教程,写到这里已经有好多篇内容了,不知道您看了几篇?点击下面的链接,查看更多文章。

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