Cargar capas

Vamos a abrir algunas capas con datos. QGIS reconoce capas vectoriales y ráster. Además, están disponibles tipos de capas personalizadas, pero no se va a discutir de ellas aquí.

Capas Vectoriales

Para cargar una capa vectorial, especificar el identificador de la fuente de datos de la capa, nombre y nombre del proveedor:

layer = QgsVectorLayer(data_source, layer_name, provider_name)
if not layer.isValid():
  print "Layer failed to load!"

El identificador de la fuente de datos es una cadena y se especifica a cada proveedor de datos vectoriales. El nombre de la capa se utiliza en el widget de la lista de capa. Es importante validar si la capa se ha cargado satisfactoriamente. Si no fue así, se devuelve una instancia de capa no válida.

La manera más rápida para abrir y desplegar una capa vectorial en QGIS es la función addVectorLayer del QgisInterface:

layer = iface.addVectorLayer("/path/to/shapefile/file.shp", "layer name you like", "ogr")
if not layer:
  print "Layer failed to load!"

Esto crea una nueva capa y lo añade al registro de capa de mapa (haciendolo aparecer en la lista de capas) en un paso. La función regresa la instancia de la capa o Nada si la capa no puede cargarse.

La siguiente lista muestra cómo acceder a varias fuentes de datos utilizando los proveedores de datos vectoriales:

  • La librería OGR (archivos shape y muchos otros formatos de archivo) — la fuente de datos es la ruta del archivo.

    • para archivos shape:

      vlayer = QgsVectorLayer("/path/to/shapefile/file.shp", "layer_name_you_like", "ogr")
      
    • para dxf (Observe las opciones internas en la fuente de datos uri):

      uri = "/path/to/dxffile/file.dxf|layername=entities|geometrytype=Point"
      vlayer = QgsVectorLayer(uri, "layer_name_you_like", "ogr")
      
  • La base de datos PostGIS — la fuente de datos es una cadena con toda la información necesaria para crear una conexión a la base de datos PostgreSQL. La clase QgsDataSourceURI puede generar esta cadena para usted. Tenga en cuenta que QGIS tiene que ser compilado con la ayuda de Postgres, de lo contrario este proveedor no esta disponible:

    uri = QgsDataSourceURI()
    # set host name, port, database name, username and password
    uri.setConnection("localhost", "5432", "dbname", "johny", "xxx")
    # set database schema, table name, geometry column and optionally
    # subset (WHERE clause)
    uri.setDataSource("public", "roads", "the_geom", "cityid = 2643")
    
    vlayer = QgsVectorLayer(uri.uri(False), "layer name you like", "postgres")
    

    Nota

    The False argument passed to uri.uri(False) prevents the expansion of the authentication configuration parameters, if you are not using any authentication configuration this argument does not make any difference.

  • CSV or other delimited text files — to open a file with a semicolon as a delimiter, with field “x” for x-coordinate and field “y” for y-coordinate you would use something like this:

    uri = "/some/path/file.csv?delimiter=%s&xField=%s&yField=%s" % (";", "x", "y")
    vlayer = QgsVectorLayer(uri, "layer name you like", "delimitedtext")
    

    Nota

    The provider string is structured as a URL, so the path must be prefixed with file://. Also it allows WKT (well known text) formatted geometries as an alternative to x and y fields, and allows the coordinate reference system to be specified. For example:

    uri = "file:///some/path/file.csv?delimiter=%s&crs=epsg:4723&wktField=%s" % (";", "shape")
    
  • Los archivos GPX — el proveedor de datos “gpx” lee los caminos, rutas y puntos de interés desde archivos GPX. Para abrir un archivo, el tipo (caminos/ruta/punto de interés) se debe especificar como parte de la url:

    uri = "path/to/gpx/file.gpx?type=track"
    vlayer = QgsVectorLayer(uri, "layer name you like", "gpx")
    
  • SpatiaLite database — Similarly to PostGIS databases, QgsDataSourceURI can be used for generation of data source identifier:

    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')
    
  • Las geometrias basadas en WKB de MySQL, a través de OGR — la fuente de datos es la cadena de conexión a la tabla:

    uri = "MySQL:dbname,host=localhost,port=3306,user=root,password=xxx|layername=my_table"
    vlayer = QgsVectorLayer( uri, "my table", "ogr" )
    
  • Conexión WFS:. se define con un URI y utiliza el proveedor WFS:

    uri = "http://localhost:8080/geoserver/wfs?srsname=EPSG:23030&typename=union&version=1.0.0&request=GetFeature&service=WFS",
    vlayer = QgsVectorLayer(uri, "my wfs layer", "WFS")
    

    La uri se puede crear utilizando la librería estándar urllib:

    params = {
        'service': 'WFS',
        'version': '1.0.0',
        'request': 'GetFeature',
        'typename': 'union',
        'srsname': "EPSG:23030"
    }
    uri = 'http://localhost:8080/geoserver/wfs?' + urllib.unquote(urllib.urlencode(params))
    

