PyQGIS開發 -- 地圖控制項交互
本節將會詳細介紹與QGIS地圖控制項交互所需要的一些常用對象與函數。
同時,本節開始,將會大量加QGIS的Python API文檔的介紹,畢竟看API文檔才是學習功能的最佳途徑。
獲取API文檔
打開QGIS的Python API文檔,只需要在QGIS的「Help」菜單下面,選擇「API Documentation」就可以了,如下圖。
需要注意的是Python的API和C++的API是一致的(因為底層都是C++開發的),所以,這API文檔也是一樣的,看到API文檔裡面有C++的指針不要驚訝。
打開之後,默認是最新版本的API,需要根據你的QGIS版本選擇對應的API版本進行查看。
QgsInterface類
在API文檔裡面,找到QgsInterface類(擅於用瀏覽器的搜索功能),這個類就是Python插件與QGIS軟體中的控制項進行交互的直接介面。來看一下這個類的官方說明。
QgsMapCanvas類
我們找到QgsInterface這個類裡面的 MapCanvas 方法(擅於用瀏覽器的搜索功能):
它返回一個QgsMapCanvas的指針,也就是地圖控制項了。因此,為了獲取QGIS地圖控制項,我們可以在QGIS的Python控制台輸入如下代碼:
canvas = qgis.utils.iface.mapCanvas()n
這樣,就得到了地圖控制項對象。
接下來,我們就可以對地圖控制項進行操作了。
但是,我們究竟可以操作些什麼呢?
當然還是先看看QgsMapCanvas這個類的API啦。(點開看大圖)
以上僅僅整理了可以直接調用的功能,還不包含繼承其他類的功能。
這麼多功能,一個個講的話,要講到天荒地老了。但實際上也沒有必要一個個講,只要舉幾個例子,就能夠舉一反三了。
設置/獲取MapCanvas的屬性
其實看到API以後,設置、獲取MapCanvas屬性這種操作就一目了然了。
下面我就僅僅列舉幾項。
首先,是獲取MapCanvas,這個上面講過了:
canvas = qgis.utils.iface.mapCanvas()n
然後,直接調用對應的介面:
# 獲取地圖單位ncanvas.mapUnits()nn# 設置地圖單位ncanvas.setMapUnits(1) n
地圖單位是一個枚舉,可以對照下面的圖看具體類型
# 獲取數據圖層nlayer = canvas.layer(0)nn# 獲取總共圖層個數ncanvas.layerCount()nn# 獲取所有圖層,返回列表nlayerList = canvas.layers()nn# 獲取當前地圖範圍,返回QgsRectanglenextentRec = canvas.extent()nn# 設置地圖畫布顏色nfrom PyQt4 import QtGuincanvas.setCanvasColor(QtGui.QColor(255, 0, 0)) # 指定為紅色ncanvas.refresh() # 刷新顯示n
基本都是一樣的調用方式,只不過參數或者返回值有區別而已,具體看API文檔。
將地圖保存成圖片
這裡單獨講一個比較常用的功能,把地圖保存成圖片格式導出去。
具體用到的是QgsMapCanvas的saveAsImage這個介面:
# 第一種情況,默認保存成png格式ncanvas.saveAsImage(r"D:test.png")nn# 第二種情況,更改導出的格式ncanvas.saveAsImage(r"D:test.jpg", None, "JPEG")nn# 第三種情況,更改導出的範圍nfrom PyQt4 import QtGuinpixmap = QtGui.QPixmap(500, 500) # 從左上角起算的矩形ncanvas.saveAsImage(r"D:test.jpg", pixmap, "JPEG")n
----------------------------------
OK,感謝閱讀,歡迎批評指正!
推薦閱讀:
※基於ArcGIS的python編程 11、利用多進程優化根據Excel表格批量生成點數據,批量裁剪
※WebGIS開發進階練手題(二)
※為什麼cityengine中文版教程這麼少?cityengine相比其他建模軟有什麼優勢?
※Awesome GIS(GIS Tech Stack技術棧)