Tengo un problema al intentar etiquetar todas las características de un shapefile con una rutina de Python.
Si abro mi shapefile en QGIS "a mano", y selecciono un .qml con selección de etiquetas predefinida, las etiquetas se muestran correctamente. Si cargo el archivo .qml a través de una rutina de Python (véase la línea siguiente), todas las características de estilo (colores, etc.) están ahí, EXCEPTO las etiquetas. No sé por qué.
myLayer.loadNamedStyle("someStyle.qml")
Como la línea anterior no me dio las etiquetas deseadas, intenté crear una rutina más extensa, ver abajo.
myProvider = myLayer.dataProvider()
myLayer.startEditing()
for myFeat in myLayer.getFeatures():
#Some calculations in here...
#The variable "Some_Value" is what I'd like to use as label
Index_myLabelField=myLayer.fieldNameIndex("myLabelField")
Value_myField={myFeat.id():{Index_myLabelField:QVariant(Some_Value)}}
myProvider.changeAttributeValues(Value_myField)
myLayer.commitChanges()
myLayer.label().setLabelField(0,Index_myLabelField)
myLayer.label().labelField(0)
print myLayer.label().fieldValue(0,myFeat) #Returns the desired label string
#Create map renderer
mapRenderer = QgsMapRenderer()
rect = myLayer.extent()
mapRenderer.setExtent(rect)
mapRenderer.setLayerSet(QStringList(myLayer.id()))
myRenderContext = mapRenderer.rendererContext()
myLayer.select(myFeat.id())
print myLayer.isValid() #Returns true
myLayer.label().renderLabel(myRenderContext,myFeat,1) #Error: Segmentation fault (core dumped)
Hasta la última línea, en la que intento renderizar la etiqueta, todo parece funcionar bien.
¿Qué es lo que falla en la última línea?
Hay dos cosas de las que no estoy seguro:
-
En la API de QGIS, la función para indicar a QGIS el campo que quiero utilizar como etiqueta es
setLabelField (int attr, int fieldIndex)
¿Qué es el "attr" en este contexto?
¿Qué debo poner aquí?
He usado "0" hasta ahora...
- En la función renderLabel(), hay un "bool selected" necesario en la tercera posición de la llamada. Así que lo que estoy haciendo es seleccionar la característica (myFeat), y decirle a la función un "1" aquí.
¿Es eso correcto?
Renderización y etiquetado de Shapefile con PyQGIS no me ayuda del todo, ya que el OP no parece etiquetar todas las características de su shapefile. Soy capaz de añadir una etiqueta al archivo shape (algo así como un título) con el método descrito allí, pero estoy buscando tener una etiqueta junto a cada característica (por ejemplo, como los nombres de las calles en un mapa).
Si sabes por qué no funciona el qml-loading del principio de mi post ¿puedes decírmelo?
0 votos
¿Aplicación autónoma o plugin?
0 votos
Aplicación independiente, si entiendo bien la pregunta.
0 votos
Sí, ya que estás haciendo una aplicación que funciona fuera de QGIS.
0 votos
Sí, eso es lo que estoy haciendo.