Obtendo o caminho do projeto ou arquivo de camada no PyQGIS?


13

Estou gerando novos arquivos de varredura a partir de camadas de vetor em um projeto. Gostaria de salvá-los no mesmo diretório que os arquivos do projeto ou da camada.

Como encontro esse caminho usando o PyQGIS?

Respostas:


17

Para console python:

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

Ou com

dir(QgsProject.instance())

você encontra algo como

fileName()

Para o plugin python (não testado!):

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

14

Para acessar um caminho de arquivo vetorial, em uma camada ativa, esse código funciona bem no Python Console:

>>>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'

Foi testado com a minha varredura 'tiznados_canoa.tif' como uma camada ativa.


3
Esteja ciente de que, no caso da camada vetorial, o caminho após o nome do arquivo também contém ID de canal e camada (C: /shapes/test.shp | layerid = 0). Eu uso o path = path [: path.rfind ('|')] para removê-lo.
Miro

8

Se você deseja acessar um caminho de arquivo vetorial, em uma camada ativa, isso parece funcionar:

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

em seguida, para abrir uma imagem ou texto localizado no mesmo diretório que o mylayer:

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

Resposta útil, mas e o nome do arquivo? Você usa "[% 'FILE' %]", mas eu não entendo o que isso significa ...
GM

1

Eu testei isso no QGIS 3.4
QgsProject.instance().fileName()

retornará o caminho inteiro para o arquivo

'C: /MyDirectory/18809_US66.qgz'

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.