¿Obtiene la ruta del proyecto o el archivo de capa en PyQGIS?


13

Estoy generando nuevos archivos ráster a partir de capas vectoriales en un proyecto. Me gustaría guardarlos en el mismo directorio que el proyecto o los archivos de capa.

¿Cómo encuentro esta ruta usando PyQGIS?

Respuestas:


17

Para la consola de Python:

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

O con

dir(QgsProject.instance())

encuentras algo como

fileName()

Para el complemento de Python (¡no probado!):

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 acceder a una ruta de archivo vectorial, en una capa activa, este código funciona bien en la Consola Python:

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

Fue probado con mi ráster 'tiznados_canoa.tif' como capa activa.


3
Tenga en cuenta que, en el caso de la capa vectorial, la ruta después del nombre del archivo también contiene el ID de la tubería y la capa (C: /shapes/test.shp | layerid = 0). Yo uso path = path [: path.rfind ('|')] para eliminarlo.
Miro

8

Si desea acceder a una ruta de archivo vectorial, en una capa activa, esto parece funcionar:

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

luego para abrir una imagen o texto ubicado en el mismo directorio que mylayer:

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

Respuesta útil, pero ¿qué pasa con el nombre del archivo? Usas "[%" FILE "%]" pero no entiendo qué significa ...
GM

1

Probé esto en QGIS 3.4
QgsProject.instance().fileName()

devolverá la ruta completa al archivo

'C: /MyDirectory/18809_US66.qgz'

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.