好文档 - 专业文书写作范文服务资料分享网站

QGIS Python开发手册-加载图层

天下 分享 时间: 加入收藏 我要投稿 点赞

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()

QGIS Python开发手册-加载图层

QGISPython开发手册-加载图层August6,2015barry.z加载图层在QGIS中,图层主要分为矢量图层和栅格图层,另外还支持自定义图层,本文不予讨论。矢量图层加载矢量图层,需要知道图层的数据源标识、名称和数据源类型(provider),加载代码如下:layer=Qgs
推荐度:
点击下载文档文档为doc格式
00kzc4shzr3blzb1bwa62p7v43zg7t00htx
领取福利

微信扫码领取福利

微信扫码分享