搜尋此網誌

2017年10月11日 星期三

利用Python指令實作QGIS之基礎教學

自從QGIS 1.0版釋出後就開始支援Python了
也因為QGIS與Python同為開源者的愛好
QGIS上就有越來越多的Python小工具可以用
今天就來示範在QGIS的Python主控台
輸入簡單的Python指令來操作圖層的相關應用

首先開啟QGIS,並隨便加入一個向量圖層
(這裡用臺北市垃圾清運路線圖為例,資料來源:https://data.gov.tw/ )
開啟後如下圖,該圖的屬性資料如圖的左下方

接下來開啟 附加元件>Python主控台
就會看到如下圖的Python主控台命令列輸入框


可以直接輸入dir,就會列出所有可以用的function

但在呼叫function使用時,大小寫有差喔,記得要注意
接下來可以先設定layer為目前當前開啟的layer,方便之後下指令操作
layer = iface.activeLayer()

範例一:
接下來就來看簡單的印出前5行的DepName與Address欄位的屬性資料

layer = iface.activeLayer()
i=0
for f in layer.getFeatures():
#印出屬性資料
  print f['DepName'], f['Address']
  i=i+1
  if i>5:
    break


範例二:
若想知道圖層的坐標該怎麼寫呢?
可以透過geometry()這個function來取得
宣告一個geom 來接收 f.geometry()

layer = iface.activeLayer()
i=0
for f in layer.getFeatures():
  #設定geom為每一個feature的geometry
  geom = f.geometry()
  #透過geom取得坐標
  #print geom.asPoint()
  #print geom.asPoint().x()
  print '%s, %s, %f, %f' % (f['Region'], f['CarNo'], geom.asPoint().y(), geom.asPoint().x())
  i=i+1
  if i>5:
    break


範例三:
最後若想把整張圖層的屬性資料結果匯出成csv或txt檔案
該怎麼寫呢?

layer = iface.activeLayer()
output_file = open('d:/PointData.txt', 'w')
#output_file = open('d:/PointData.csv', 'w')
for f in layer.getFeatures():
  #設定geom為每一個feature的geometry
  geom = f.geometry()
  #透過geom取得坐標
  line = '%s,%s,%f,%f\n' % (f['Region'], f['CarNo'], geom.asPoint().y(), geom.asPoint().x())
  #編碼UTF-8格式
  unicode_line = line.encode('utf-8')
  output_file.write(unicode_line)

output_file.close()


最後輸出結果則如下圖

以上就是利用Python程式碼操作QGIS的元件
很簡單的範例,提供大家參考

沒有留言:

張貼留言