Mehr

QGIS Polygon-Kantenstil basierend auf angrenzendem Feature?


Gibt es eine Möglichkeit, den Stil von nur TEILEN des Rahmens eines Polygons in QGIS zu ändern? Ich möchte, dass eine oder zwei Kanten bestimmter Polygone je nach Art des angrenzenden Features eine andere Farbe oder überhaupt keine Farbe rendern. (Zum Beispiel würde eine politische Teilung, die an ein Gewässer angrenzt, diese eine Kante blau darstellen.)

Der offensichtliche Weg scheint darin zu bestehen, den Stil des angrenzenden Features zu ändern und dann Symbolebenen zu verwenden, damit es über dem ersten Feature gerendert wird, aber das funktioniert nicht; unten ist immer ein bisschen von der anderen Grenze durchscheinen:

Ich kann die Linienstärke des angrenzenden Features erhöhen, sodass es das darunter liegende Feature vollständig bedeckt (im Beispielbild ist es bereits doppelt so dick), aber dann beginnt es auch das Innere dieses Polygons zu bedecken. Ich kann auch in Polylinien konvertieren und einfach die Küstenlinie abschneiden, aber dann verliere ich die Geometrie. Ich denke, was ich wirklich brauche, ist eine Möglichkeit, das Rendern des Rahmens auf der einen Seite zu unterdrücken, und es funktioniert nicht, ihn einfach mit etwas anderem abzudecken.


Wie user30184 darauf hinweist, benötigen Sie die Begrenzungsgeometrie von Polygonen, um einen Polygonumriss auf eine andere Weise zu rendern. Um einen solchen planaren Graphen zu erstellen, können Sie Herabstufung Polygone zu Polylinien, und behalten Sie nur eine Instanz dieser Segmente bei, die von zwei Polygonen geteilt wird.

Das folgende Skript könnte helfen. Es ahmt eine Art Topologie-Erstellungsprozess nach. Dabei wird berücksichtigt, dass benachbarte Polygone möglicherweise nicht in die gleiche Richtung digitalisiert werden. Im Ergebnis hat jedes Segment Attribute mit den Feature-IDs des linken und rechten Polygons. Diese Werte können verwendet werden, um eine Verbindung mit der Attributtabelle der Polygone herzustellen. Wenn Sie die Segmente in durchgehende Linien auflösen möchten, verwenden Sie das Auflösungswerkzeug aus dem Verarbeitungs-Toolset. Um nützliche Ergebnisse zu erzielen, sollten Sie in Betracht ziehen, Attribute zu kombinierenlpolyundrpolyin ein zusammengesetztes Attribut umwandeln und dieses für den Auflösungsprozess verwenden.

from PyQt4.QtCore import QVariant layer = iface.activeLayer() segment = {} j = 0 for feat in layer.getFeatures(): # polylines line = feat.geometry().asPolygon()[0] for i in xrange( len(line)-1): lsegment = ((line[i][0], line[i][1]), (line[i+1][0], line[i+1][1]) ) rsegment = ((line[i+1][0], line[i+1][1]), (line[i][0], line[i][1])) wenn lsegment in Segmenten: if segmente[lsegment]['lpoly'] == -9999: segmente[lsegment]['lpoly'] = feat.id() elif segmente[lsegment]['rpoly'] == -9999: segmente[lsegment][' rpoly'] = feat.id() elif rsegment in segmenten: if segmente[rsegment]['lpoly'] == -9999: segmente[rsegment]['lpoly'] = feat.id() elif segmente[rsegment][ 'rpoly'] == -9999: segment[rsegment]['rpoly'] = feat.id() else: segment[lsegment] = {'lpoly': feat.id(), 'rpoly': -9999, ' fid': j} j += 1 layer = QgsVectorLayer('LineString?crs=EPSG:4326', 'Result', 'memory') prov = layer.dataProvider() attribute = [QgsField('fid', QVariant.Int ), QgsField('lpoly', QVariant.Int), QgsField('rpoly', QVariant.Int) , QgsField('length', QVariant.Double)] prov.addAttributes(attributes) QgsMapLayerRegistry.instance().addMapLayer(layer) # Features erstellen feats = [] layer.startEditing() für Segmente in Segmenten: feat = QgsFeature() Scheitelpunkte = [QgsPoint(segment[0][0], segment[0][1]), QgsPoint(segment[1][0], segment[1][1])] Attribute = [segments[segment][' fid'], segmente[segment]['lpoly'], segmente[segment]['rpoly']] feat.setGeometry(QgsGeometry.fromPolyline(vertices)) attribute.append(feat.geometry().length()) feat .setAttributes(attributes) feats.append(feat) prov.addFeatures(feats) layer.updateExtents() layer.commitChanges()

Beispiel: Polygone, beschriftet mit id()

Begrenzung von Polygonen, gekennzeichnet mit lpoly über rpoly


Schau das Video: Create, modify and Label a Polygon area Feature in QGIS (Oktober 2021).