Como un ejercicio rápido de la mañana, he hackeado un QGIS Python script juntos, la creación de líneas en un memorylayer de un polígono centroide a una costumbre se trasladó de datos vinculados etiqueta.
Necesitas una columna x e y en tu tabla para tener almacenadas las coordenadas de las etiquetas. También configure las coordenadas x e y de la etiqueta definida en las propiedades de las etiquetas.
Arrastra la etiqueta donde quieras, con la herramienta de movimiento de etiquetas:
Copie el código Python de abajo en un archivo llamado Labellines.py en su carpeta Python. En Windows sería C:\Users\USERNAME\ .qgis2 \python.
"""
Generates lines from a data binded label to centroid of a polygon
Created by jakob at lanstorp dot com. Run from QGIS Python Console:
from Labellines import LabelLineGenerator
generator = LabelLineGenerator(qgis.utils.iface)
generator.createLabellines()
"""
from qgis.core import *
def run_script(iface):
''' Script runner from QGIS uses this driver code '''
from Labellines import LabelLineGenerator
generator = LabelLineGenerator(iface)
generator.createLabellines()
class LabelLineGenerator:
def __init__(self, iface):
"""Initialize using the qgis.utils.iface
object passed from the console.
"""
# Set the name of the layer
self.labelTable = 'Kommuner2006'
self.iface = iface
self.log = lambda m: QgsMessageLog.logMessage(m,'Labellines')
self.log('LabelLineGenerator started ....')
def createLabellines(self, layerToLable):
self.createLabellineMemoryLayer()
# Polygon layer to label
vlayer = QgsVectorLayer("D:\data\Kommuner2006\Kommuner2006.shp","Kommuner", "ogr")
# Iterate base layer
iter = vlayer.getFeatures()
i = 0
for feature in iter:
# Get data binded label coordinates
xLabel = feature["x"]
yLabel = feature["y"]
# Skip labelline creation if label has not been moved
if xLabel == NULL or yLabel == NULL:
continue
# Create label point
labelPoint = QgsPoint(xLabel,yLabel)
geom = feature.geometry()
# Create centroid point
centroidPoint = geom.centroid().asPoint()
# Append label line to a memorylayer
ft = QgsFeature()
ft.setAttributes([i])
ft.setGeometry(QgsGeometry.fromPolyline([geom.centroid().asPoint(),labelPoint]))
self.labellineLayer.dataProvider().addFeatures([ft])
i=i+1
self.labellineLayer.commitChanges()
def createLabellineMemoryLayer(self):
''' Create a memory layer for handling lines between centroid and label text '''
self.labellineLayer = QgsVectorLayer(
"LineString?" +
"crs=epsg:25832&" +
"field=id:integer&" +
"index=yes",
"Labelline",
"memory")
QgsMapLayerRegistry.instance().addMapLayer(self.labellineLayer)
Actualice las líneas 35 y 65 con sus propios ajustes.
Ejecútelo desde la consola de QGIS Python:
from Labellines import LabelLineGenerator
generator = LabelLineGenerator(qgis.utils.iface)
generator.createLabellines()
Esto no es nada comparado con el plugin Easy Labels, pero me dio este mapa de algunos municipios de Copenhague.
Línea 35 - La capa de polígonos que desea etiquetar:
vlayer = QgsVectorLayer(" D:\data\Kommuner2006\Kommuner2006.shp ", "Kommuner", "ogr")
Línea 64 - El código epsg de su capa poligonal:
"crs=epsg:25832&" +
0 votos
Echa un vistazo a MMQGIS que te ofrece hacer lo mismo. MMQGIS.... CREAR.... LÍNEAS HUB