รับพา ธ ของโครงการหรือไฟล์เลเยอร์ใน PyQGIS หรือไม่


13

ฉันกำลังสร้างไฟล์แรสเตอร์ใหม่จากชั้นเวกเตอร์ในโครงการ ฉันต้องการบันทึกไว้ในไดเรกทอรีเดียวกันกับโครงการหรือไฟล์เลเยอร์

ฉันจะค้นหาเส้นทางนี้โดยใช้ PyQGIS ได้อย่างไร

คำตอบ:


17

สำหรับคอนโซลหลาม:

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

หรือด้วย

dir(QgsProject.instance())

คุณพบสิ่งที่ต้องการ

fileName()

สำหรับปลั๊กอินหลาม (ไม่ได้ทดสอบ!):

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

14

ในการเข้าถึงไฟล์เวคเตอร์บนเลเยอร์ที่ใช้งานได้รหัสนี้ทำงานได้ดีใน 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'

มันทดสอบกับแรสเตอร์ 'tiznados_canoa.tif' ของฉันเป็นเลเยอร์ที่ใช้งานอยู่


3
ระวังในกรณีของเวกเตอร์เลเยอร์พา ธ หลังจากชื่อไฟล์ยังมีรหัสท่อและเลเยอร์ (C: /shapes/test.shp | layerid = 0) ฉันใช้ path = path [: path.rfind ('|')] เพื่อลบออก
Miro

8

หากคุณต้องการเข้าถึงพา ธ ไฟล์เวคเตอร์บนเลเยอร์ที่ใช้งานอยู่สิ่งนี้ดูเหมือนจะใช้ได้:

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

จากนั้นเพื่อเปิดรูปภาพหรือข้อความที่อยู่ในไดเรกทอรีเดียวกับ mylayer:

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

คำตอบที่มีประโยชน์ แต่แล้วชื่อไฟล์ล่ะ? คุณใช้ "[%" FILE "%]" แต่ฉันไม่เข้าใจความหมายของมันคือ ...
GM

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.