You are here:GeoTux»Geo-Forums»ordenar las capas vectoriales de panel izquierdo de QGIS

Statistics

Invitados: 74
Usuarios registrados: 3232
Usuarios en línea:
-
Registrados hoy:
-

Register

RSS

Blogs and News:
Recibe las actualizaciones en Geo-Noticias y Geo-Blogs

Get them by e-mail
Recibir Geo-Noticias y Geo-Blogs por e-mail

¿What is this about?

Welcome, Guest
Username Password: Remember me

ordenar las capas vectoriales de panel izquierdo de QGIS
(1 viewing) (1) Guest
  • Page:
  • 1

TOPIC: ordenar las capas vectoriales de panel izquierdo de QGIS

ordenar las capas vectoriales de panel izquierdo de QGIS 11 Sep 2013 22:03 #1047

  • fabi_386
  • OFFLINE
  • Entusiasta
  • Posts: 15
  • Karma: 0
Estoy realizando el trabajo de fin de carrera, pero tengo dificultades la primera es que en el panel izquierdo de Qgis donde estan las leyendas de las capas; yo adiciono una capa a través de un plugin que programe en python; al momento de ejecutar el adiciona la nueva capa en orden aleatorio y quiero que aparezca de primera en la lista.

como losgro esto

Gracias

ATT: fabi_386

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 12 Sep 2013 00:19 #1048

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
Qué versión de QGIS usas?

Déjanos ver el fragmento de código donde estás adicionando la capa.

Saludos

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 15 Sep 2013 18:42 #1051

  • fabi_386
  • OFFLINE
  • Entusiasta
  • Posts: 15
  • Karma: 0
Hola tuxman de antemano te doy las gracias porque los post [1] y [2] y [3] en este ultimo que es la adición de tabla de contenido al visor necesito que al adicionar una capa a tráves de código python 2.7.5 a la tabla de contenido aparezcan de primera en la lista de leyenda esta pregunta surge debido a que desarrolle un plugin para QGis Lisboa 1.8.0 y al adicionarle una capa estas se adicionaban de forma aleatoria cuando ya habian capas en la tabla de contenido de QGis. como hago esto Gracias

[1]geotux.tuxfamily.org/index.php/es/compon...res-qgis-python-y-qt

[2] geotux.tuxfamily.org/index.php/es/compon...ra-pyqgis-en-windows

[3]geotux.tuxfamily.org/index.php/es/compon...es-basadas-en-pyqgis

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 17 Sep 2013 01:57 #1053

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
Hola, la tabla de contenido (TOC) ha sido históricamente un problema en QGIS debido a que la manera de programarla desde pyQGIS cambia casi con cada versión.

En la versión 1.8.0 de QGIS, si te das cuenta, cuando agregas una capa desde pyQGIS, la capa queda en la 1era posición si es que no hay capa seleccionada, pero si hay una capa seleccionada en la TOC entonces la nueva capa se sitúa 1 posición arriba de la seleccionada. Como si fuera poco, para contribuir al problema, en la versión 1.8.0 se agregó la funcionalidad de tener un listado aparte de capas para controlar el renderizado, esto es, si el usuario lo decide, la TOC no necesariamente refleja el orden de renderizado!

Sin embargo, esto es programación y casi siempre hay soluciones , por más que sea utilizando fuerza bruta . Si en tu TOC no vas a manejar grupos de capas, el siguiente script te puede dar luces sobre cómo se carga una capa siempre en la 1era posición de la TOC. Lo he probado en QGIS 1.8.0 en la terminal de Python de QGIS y parece funcionar. Como ves, hay que entrar a las entrañas de QGIS, cosa nada deseable, pues debería existir esta posibilidad con funciones de más alto nivel (es decir, sin llegar a manejar objetos Qt4).

from PyQt4.QtCore import *
from PyQt4.QtGui import *
 
iface=qgis.utils.iface
 
layer = QgsVectorLayer("/ruta/a/un/shapefile.shp", "mi_shape", "ogr")
 
mc = iface.mapCanvas()
mc.setRenderFlag( False ) # Evitar que el canvas dibuje
QgsMapLayerRegistry.instance().addMapLayers([layer])
 
mw = iface.mainWindow()
lgd = mw.findChild(QTreeWidget, "theMapLegend")
 
# Si hay item seleccionado, la nueva capa queda ubicada arriba de este, ocupando ahora su índice
if lgd.currentItem().isSelected():
item = lgd.currentItem()
index = lgd.indexOfTopLevelItem( item )
lgd.takeTopLevelItem( index )
lgd.insertTopLevelItem( 0, item )
layers = mc.layers()
layer = layers.pop(index)
layers.insert(0, layer)
mc.setLayerSet([qgis.gui.QgsMapCanvasLayer(l) for l in layers])
else:
print "La nueva capa ya está en la 1era posición"
 
mc.setRenderFlag( True ) # Activar de nuevo el canvas


Espero te sirva, no se cómo más lograrlo,

Saludos,

Tuxman


Pdta: Me basé en este post de StackExchange para la respuesta: gis.stackexchange.com/questions/41977/so...is-table-of-contents
Last Edit: 17 Sep 2013 02:01 by tuxman.

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 17 Sep 2013 19:21 #1056

  • fabi_386
  • OFFLINE
  • Entusiasta
  • Posts: 15
  • Karma: 0
