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技術棧)

TAG:Python | GIS地理信息系统 | GIS软件工程师 |