Uzyskiwanie ścieżki projektu lub pliku warstwy w PyQGIS?


13

Generuję nowe pliki rastrowe z warstw wektorowych w projekcie. Chciałbym zapisać je w tym samym katalogu, co pliki projektu lub warstwy.

Jak znaleźć tę ścieżkę za pomocą PyQGIS?

Odpowiedzi:


17

W przypadku konsoli Python:

QgsProject.instance().readPath("./") # also try "../"

Lub z

dir(QgsProject.instance())

znajdziesz coś takiego

fileName()

W przypadku wtyczki Python (nie testowane!):

from PyQt4.QtGui import QMessageBox
from qgis.core import QgsProject
path_absolute = QgsProject.instance().readPath("./")
QMessageBox.information(None, "Title", "AP: " + unicode(path_absolute))

14

Aby uzyskać dostęp do ścieżki pliku wektorowego na aktywnej warstwie, ten kod działa dobrze w konsoli Pythona:

>>>import os
>>>myfilepath= iface.activeLayer().dataProvider().dataSourceUri()
>>>myfilepath
u'/home/zeito/tiznados_canoa.tif'
>>>(myDirectory,nameFile) = os.path.split(myfilepath)
>>>myDirectory
u'/home/zeito'
>>>nameFile
u'tiznados_canoa.tif'

Został przetestowany z moim rastrem „tiznados_canoa.tif” jako warstwą aktywną.


3
Należy pamiętać, że w przypadku warstwy wektorowej ścieżka po nazwie pliku zawiera także identyfikator potoku i warstwy (C: /shapes/test.shp | layerid = 0). Używam path = path [: path.rfind ('|')], aby go usunąć.
Miro,

8

Jeśli chcesz uzyskać dostęp do ścieżki pliku wektorowego na aktywnej warstwie, wydaje się, że działa:

myfilepath= os.path.dirname( unicode( qgis.utils.iface.activeLayer().dataProvider().dataSourceUri() ) ) ;
fic = myfilepath + "[% "FILE" %]"

następnie, aby otworzyć zdjęcie lub tekst znajdujące się w tym samym katalogu co mylayer:

from PyQt4 import QtWebKit, QtCore ; vue=QtWebKit.QWebView() vue.setUrl( QtCore.QUrl( fic ) ) ; vue.show()

Przydatna odpowiedź, ale co z nazwą pliku? Używasz „[%” PLIK ”%]”, ale nie rozumiem, co to znaczy ...
GM,

1

Testowałem to na QGIS 3.4
QgsProject.instance().fileName()

zwróci całą ścieżkę do pliku

„C: /MyDirectory/18809_US66.qgz”

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.