Hola, tuxman gracias por el código.Estuve ejecutando la aplicacion que descargue de [1] pero tenía problemas al cargar la capa, estos ya los solucione una vez hecho esto me dispuse a seguir [2] y descargue el archivo "legend.py", pero al ejecutar la aplicación aparece el (TOC) junto con el visor, al momento de cargar la capa aparece en el visor pero no en el (TOC) entonces mire en los comentarios [2] en donde encontre un persona que tenía el mismo problema y donde usted le propone la solucion [3] yo decidí seguir este procedimiento y funciono ahora al ejecutar la aplicación tanto el (TOC) como el visor muestra la capa agragada, pero la principal inquietud es que si el codigo que me proporciona usted y que ordena la lista en el (TOC) no tendrá conflictos con la modificación hecha al código de "legend.py" en [3]

gracias

[1] geotux.tuxfamily.org/index.php/es/compon...res-qgis-python-y-qt
[2]geotux.tuxfamily.org/index.php/es/compon...es-basadas-en-pyqgis

[3]downloads.tuxfamily.org/tuxgis/geoblogs/...ctions_to_replace.py
Last Edit: 17 Sep 2013 19:24 by fabi_386.

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 17 Sep 2013 20:48 #1057

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
El código que publiqué en este tema del foro es exclusivamente para QGIS. Entendí que habías hecho un plugin para QGIS y que querías que al adicionar una capa, esta apareciera en la primera posición en la TOC.

Lo que me preguntas ahora es diferente, porque se refiere ya no a QGIS sino a una aplicación creada con pyQGIS. Para responderte esta nueva pregunta, esperaría que todas las capas nuevas aparezcan en la 1era posición de la TOC, puesto que así se ha programado en el archivo legend.py:

def addLayer( self, legendLayer ):
""" Add a legend item to the legend widget """
self.insertTopLevelItem ( 0, legendLayer ) # <-- Insertar en la 1era posición
self.expandItem( legendLayer )
self.setCurrentItem( legendLayer )
self.updateLayerSet()


Eso si, no te confundas con el código que publiqué dos mensajes más anteriores, ese es para QGIS, no para las aplicaciones personalizadas que se han hecho con pyQGIS (como el visor de shapefiles y la leyenda que encuentras en los geo-blogs).

Saludos
Last Edit: 17 Sep 2013 20:50 by tuxman.

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 19 Sep 2013 18:25 #1058

  • fabi_386
  • OFFLINE
  • Entusiasta
  • Posts: 15
  • Karma: 0
Hola, tuxman perdona la confusión, pero el propósito de este mensaje es ser lo más claro posible. Inicialmente programe un plugin para QGIS Lisboa 1.8.0 Utilizando el plugin Builder. El usuario previamente carga las capas de la base de datos PosgreSQL 9.2 con PosGIS 2.0 desde QGIS Lisboa 1.8.0, después de hacer esto, el usuario tiene a su disposición el plugin que se conecta a la base de datos PostgreSQL 9.2 con PostGIS 2.0 y crear una capa a través de una consulta SQL, la cual hace geoprocesamiento sobre las tablas de la base de datos (aprovechando las funciones predefinidas que tiene PostGIS 2.0 para Geometry, esto ahorra programación en el plugin) esta se agregaba al (TOC) y al visor de La aplicación QGIS Lisboa 1.8.0.

Pero todo cambio cuando el asesor del proyecto observo el plugin nos felicitó por su funcionamiento , pero nos sugirió que no trabajáramos directamente sobre QGIS Lisboa 1.8.0 porque el usuario final necesitaría conocer todo sobre esta aplicación, además se perdería porque esta tiene muchas herramientas que al final no va utilizar; con base en esto decidimos programar una aplicación independiente de escritorio utilizando PyQGIS en la cual solo mostrara el TOC y el visor que al ejecutarlo se conectara a la base de Datos PostgreSQL 9.2 con PosGIS 2.0 y cargara las tablas (esto se debe hacer en background, es decir el usuario no se conectaría a la base de datos a través de un dialogo) una vez hecho esto, el usuario podría hacer consultas “indirectamente” sobre las capas cargadas inicialmente en la aplicación. Esto lo hace adicionando la funcionalidad del plugin mencionado anteriormente, donde el usuario a traves de un dialogo entra unos parámetros los cuales serán utilizados para hacer una consulta a la base de datos cuyas tablas fueron cargadas inicialmente por este motivo hago alusión a “indirectamente”, porque esta se hace sobre las tablas de la base de datos y no sobre la capas que están sobre el visor; obviamente las tablas representan las capas que están en el visor. Es necesario aclarar que el usuario final no tiene conocimientos en SQL.

Perdona por no ser claro desde el principio
Qué opinas y que no podrías sugerir

Gracias
Last Edit: 19 Sep 2013 19:06 by fabi_386.

Re: ordenar las capas vectoriales de panel izquierdo de QGIS 19 Sep 2013 19:15 #1059

  • tuxman
  • OFFLINE
  • Vive aquí
  • Posts: 285
  • Karma: 6
fabi_86, es mucho mejor si haces preguntas puntuales en los foros, y ojalá manteniendo un solo tema por hilo del foro. De no hacerlo, se genera confusión y es mucho más difícil colaborarte.

Supongo deberás usar interfaces gráficas hechas con Qt Designer y programar consultas SQL con Qt SQL o psycopg2.

Saludos,

Tuxman
  • Page:
  • 1
Time to create page: 0.64 seconds
 

On-line users

Random user

Latest Geo-Forums

No posts to display.

Latest Comments