추가한 벡터 레이어에 대한 그리기 스타일을 심벌이라고 하는데, 이 심벌은 매우 다양합니다. 먼저 전체 도형을 하나의 심벌로 지정하는 코드는 다음과 같습니다.
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) symbol = QgsLineSymbol.createSimple({"line_style":"solid", "color": "red", "width": "0.5"}) layer.renderer().setSymbol(symbol) layer.triggerRepaint()
선 스타일은 Solid이고 색상은 red, 굵기는 0.5로 지정했으며 결과는 다음과 같습니다.
다음은 특정 필드의 값에 대한 범위에 따라 심벌을 다르게 설정하는 코드입니다.
QgsProject.instance().removeAllMapLayers() layer = QgsVectorLayer("D:/__Data__/세종특별자치시_36000/TL_SPRD_MANAGE.shp", "TL_SPRD_MANAGE", "ogr") QgsProject.instance().addMapLayers([layer]) for field in layer.fields(): print(field.name()) field = "ROAD_BT" def createRendererRange(layer, label, minV, maxV, color, opacity, width): color = QColor(color) symbol = QgsSymbol.defaultSymbol(layer.geometryType()) symbol.setColor(color) symbol.setOpacity(1) symbol.setWidth(width) range = QgsRendererRange(minV, maxV, symbol, label) return range rangeList = [ createRendererRange(layer, "Group1", 0.0, 10, "#aaaaaa", 1, 0.2), createRendererRange(layer, "Group2", 10, 20, "#00ff00", 0.5, 0.5), createRendererRange(layer, "Group3", 20, 30, "#ffff00", 1, 0.5), createRendererRange(layer, "Group4", 30, 50, "#ff0000", 0.5, 0.5) ] groupRenderer = QgsGraduatedSymbolRenderer("", rangeList) groupRenderer.setMode(QgsGraduatedSymbolRenderer.EqualInterval) groupRenderer.setClassAttribute(field) layer.setRenderer(groupRenderer)
ROAD_BT에 대한 필드값을 4개의 구간에 대해 다른 심벌을 지정하고 있으며 그 결과는 다음과 같습니다.
다음은 라벨을 설정하는 코드입니다.
text_format = QgsTextFormat() text_format.setFont(QFont("Arial")) text_format.setSize(12) text_format.setColor(QColor("white")) buffer_settings = QgsTextBufferSettings() buffer_settings.setEnabled(True) buffer_settings.setSize(1) buffer_settings.setColor(QColor("gray")) text_format.setBuffer(buffer_settings) layer_settings = QgsPalLayerSettings() layer_settings.setFormat(text_format) layer_settings.fieldName = "name" layer_settings.placement = QgsPalLayerSettings.Line label_settings = QgsVectorLayerSimpleLabeling(layer_settings) layer.setLabelsEnabled(True) layer.setLabeling(label_settings) layer.triggerRepaint()
실행 결과는 다음과 같습니다.