Hallo Wissende :-)
ich versuche mich an einem QGIS-PlugIn und will dort eine regelbasierte
(maßstabsabhängige) Darstellung einbauen.
Dies habe ich für Punkte/Symbole, Linien und Flächen bereits umgesetzt.
Nun ist dies ab 2.12 auch für Texte (beschriftete Punktlayer möglich). Leider
fehlt mir aber ein Ansatz, dies programmseitig umzusetzen.
Schaue ich mir die Projektdatei an, scheint die Umsetzung einer regelbasierten
Beschriftung auch nach einem ganz anderen Prinzip zu erfolgen :-(.
Für einen normalen Punkt/Symbollayer habe ich es z.B. so umgesetzt:
-------------------------------------------- Code Anfang
------------------------------------------------------
#
=============================================================================
# 1. Layer laden
qLayer= iface.addVectorLayer("c:/..../punkte.shp", "MeinPunktLayer",
"ogr")
#
=============================================================================
# 2. Rendern
symbol = QgsSymbolV2.defaultSymbol(qLayer.geometryType())
renderer = QgsRuleBasedRendererV2(symbol)
root_rule = renderer.rootRule()
# "Oberrolle" normalerweise mit Filter
new_rule = root_rule.children()[0].clone()
new_rule.setLabel("Oberrolle")
new_rule.setSymbol(None) # Kein Symbol bei "Oberrolle)
root_rule.appendChild(new_rule)
# 1. zugehörige Unterrolle
rule = root_rule.children()[0].clone()
rule.setLabel("Rolle1")
rule.setScaleMinDenom(1)
rule.setScaleMaxDenom(1000)
symbol = QgsSymbolV2.defaultSymbol(qLayer.geometryType())
symbol.deleteSymbolLayer(0)
rule.setSymbol(symbol)
new_rule.appendChild(rule)
qmap={}
qmap['name']="c:/..../symbolrolle1.svg"
symbol.appendSymbolLayer(QgsSymbolLayerV2Registry.instance().symbolLayerMetadata("SvgMarker").createSymbolLayer(qmap))
# 2. zugehörige Unterrolle
rule = root_rule.children()[0].clone()
rule.setLabel("Rolle2")
rule.setScaleMinDenom(1000)
rule.setScaleMaxDenom(10000)
symbol = QgsSymbolV2.defaultSymbol(qLayer.geometryType())
symbol.deleteSymbolLayer(0)
rule.setSymbol(symbol)
new_rule.appendChild(rule)
qmap={}
qmap['name']="c:/..../symbolrolle2.svg"
symbol.appendSymbolLayer(QgsSymbolLayerV2Registry.instance().symbolLayerMetadata("SvgMarker").createSymbolLayer(qmap))
root_rule.removeChildAt(0)
qLayer.setRendererV2(renderer)
-------------------------------------------- Code Ende
------------------------------------------------------
Fast identisch ist das Ganze für Linien und Flächen.
Kann mir einer sagen, wie ich das Ganze jetzt für Beschriftungen (eines
Punktlayers) umsetzen muss?
Vielen Dank schon mal
Steffen
--
....................................................................
FOSSGIS 2016, Die Konferenz für Open Source GIS mit OpenData und
OpenStreetMap in Zusammenarbeit mit der AGIT 2016!
4.-6. Juli 2016 in Salzburg (3. Juli OpenStreetMap Workshoptag)
http://www.fossgis.de/konferenz/2016/
AGIT 2016 vom 6.-8. Juli 2016
http://agit.at/
FOSS4G 2016 Bonn - annual global event of the Open Source Geospatial
Foundation (OSGeo) - 24.-26. August 2016 in Bonn (zusätzlich noch
FOSS4G Hacking Event und Workshops)
http://2016.foss4g.org
FOSSGIS e.V, der Verein zur Förderung von Freier Software aus dem
GIS-Bereich und Freier Geodaten!
http://www.fossgis.de/ https://twitter.com/fossgis_eV
____________________________________________________________________
FOSSGIS-Talk-Liste mailing list
[email protected]
https://lists.fossgis.de/mailman/listinfo/fossgis-talk-liste