TL;DR
Para obtener todas las características de una capa y el nombre de la capa no necesita activarlo. Sólo uso
layer = QgsMapLayerRegistry.instance().mapLayersByName( name )[0]
poles = layer.getFeatures()
Capa Activa
Primero de todo, usted no necesita preocuparse acerca de la capa activa. La capa activa es la capa que está seleccionada en el árbol de capas y por lo tanto es bueno para las dos cosas
- la selección de una capa de código de prueba
- permitir que el usuario seleccione una capa para operar en
La primera es útil cuando usted está en desarrollo, la segunda es lo que todos los maptools se basan en: la capa seleccionada actualmente (el activo ) es modificado, seleccionado, eliminado...
Métodos para acceder a las capas
Sin embargo, parece que quieren acceder a las capas que no se basa en la entrada del usuario, pero basado en algo más.
La identificación de layes
Todas las capas tienen
- Una identificación que debe ser único
- Un nombre que no es necesariamente (aunque a menudo) única y puede ser cambiada por el usuario
- Una referencia (a menudo referido como un puntero , pero en python que los dos términos son intercambiables) que es único y estable para toda la vida de una capa durante la aplicación de tiempo de ejecución y puede ser asignado a una variable (por ejemplo
vlayer
es una referencia a la capa activa en el ejemplo).
- Propiedades como la URI (nombre de tabla, etc.)
Si usted ya tiene una referencia a la capa (porque se ha creado/añadido en su plugin) sólo el uso que uno.
Si no, piense acerca de lo que la propiedad que usted desea utilizar para obtener acceso a la capa. Es muy probable que algo que es estable (la capa de id es muy estable durante el tiempo de vida de un proyecto, pero siempre es diferente para los diferentes proyectos), el nombre es ajustable por el usuario, la tabla puede depender de la fuente de datos.
El acceso a las capas
No es el mapa de la capa de registro que le permite acceder a las capas. Gestiona las referencias a todas las capas.
registry = QgsMapLayerRegistry.instance()
Si usted tiene el id de la capa de ir con
layer = registry.mapLayer( id )
Si usted tiene el nombre de la capa
layer = registry.mapLayersByName( name )[0] # The method returns a list since it can be ambiguous, 0 picks the first entry in the list
Si usted tiene algo más que usted tiene que escribir su propio código:
for lyr in registry.mapLayers().values():
if lyr.dataProvider().dataSourceUri().table() == 'mytable':
layer = lyr
break
O una abreviatura que hace lo mismo y te hace sentir más hacker ish, pero hará que la gente que tendrá que mantener el código más adelante en costo algo de tiempo extra para descifrar:
layer = (l for l in registry.mapLayers().values() if l.dataProvider().dataSourceUri().table() == 'mytable').next()