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ć?


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.


Ł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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.