Mehr

Fehler beim Zoomen auf Layer in der PyQGIS-Anwendung. On-the-fly-Transformation das Problem?

Fehler beim Zoomen auf Layer in der PyQGIS-Anwendung. On-the-fly-Transformation das Problem?


Ich versuche, die Ausdehnung meines Fensters auf eine Ebene auf meiner Leinwand festzulegen. Dies hat reibungslos funktioniert, bis ich anfing, Web Mercator-Karten anstelle von WGS84-Karten zu verwenden. Meine Funktionen beziehen ihre Geolokalisierung von einer externen Quelle, die Dezimalgrade einspeist, daher verwende ich die On-the-Fly-Transformation, um sie richtig auf Web Mercator zu projizieren. Das Problem ist, dass in meinem Code, wenn ich die Ausdehnung auf meinen Layer festlege, es so aussieht, als würde er in Dezimalgrad versuchen, mein Fenster in die Mitte des Atlantischen Ozeans zu setzen.

Mein Extent-Code ist sehr einfach:

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

Mein Canvas-CRS-Code ist ebenfalls einfach:

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

Stimmt etwas nicht?


Wenn die CRS der Leinwand und der Ebene unterschiedlich sind, müssen Sie die Ebenenausdehnung vor dem Zoomen auf die CRS der Leinwand neu projizieren. Versuche dies:

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