ฉันกำลังสร้างไฟล์แรสเตอร์ใหม่จากชั้นเวกเตอร์ในโครงการ ฉันต้องการบันทึกไว้ในไดเรกทอรีเดียวกันกับโครงการหรือไฟล์เลเยอร์
ฉันจะค้นหาเส้นทางนี้โดยใช้ PyQGIS ได้อย่างไร
ฉันกำลังสร้างไฟล์แรสเตอร์ใหม่จากชั้นเวกเตอร์ในโครงการ ฉันต้องการบันทึกไว้ในไดเรกทอรีเดียวกันกับโครงการหรือไฟล์เลเยอร์
ฉันจะค้นหาเส้นทางนี้โดยใช้ PyQGIS ได้อย่างไร
คำตอบ:
สำหรับคอนโซลหลาม:
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))
ในการเข้าถึงไฟล์เวคเตอร์บนเลเยอร์ที่ใช้งานได้รหัสนี้ทำงานได้ดีใน 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' ของฉันเป็นเลเยอร์ที่ใช้งานอยู่
หากคุณต้องการเข้าถึงพา ธ ไฟล์เวคเตอร์บนเลเยอร์ที่ใช้งานอยู่สิ่งนี้ดูเหมือนจะใช้ได้:
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()
ฉันทดสอบสิ่งนี้บน QGIS 3.4
QgsProject.instance().fileName()
จะส่งคืนพา ธ ทั้งหมดไปยังไฟล์
'C: /MyDirectory/18809_US66.qgz'