Suite

Erreur lors du zoom sur la couche dans l'application PyQGIS. La transformation à la volée, le problème ?


J'essaie de définir l'étendue de ma fenêtre sur un calque sur ma toile. Cela a fonctionné sans problème jusqu'à ce que je commence à utiliser des cartes Web Mercator au lieu des cartes WGS84. Mes entités obtiennent leur géolocalisation à partir d'une source externe qui alimente en degrés décimaux, j'utilise donc la transformation à la volée pour la projeter correctement sur Web Mercator. Le problème est que dans mon code, lorsque je définis l'étendue de ma couche, il semble essayer de le faire en degrés décimaux, en plaçant ma fenêtre au milieu de l'océan Atlantique.

Mon code d'extension est très simple :

self.mapCanvas.setExtent(self.myLayer.extent())

Mon code CRS de canevas est également simple :

self.mapCanvas = QgsMapCanvas() self.mapCanvas.useImageToRender(False) self.mapCanvas.setCanvasColor(Qt.white) self.mapCanvas.setCrsTransformEnabled(True) self.mapCanvas.setDestinationCrs(QgsCoordinateReferenceSystem(3857, QgsEcoordinatersCps)ReferenceSystem(3857, QgsECoordinaters) mapCanvas.show()

Est-ce que quelque chose ne va pas?


Si le SCR du canevas et celui du calque sont différents, vous devez reprojeter l'étendue du calque sur le SCR du canevas avant d'effectuer un zoom. Essaye ça:

mapCanvas = iface.mapCanvas() xform = QgsCoordinateTransform(myLayer.crs(), mapCanvas.mapRenderer().destinationCrs()) mapCanvas.setExtent(xform.transform(myLayer.extent())) mapCanvas.refresh()