Saltar al contenido

¿Usar mapeo de campo a RGB para simbología en QGIS?

Luego de mucho luchar pudimos hallar el arreglo de esta contrariedad que ciertos lectores de nuestro sitio han tenido. Si tienes algún detalle que compartir puedes compartir tu conocimiento.

Solución:

En una versión posterior de QGIS es más fácil realizar la tarea solicitada.

Simplemente abra Propiedades de capa, pestaña Estilo y asegúrese de que esté seleccionado Símbolo único. Haz clic en la casilla junto al color “Relleno” y elige “Editar”.

Editará el color base de sus bases de polígono en colores RGB presentes en la tabla de datos, con un color de borde constante (puede aplicar los mismos criterios si es necesario).

Después de presionar “Editar”, simplemente coloque los nombres de las 3 columnas RGB de su tabla usando la siguiente expresión:

color_rgb (“columna R”, “columna G”, “columna B”)

Ok, aplica y listo.

Si necesita etiquetar y caracterizar los datos de la misma manera (por ejemplo, para construir una leyenda), simplemente use la opción Categorizado y aplique la misma expresión al Símbolo y a la Columna, identificados en la imagen a continuación.

ingrese la descripción de la imagen aquí

Puede usar Python con el módulo ElementTree:

from string import *
from xml.etree import cElementTree as ET

class symbol:
    def __init__(self,b=[]):
            self.typec= typec
            self.b = b
            self.key = ['MAPCODE','R','G','B']
            self.data = dict(zip(self.key,self.b))
            self.symb = ET.SubElement(typec,"symbol")
            self.lower = ET.SubElement(self.symb, "lowervalue")
            self.upper = ET.SubElement(self.symb, "uppervalue")
            self.outline = ET.SubElement(self.symb,"outlinecolor")
            self.outsty = ET.SubElement(self.symb, "outlinestyle")
            self.outtail = ET.SubElement(self.symb, "outlinewidth")
            self.fillc = ET.SubElement(self.symb,"fillcolor")
            self.fillp = ET.SubElement(self.symb,"fillpattern")

    def creation(self):
            self.lower.text = self.data['MAPCODE']
            self.upper.text = self.data['MAPCODE']
            self.outsty.text="SolidLine"
            self.outtail.text="0.26"
            self.outline.set("red",str(self.data['R']))
            self.outline.set("green",str(self.data['G']))
            self.outline.set("blue",str(self.data['B']))
            self.fillc.set("red",str(self.data['R']))
            self.fillc.set("green",str(self.data['G']))
            self.fillc.set("blue",str(self.data['B']))
            self.fillp.text = "SolidPattern"

# QML file creation
intro = ET.Element("qgis")
transp = ET.SubElement(intro,"transparencyLevelInt")
transp.text = '255'
classatr = ET.SubElement(intro, "classificationattribute")
classatr.text= "MAPCODE"
typec = ET.SubElement(intro,"uniquevalue")
classif = ET.SubElement(typec,"classificationfield")
classif.text="MAPCODE"

# RGB file processing              
def main():
    file = "RGB.txt"
    f= open(file,"r")
    while 1 :
        line = f.readline()
        if not line :
            break
        elem = split(line,',') #or tab, or space, or
        symboltag = symbol(elem)
        symboltag.creation()
     result = ET.ElementTree(intro)
     result.write("RGB.qml")

if __name__ == '__main__':
    main()

El archivo de estilo generado por este script es (y funciona):

  
  255
   MAPCODE
   
      MAPCODE
         
             Oc
             Oc
             
             SolidLine
             0.26
             
             SolidPattern
          
          
             WAT
             WAT
             
             SolidLine
             0.26
              
             SolidPattern
          
              and so...
   

También puede utilizar el módulo shapefile ([shapefile]) 1 para shapefiles con columnas RGB

import shapefile ....
[....]
noduplicates = []

def main():
sf = shapefile.Reader("RGBshape")
for rec in enumerate(sf.records()):
    if rec[1][0] not in noduplicates:
        noduplicates.append(rec[1][0])
        symboltag = symbol(rec[1])
        symboltag.creation()      
    else:
        continue

y entonces…

Si desea clasificar algunos datos vectoriales de forma repetible, esto es lo que puede hacer:

  • Cargue su vector en QGIS.
  • Haga clic derecho en la capa en el panel “Capas” en el lado izquierdo de la pantalla.
  • Haga clic en “Propiedades” en el menú que aparece.
  • Haga clic en la pestaña “Estilo” en la ventana que aparece.
  • Debería haber un elemento de lista desplegable en la pantalla que diga “Símbolo único”. Haga clic en él y cambie su valor a “Categorizado”.
  • El diseño de la interfaz cambiará, dándote una nueva opción denominada “Columna”. Haga clic en él y seleccione el campo “map_symb”.
  • Haga clic en el botón “Clasificar” debajo del gran campo vacío. El campo vacío se completará con el contenido de la columna “map_symb” en su conjunto de datos.
  • Haga doble clic en los símbolos que desea cambiar. En la ventana que aparece, haga clic en el botón etiquetado “Cambiar”.
  • Esto le permite cambiar el color para el dado attribute valor.
  • Siga haciendo esto hasta que haya cambiado los colores según sea necesario.
  • Cuando haya terminado, es posible que desee guardar el estilo haciendo clic en el botón “Guardar estilo …”. Esto le permitirá aplicar el mismo estilo a cualquier otro conjunto de datos, simplemente haciendo clic en “Cargar estilo …” cuando esté en esta misma ventana. Esto puede ser lo que estaba tratando de lograr al vincular el archivo de texto con el conjunto de datos, lo cual no es posible AFAIK. Sin embargo, una vez que haya guardado el estilo, podrá usarlo en los siguientes conjuntos de datos (suponiendo que tengan el mismo attribute valores). Si abre el archivo de guardado del estilo, verá que es solo texto sin formato, que puede editar si lo desea. Por supuesto, es posible escribir este archivo usted mismo en cualquier editor de texto, pero es más rápido y fácil hacerlo a través de la GUI.
  • Haga clic en “Aplicar” para ver los cambios y “Aceptar” para cerrar la ventana Propiedades de capa.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *