4 votos

Mostrar relación de valor en QGIS

Tengo capas cargadas desde PostGIS en QGIS (2.14). Dado que es una base de datos y trato de respetar las reglas de normalización, los datos no siempre se almacenan directamente en la tabla de capas, a veces existen como un número de identificación. Con la configuración de "relación de valor" en las propiedades del campo, puedo mostrar la información correspondiente como un menú desplegable. Pero también me gustaría mostrar esta información como una etiqueta en el mapa, por ahora solo puedo mostrar el número de identificación.

¿Alguien tiene alguna idea de cómo mostrar la información real? Puedo pensar en algunas soluciones alternativas, ninguna de las cuales es completamente satisfactoria:

  • agregar un campo con la información en la tabla de la base de datos, pero para mantener un poco de lógica de la base de datos necesitaría establecer algunos desencadenadores que actualicen automáticamente los campos correspondientes entre tablas. En otras palabras, un poco doloroso para un proceso bastante simple, pero factible.
  • usar una unión de tablas en QGIS y mostrar los datos unidos, pero parece que no es posible guardar la unión de tablas como un estilo predeterminado que estaría automáticamente presente cada vez que cargue mi capa. Si pudiera funcionar, estoy desarrollando un proceso destinado a ser utilizado por muchos usuarios, que no tienen experiencia en QGIS por ahora, pero la idea es automatizar las cosas y este es típicamente el tipo de pequeñas cosas que generalmente se suman y complejizan un proceso. Así que lo evitaría.

3voto

Ivan Petrushev Puntos 158

Si puedes mostrar el menú desplegable, también deberías poder mostrar las etiquetas correspondientes. Si tu número de identificación está listado como (1), (2), ... y no muestra el texto del valor, probablemente el widget de relación de valor no está configurado después de la carga de la capa. Supongo que estás utilizando estilos predeterminados en tu capa guardada en la base de datos. El estilo predeterminado no configurará la capa, la columna clave y la columna de valor del widget.

Leí en algún lugar que podrías usar:

vlayer.applyNamedStyle(styleqml)

Si lees el estilo de la tabla layerstyle en PostGIS. No funcionó al 100% para mí.

Establecí explícitamente las propiedades del widget desde el código como sigue:

fieldIndex = vlayer.fieldNameIndex(list_id_field)
layer_id = QgsMapLayerRegistry.instance().mapLayersByName(list_tabname)[0].id().encode('cp1252')
            vlayer.setEditorWidgetV2(fieldIndex, 'ValueRelation')
vlayer.setEditorWidgetV2Config(fieldIndex, {'Layer': '{}'.format(layer_id), 'Key': list_id_field, 'Value': list_value_column, 'allow_null': False})

El código anterior funciona. Utiliza la codificación que se ajuste a tus datos. Sería bueno si el estilo predeterminado pudiera cargar toda la configuración del widget. Recuerda también que la tabla de lista de relación también debe estar abierta en QGIS para que el widget se cargue. Más adelante esta semana revisaré el método applyNamedStyle. Otro applyNamedStyle se puede encontrar aquí:

Cómo cargar un estilo desde POSTGIS en PyQt

0voto

GuiOm Clair Puntos 58

Finalmente no logré encontrar una solución directa a esta situación, en su lugar organicé mi trabajo de manera diferente, y en lugar de mostrar tablas sin procesar con filtros y relaciones de valor en QGIS, creé vistas con reglas para las actualizaciones de la base de datos. Y simplemente importé estas vistas en QGIS, vistas que ya incluyen los datos como los quiero (ya que los formateé al crear la vista). Además, también me permite, con un poco de secuenciación de comandos, mostrar solo los datos en el área concernida por el proyecto actual, y no en todo el territorio, ganando en memoria RAM y fluidez de visualización.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X