QGIS Python开发手册-加载图层
August 6, 2015barry.z
加载图层
在QGIS中,图层主要分为矢量图层和栅格图层,另外还支持自定义图层,本文不予讨论。
矢量图层
加载矢量图层,需要知道图层的数据源标识、名称和数据源类型(provider),加载代码如下:
layer = QgsVectorLayer(data_source, layer_name, provider_name)
ifnot layer.isValid():
print\
根据数据源类型的不同,数据源标识也不同。图层名称用于在图层列表Widget里显示。需要注意的是在加载图层后要判断是否加载成功,可以通过layer的isValid()方法进行判断。
在QGIS中快速打开并显示图层的方式是使用QgisInterface的addVectorLayer方法,代码如下:
layer = iface.addVectorLayer(\\
ifnot layer:
print\
该方法创建一个图层,静将图层假入到地图对象中,其返回一个图层对象。如果图层对象为None,则图层加载失败。
下面介绍加载不同数据源的图层: * OGR–数据源标识为指向文件的路径
vlayer = QgsVectorLayer(\\
* PostGIS数据库–数据源标识是数据库连接字符串,可以通过QgsDataSourceURI类来生成,需要注意的是QGIS编译的时候选择了支持Postgres,否则不支持PostGIS。代码如下:
uri = QgsDataSourceURI()
# set host name, port, database name, username and password
uri.setConnection(\
# setdatabaseschema, table name, geometry columnand optionally
# subset (WHERE clause)
uri.setDataSource(\
vlayer = QgsVectorLayer(uri.uri(), \
* CSV或其他平面数据文件–用分号作为分隔符,并且x字段存储x坐标,y字段存储y坐标,使用上述规则打开文件,则相关代码如下:
uri = \% (\\\
vlayer = QgsVectorLayer(uri, \
需要注意的是,从QGIS1.7开始,该类型的数据源标识为URL,因此路径要包含file://前缀。另外,使用该数据源还可以加载WKT格式的数据,并且允许定义参考系,相关代码如下:
uri =
\% (\\
* GPX–gpx数据源可以读取从gpx文件里读取tracks, routes and waypoints 。使用gpx数据源的时候需要在路径中指定上述三种类型中的一种,代码如下:
uri = \
vlayer = QgsVectorLayer(uri, \
* SpatiaLite数据库–从QGIS1.1开始支持,类似于PostGIS数据库
uri = QgsDataSourceURI()
uri.setDatabase('/home/martin/test-2.3.sqlite')
schema = ''
table = 'Towns'
geom_column = 'Geometry'
uri.setDataSource(schema, table, geom_column)
display_name = 'Towns'
vlayer = QgsVectorLayer(uri.uri(), display_name, 'spatialite')
* MySQL,几何对象为WKB类型,通过OGR读取–数据源标识为数据库连接字符串,代码如下:
uri =
\_table\
vlayer = QgsVectorLayer( uri, \
* WFS连接–数据源标识为URI,代码如下:
uri = \23030&typename=union&version=1.0.0&request=GetFeature&service=WFS\
vlayer = QgsVectorLayer(\
uri也可以通过urilib创建:
params = {
'service': 'WFS',
'version': '1.0.0',
'request': 'GetFeature',
'typename': 'union',
'srsname': \
}
uri = 'http://localhost:8080/geoserver/wfs?' + urllib.unquote(urllib.urlencode(params))
栅格图层
在QGIS中,使用GDAL来读取栅格图层,因此支持非常多种栅格格式。如果打开某些栅格文件有问题,请检查GDAL是否支持这种格式。
加载栅格图层,只需要指定栅格文件的路径和名称即可,代码如下:
fileName = \
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)
ifnot rlayer.isValid():
print\
和矢量图层类似,使用QgisInterface的addRasterLayer方法可以快速加载和显示栅格图层,代码如下:
iface.addRasterLayer(\
上面的代码会创建一个栅格图层,并将该图层添加到地图对象中。 栅格图层还可以从WCS服务中创建,代码如下:
urlWithParams =
'url=http://wms.jpl.nasa.gov/wms.cgi&layers=global_mosaic&styles=pseudo&format=image/jpeg&crs=EPSG:4326'
rlayer = QgsRasterLayer(urlWithParams, 'some layer name', 'wms')
ifnot rlayer.isValid():
print\
同样的,栅格图层还可以从WMS服务创建,代码如下:
urlWithParams =
'url=http://wms.jpl.nasa.gov/wms.cgi&layers=global_mosaic&styles=pseudo&format=image/jpeg&crs=EPSG:4326'
rlayer = QgsRasterLayer(urlWithParams, 'some layer name', 'wms')
ifnot rlayer.isValid():
print\
图层加入到地图中
图层加载完成后,如果想进行显示,需要加载到地图中。代码如下:
QgsMapLayerRegistry.instance().addMapLayer(layer)
当程序退出的时候,图层会自动析构,如果想手动删除,可以使用下面的代码:
QgsMapLayerRegistry.instance().removeMapLayer(layer_id)
用户可以通过图层的id来获取地图中图层,下面的方法列出地图对象中的所有图层:
QgsMapLayerRegistry.instance().mapLayers()