Czy możliwe jest automatyczne wykonanie „zrzutu ekranu” mojej wybranej funkcji w QGIS przy użyciu Pythona?

11

Wdrażam narzędzie, które pozwala użytkownikowi utworzyć profil funkcji (w moim przypadku działki miejskie). Czy możliwe jest automatyczne wykonanie zrzutu ekranu tej funkcji (wyświetlanego w oknie QGIS) i wyświetlenie go w profilu PDF?

Zdjęcie powinno pokazywać jedynie zasięg funkcji i być może warstwę WMS, która leży poza tą funkcją. Czy są już jakieś narzędzia, które możesz zasugerować?

kopi
źródło
Jak mogę zapisać JPG zamiast PNG? QgsMapCanvas.saveAsImage (QString theFileName, QPixmap * QPixmap = 0, QString = „PNG”) Wiem, że mogę użyć „JPG” jako ostatniego parametru, ale nie wiem, jak zdefiniować QPixmap, która jest dokładnie taka sama jak rzeczywista mapa okno w qgis. Dzięki za pomoc. Micha
gismic

Odpowiedzi:

10

kopi,

Istnieje kilka podejść do rozwiązania, ale może to być jedno z najprostszych (w zależności od potrzeb):

Wybierz funkcję za pomocą QgsVectorLayer

Zakładając odniesienie do twojej warstwy wektorowej (vlayer) i identyfikatora obiektu (fid). Zobacz też

vlayer.select(fid)

Powiększ wybraną funkcję za pomocą QgsInterface

qgis.utils.iface.actionZoomToSelected().trigger()

Odznacz funkcję za pomocą QgsVectorLayer

vlayer.deselect(fid)

Zapisz płótno jako obraz za pomocą QgsMapCanvas

qgis.utils.iface.mapCanvas().saveAsImage('/Users/me/Desktop/feature.png')

Dzięki takiemu podejściu powstaje możliwie największe zdjęcie, jeśli okno jest rozszerzone do pełnego, ponieważ zapisywanie obszaru roboczego jest w rozdzielczości ekranu. Nie gwarantuje to jednak, że zdjęcia będą miały tę samą skalę powiększenia mapy, a jedynie względnie ten sam rozmiar pikseli. Istnieją inne opcje, takie jak QgisInterface::actionPanToSelected()konieczność zachowania stałej skali powiększenia.

dakcarto
źródło
Łał. Dziękuję za Twoją odpowiedź! Działa to bardzo dobrze!
kopi
1
zajrzyj również do wtyczki „łatwego drukowania”, prawdopodobnie nie tego, czego potrzebujesz, ale może być przydatna do inspiracji.
Giovanni Manghi
Czy można zrobić skalę przed zrobieniem zrzutu ekranu? I jak mogę użyć „actionPanToSelected”? Próbuję w ten sposób: qgis.utils.iface.actionPanToSelected (funkcja, którą funkcja musi przesuwać, aby ...), ale zwraca komunikat o błędzie: „Błąd Attritbute: obiekt QgisInterface nie ma atrybutu actionPanToSelected
kopi
1
Spróbuj qgis.utils.iface.mapCanvas().zoomScale(scale)ustawić skalę mapy. actionPanToSelected () nie przyjmuje parametru, ale zwraca odwołanie do samej akcji (jak powyżej actionZoomToSelected ()). Skorzystaj z jego publicznego slotu, qgis.utils.iface.actionPanToSelected().trigger()aby wystrzelić akcję, która poradzi sobie z ustaleniem, co zostało wybrane.
dakcarto
1
Hmmm. qgis.utils.iface.actionPanToSelected (). Trigger () działa dla mnie pod QGIS w wersji 1.8.0. Czy używasz najnowszej stabilnej wersji (1.8.0)? Funkcja dodano w styczniu , więc to nie w wersji 1.7.x .
dakcarto