Nota

You can change the data source of an existing layer by calling setDataSource() on a QgsVectorLayer instance, as in the following example:

# layer is a vector layer, uri is a QgsDataSourceURI instance
layer.setDataSource(uri.uri(), "layer name you like", "postgres")

Capas ráster

Para acceder a los archivos ráster, se utiliza la librería GDAL. Es compatible con una amplia gama de formatos de archivo. En caso que tenga problemas al abrir algunos archivos, compruebe si su GDAL tiene implementado un formato en particular (no todos los formatos están disponibles por defecto). Para cargar un ráster desde un archivo, especificar su nombre de archivo y nombre base:

fileName = "/path/to/raster/file.tif"
fileInfo = QFileInfo(fileName)
baseName = fileInfo.baseName()
rlayer = QgsRasterLayer(fileName, baseName)
if not rlayer.isValid():
  print "Layer failed to load!"

De manera similar que las capas vectoriales, ráster se pueden cargar utilizando la función addRasterLayer de la QgisInterface:

iface.addRasterLayer("/path/to/raster/file.tif", "layer name you like")

Esto crea una capa y lo agrega al registro de capa de mapa (haciendolo aparecer en la lista de capas) en un paso.

Las capas ráster también se pueden crear desde el servicio WCS:

layer_name = 'modis'
uri = QgsDataSourceURI()
uri.setParam('url', 'http://demo.mapserver.org/cgi-bin/wcs')
uri.setParam("identifier", layer_name)
rlayer = QgsRasterLayer(str(uri.encodedUri()), 'my wcs layer', 'wcs')

Ajustes del URI detallado se pueden encontrar en documentación de proveedor

Como alternativa se puede cargar una capa ráster desde un servidor WMS. Sin embargo actualmente no es posible acceder a las respuestas de GetCapabilities desde el API — se debe saber que capas desea:

urlWithParams = 'url=http://irs.gis-lab.info/?layers=landsat&styles=&format=image/jpeg&crs=EPSG:4326'
rlayer = QgsRasterLayer(urlWithParams, 'some layer name', 'wms')
if not rlayer.isValid():
  print "Layer failed to load!"

Registro de capa de mapa

Si desea utilizar las capas abiertas para la representación, no olvide de añadirlos al registro de capa de mapa. El registro capa de mapa asume la propiedad de las capas y se puede acceder más tarde desde cualquier parte de la aplicación por su ID único. Cuando se retira la capa de registro capa de mapa, que se elimina, también.

Añadir una capa al registro:

QgsMapLayerRegistry.instance().addMapLayer(layer)

Las capas se destruyen de forma automática en la salida, por eso si se desea eliminar la capa de forma explícita, utilice:

QgsMapLayerRegistry.instance().removeMapLayer(layer_id)

Para una lista de capas cargadas e identificadores de capas, utilice:

QgsMapLayerRegistry.instance().mapLayers()