Могу предположить что подписывется каждый "кусочек" слоя. А в QGIS подпись строится под центроидом.
http://gyazo.com/b034e2f4b2437b79f2e3fb9a99827e88
Открываю слой функцией:
Код: Выделить всё
def addLayer( self ):
self.canvas.clear()
QgsMapLayerRegistry.instance().removeAllMapLayers ()
layerPath = app_dir + r"\geo\boundary.shp"
layerName = "boundary-polygon"
layerProvider = "ogr"
self.layer = QgsVectorLayer( layerPath, layerName, layerProvider )
if not self.layer.isValid():
print "Layer is not valid"
return
QgsMapLayerRegistry.instance().addMapLayer( self.layer )
self.canvas.setExtent( self.layer.extent() )
cl = QgsMapCanvasLayer( self.layer )
layers = [ cl ]
self.canvas.setLayerSet(layers)
Код: Выделить всё
def showLabel(self):
layer= QgsMapLayerRegistry.instance().mapLayersByName("boundary-polygon")[0]
label = layer.label()
label.setLabelField(QgsLabel.Text, 2)
label.addDirectionSymbol=False
label.angleOffset=-1
label.setBlendMode=0
label.bufferDraw=False
label.bufferJoinStyle=128
label.bufferNoFill=False
label.bufferSize=1
label.bufferSizeInMapUnits=False
label.centroidInside=True
label.centroidWhole=True
label.decimals=3
label.displayAll=False
label.dist=0
label.distInMapUnits=False
label.drawLabels=True
label.scaleMax=10000000
label.scaleMin=1
label.fieldName='NAME'
label.fitInPolygonOnly=false
label.formatNumbers=False
label.isExpression=False
label.labelOffsetInMapUnits=False
label.labelPerPart=False
label.limitNumLabels=False
label.mergeLines=False
label.obstacle=True
label.obstacleFactor=1
label.placement=QgsPalLayerSettings.AroundPoint
label.placementFlags=10
label.plusSign=False
label.preserveRotation=True
label.quadOffset=QgsPalLayerSettings.QuadrantOver
label.scaleVisibility=True
layer.enableLabels(True)
self.canvas.refresh()