este problema se puede resolver de variadas formas, pero te enseñamos la resolución más completa en nuestra opinión.
Solución:
Si no desea crear una capa diferente solo para etiquetar y no desea realizar cambios en la capa, entonces las propiedades definidas por datos pueden ser lo que necesita.
La idea: etiquetar la característica y crear una colección de geometría de todas las características que tengan la misma attribute valor (sin importar cuál attributes). Recupere el centroide de esta colección, obtenga sus coordenadas x e y, y utilícelo para etiquetar.
En la configuración predeterminada, QGIS no muestra etiquetas en conflicto. De esta manera, verá todas las etiquetas solo una vez, justo en el centro de los objetos con los mismos nombres.
Para usar este enfoque, debe usar la anulación de datos definidos de las coordenadas y e y, en la pestaña Propiedades de capa -> Etiquetado -> Colocación.
Defina la siguiente función en el editor de funciones y presione Cargar.
@qgsfunction(args='auto', group='Custom')
def getAgglomerationCenter(layername, attribute, feature, parent):
layer = QgsMapLayerRegistry.instance().mapLayersByName(layername)[0]
geom = QgsGeometry().fromWkt('GEOMETRYCOLLECTION()')
for feat in layer.getFeatures():
if feat[attribute] == feature[attribute]:
geom.addPart(QgsPointV2(feat.geometry().asPoint()))
return geom.centroid()
Como expresión en el caso de la coordenada x dar:
x(getAgglomerationCenter( 'YOUR LAYER NAME', 'ATTRIBUTE NAME' ))
y para la coordenada y:
y(getAgglomerationCenter( 'YOUR LAYER NAME', 'ATTRIBUTE NAME' ))
Situación probada:
Descargo de responsabilidad: esta implementación no está optimizada de ninguna manera, por ejemplo, en lugar de recorrer todas las funciones, es preferible usar QgsFeatureRequest(). Y probablemente sea posible memorizar los resultados, para evitar construir la misma colección varias veces.
Te mostramos las comentarios y valoraciones de los usuarios
Si piensas que ha resultado provechoso nuestro artículo, sería de mucha ayuda si lo compartieras con más entusiastas de la programación y nos ayudes a extender nuestra información.