Monthly Archives: August 2015

QGIS python开发手册–使用栅格图层

使用栅格图层 图层详细信息 栅格图层一般包含一个或多个波段,即单波段栅格图层或多波段栅格图层。一般来说彩色图形包含红、蓝、绿三个波段。单波段图层一般用来表示连续变量(如高程)或离散变量(如土地利用)。在有些情况下,栅格图层包含一个调色板,栅格值对应的颜色会存储在调色板中,下面代码获取栅格图层的基本信息,例如长度、宽度、范围波段数、元数据等等。 rlayer.width(), rlayer.height() (812, 301) rlayer.extent() <qgis._core.QgsRectangle object at 0x000000000F8A2048> rlayer.extent().toString() u’12.095833,48.552777 : 18.863888,51.056944′ rlayer.rasterType() 2 # 0 = GrayOrUndefined (single band), 1 = Palette (single band), 2 = Multiband rlayer.bandCount() 3 rlayer.metadata() u’<p class=”glossy”>Driver:</p>…’ rlayer.hasPyramids() False 渲染器 当栅格图层加载后,QGIS会根据栅格类型使用一个默认的渲染器。渲染器可以在图层的属性中修改,也可以使用程序修改.下面代码查询当前使用的渲染器: >>> rlayer.renderer() <qgis._core.QgsSingleBandPseudoColorRenderer object at 0x7f471c1da8a0> >>> rlayer.renderer().type() u’singlebandpseudocolor’ 使用QgsRasterLayer对象的setRenderer()方法可以给图层设置渲染器,可选的渲染器包括: * QgsMultiBandColorRenderer * QgsPalettedRasterRenderer […]

python Leave a comment

QGIS Python开发手册-加载图层

加载图层 在QGIS中,图层主要分为矢量图层和栅格图层,另外还支持自定义图层,本文不予讨论。 矢量图层 加载矢量图层,需要知道图层的数据源标识、名称和数据源类型(provider),加载代码如下: layer = QgsVectorLayer(data_source, layer_name, provider_name) if not layer.isValid(): print “Layer failed to load!” 根据数据源类型的不同,数据源标识也不同。图层名称用于在图层列表Widget里显示。需要注意的是在加载图层后要判断是否加载成功,可以通过layer的isValid()方法进行判断。 在QGIS中快速打开并显示图层的方式是使用QgisInterface的addVectorLayer方法,代码如下: layer = iface.addVectorLayer(“/path/to/shapefile/file.shp”, “layer_name_you_like”, “ogr”) if not layer: print “Layer failed to load!” 该方法创建一个图层,静将图层假入到地图对象中,其返回一个图层对象。如果图层对象为None,则图层加载失败。 下面介绍加载不同数据源的图层: * OGR–数据源标识为指向文件的路径 vlayer = QgsVectorLayer(“/path/to/shapefile/file.shp”, “layer_name_you_like”, “ogr”) * PostGIS数据库–数据源标识是数据库连接字符串,可以通过QgsDataSourceURI类来生成,需要注意的是QGIS编译的时候选择了支持Postgres,否则不支持PostGIS。代码如下: uri = QgsDataSourceURI() # set host name, port, database name, username and […]

python Leave a comment

QGIS python开发手册-加载工程文件

加载工程文件 在QGIS中加载工程文件需要使用QgsProject实例的read()方法,该方法需要传入QFileInfo对象。QFileInfo对象指定了QGIS工程文件的路径,下面的代码加载QGIS的工程文件到当前应用程序中: # If you are not inside a QGIS console you first need to import # qgis and PyQt4 classes you will use in this script as shown below: from qgis.core import QgsProject from PyQt4.QtCore import QFileInfo # Get the project instance project = QgsProject.instance() # Print the current project file name (might be […]

python Leave a comment

QGIS python开发手册

QGIS python开发手册 原文地址:http://docs.qgis.org/testing/en/docs/pyqgisdevelopercookbook/intro.html QGIS是一个用户界面友好的桌面地理信息系统,可运行在Linux、Unix、Mac OSX和Windows等平台之上。QGIS是基于Qt,使用C++开发的一个用户界面友好、跨平台的开源版桌面地理信息系统。 QGIS项目开始于2002年 5月,是基于跨平台的图形工具Qt软件包,采用C++ 语言开发的一个GIS软件。目前的开发非常活跃,当前(2014年)的最新版本是QGIS 2.10 版。QGIS源码采用 GNU General Public License协议对外发布。 QGIS的官方网址为http://www.qgis.org/ 从0.9版本开始QGIS就支持Python进行开发,称之为PyQGIS。PyQGIS依赖于SIP和PyQt4. 在QGIS中使用Python 启动QGIS时运行Python代码 有两种方式:设置PYQGIS_STARTUP环境变量和使用startup.py文件 设置PYQGIS_STARTUP环境变量 可以通过设置环境变量PYQGISSTARTUP来达到在QGIS初始化完成前执行python代码的目的。将PYQGISSTARTUP设置为用户想执行的python文件即可。 这种方法一般情况下很少用到,但这是在QGIS初始化完成之前执行python代码的方法之一。这个方法在清理系统路径(sys.path)的时候非常有用,系统路径里面有时候含有一些无效的路径。还有就是一些python模块需要单独初始化的情况使用。 使用startup.py文件 每次QGIS启动的时候,都会在用户的Python home目录(一般为.qgis2/python目录)下面查找startup.py文件,如果存在,则执行。 Python控制台 在QGIS中,可以通过Python控制台来执行Python代码。在Plugins 菜单下选择 Python Console,打开Python控制台,如图1: 图中的代码用来获取当前选中的图层,并显示其ID,如果该图层是矢量图层,则显示图层包含的要素个数。 在QGIS的执行环境中默认有一个iface变量,该变量是QgsInterface类型的实例。使用这个变量可以访问地图的canvas,菜单,工具条以及其他模块。 为了方便用户,在Python控制台启动的时候会自动加载相关模块,代码如下: from qgis.core import * import qgis.utils 如果用户经常使用Python控制台,可以通过Settings 菜单下的Configure shortcuts工具设置快捷键,方便快速启动。 Python插件 QGIS支持以插件的方式增强其功能,在支持Python之前,只能通过C++来实现。支持Python后,可以通过Python来实现插件。相对于c++实现的插件,Python实现的插件开发更简单并且更容易分发。目前,已经有非常多的Python插件可以下载。用户可以通过Plugins菜单下的manage and install plugins工具来获取、安装、卸载插件。 Python应用程序 在数据处理的时候,经常需要使用脚本的方式来自动化的批量处理。使用PyQGIS,可以很容易的实现。导入qgis.core模块并初始化,用户就可以使用了。 如果用户想创建一个可交互的应用程序,例如实现测量数据、将地图导出到PDF中等功能,则使用 qgis.gui模块即可。 qgis.gui模块提供了很多GUI组件供用户使用。地图组件可以很容易到集成用户的应用程序中。 在自定义应用程序中使用pyQGIS 首先,导入QGIS模块,然后设置QGIS路径。如果用户在调用setPrefixPath的时候将第二个参数设置为True,QGIS会将该目录下的所有目录都加入到路径中。最后调用initQgis()方法,让QIGS查找所有有效的数据源。代码如下: from […]

python Leave a comment