pyQGIS Tip

특정 Feature를 확대하기

아래의 코드는 선택된 Feature를 확대합니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
canvas = iface.mapCanvas()
id = 0
#canvas.setSelectionColor(QColor("red"))
layer.select(id)
canvas.zoomToSelected(layer)
canvas = iface.mapCanvas() id = 0 #canvas.setSelectionColor(QColor("red")) layer.select(id) canvas.zoomToSelected(layer)
canvas = iface.mapCanvas()
id = 0
#canvas.setSelectionColor(QColor("red"))
layer.select(id)
canvas.zoomToSelected(layer)

아래의 코드는 Feature를 선택하지 않고 FID가 0인 Feature를 확대합니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
canvas = iface.mapCanvas()
id = 0
feat = layer.getFeature(id)
geom = feat.geometry()
bbox = geom.boundingBox()
canvas.setExtent(bbox)
canvas.refresh()
canvas = iface.mapCanvas() id = 0 feat = layer.getFeature(id) geom = feat.geometry() bbox = geom.boundingBox() canvas.setExtent(bbox) canvas.refresh()
canvas = iface.mapCanvas()
id = 0
feat = layer.getFeature(id)
geom = feat.geometry()
bbox = geom.boundingBox()
canvas.setExtent(bbox)
canvas.refresh()

특정 Feature를 깜박이게 하기

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
canvas = iface.mapCanvas()
id = 0
canvas.flashFeatureIds(layer, [id])
canvas = iface.mapCanvas() id = 0 canvas.flashFeatureIds(layer, [id])
canvas = iface.mapCanvas()
id = 0
canvas.flashFeatureIds(layer, [id])

화면 좌표와 지도 좌표 간의 변환

아래의 코드는 화면 좌표 (100, 20)을 지도 좌표로 변환하고 다시 변환된 지도 좌표를 화면 좌표로 변환하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
ptView = QPoint(100, 20)
ptMap = canvas.getCoordinateTransform().toMapCoordinates(ptView)
print(ptMap.x(), ptMap.y())
ptMap2 = QgsMapTool(canvas).toCanvasCoordinates(ptMap)
print(ptMap2.x(), ptMap2.y())
ptView = QPoint(100, 20) ptMap = canvas.getCoordinateTransform().toMapCoordinates(ptView) print(ptMap.x(), ptMap.y()) ptMap2 = QgsMapTool(canvas).toCanvasCoordinates(ptMap) print(ptMap2.x(), ptMap2.y())
ptView = QPoint(100, 20)
ptMap = canvas.getCoordinateTransform().toMapCoordinates(ptView)
print(ptMap.x(), ptMap.y())

ptMap2 = QgsMapTool(canvas).toCanvasCoordinates(ptMap)
print(ptMap2.x(), ptMap2.y())

다양한 형태의 지오메트리 생성

좌표를 지정해서 다양한 형태의 지오메트리를 생성하는 코드입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
geomPoint = QgsGeometry.fromPointXY(QgsPointXY(10000, 15000))
geomMultiPoint = QgsGeometry.fromMultiPointXY(
[
QgsPointXY(10000, 15000),
QgsPointXY(11000, 16000),
]
)
geomPolyline = QgsGeometry.fromPolylineXY(
[
QgsPointXY(10000, 15000),
QgsPointXY(11000, 16000),
QgsPointXY(12000, 17000),
QgsPointXY(13000, 18000),
]
)
geomPolyline = QgsGeometry.fromMultiPolylineXY(
[
[
QgsPointXY(10000, 15000),
QgsPointXY(11000, 16000),
QgsPointXY(12000, 17000),
QgsPointXY(13000, 18000),
]
]
)
pX = 971195
pY = 1841488
geomPolygon = QgsGeometry.fromPolygonXY(
[
[
QgsPointXY(pX, pY),
QgsPointXY(pX+1000, pY),
QgsPointXY(pX+1000, pY+1000),
QgsPointXY(pX, pY+1000),
],
[
QgsPointXY(pX+100, pY+100),
QgsPointXY(pX+900, pY+100),
QgsPointXY(pX+900, pY+900),
QgsPointXY(pX+100, pY+900),
]
]
)
geomPolygon = QgsGeometry.fromMultiPolygonXY(
[
[
[
QgsPointXY(pX, pY),
QgsPointXY(pX+1000, pY),
QgsPointXY(pX+1000, pY+1000),
QgsPointXY(pX, pY+1000),
],
[
QgsPointXY(pX+100, pY+100),
QgsPointXY(pX+900, pY+100),
QgsPointXY(pX+900, pY+900),
QgsPointXY(pX+100, pY+900),
]
]
]
)
geomPoint = QgsGeometry.fromPointXY(QgsPointXY(10000, 15000)) geomMultiPoint = QgsGeometry.fromMultiPointXY( [ QgsPointXY(10000, 15000), QgsPointXY(11000, 16000), ] ) geomPolyline = QgsGeometry.fromPolylineXY( [ QgsPointXY(10000, 15000), QgsPointXY(11000, 16000), QgsPointXY(12000, 17000), QgsPointXY(13000, 18000), ] ) geomPolyline = QgsGeometry.fromMultiPolylineXY( [ [ QgsPointXY(10000, 15000), QgsPointXY(11000, 16000), QgsPointXY(12000, 17000), QgsPointXY(13000, 18000), ] ] ) pX = 971195 pY = 1841488 geomPolygon = QgsGeometry.fromPolygonXY( [ [ QgsPointXY(pX, pY), QgsPointXY(pX+1000, pY), QgsPointXY(pX+1000, pY+1000), QgsPointXY(pX, pY+1000), ], [ QgsPointXY(pX+100, pY+100), QgsPointXY(pX+900, pY+100), QgsPointXY(pX+900, pY+900), QgsPointXY(pX+100, pY+900), ] ] ) geomPolygon = QgsGeometry.fromMultiPolygonXY( [ [ [ QgsPointXY(pX, pY), QgsPointXY(pX+1000, pY), QgsPointXY(pX+1000, pY+1000), QgsPointXY(pX, pY+1000), ], [ QgsPointXY(pX+100, pY+100), QgsPointXY(pX+900, pY+100), QgsPointXY(pX+900, pY+900), QgsPointXY(pX+100, pY+900), ] ] ] )
geomPoint = QgsGeometry.fromPointXY(QgsPointXY(10000, 15000))

geomMultiPoint = QgsGeometry.fromMultiPointXY(
    [
        QgsPointXY(10000, 15000),
        QgsPointXY(11000, 16000),
    ]
)

geomPolyline = QgsGeometry.fromPolylineXY(
    [
        QgsPointXY(10000, 15000),
        QgsPointXY(11000, 16000),
        QgsPointXY(12000, 17000),
        QgsPointXY(13000, 18000),
    ]
)

geomPolyline = QgsGeometry.fromMultiPolylineXY(
    [
        [
            QgsPointXY(10000, 15000),
            QgsPointXY(11000, 16000),
            QgsPointXY(12000, 17000),
            QgsPointXY(13000, 18000),
        ]
    ]
)

pX = 971195
pY = 1841488

geomPolygon = QgsGeometry.fromPolygonXY(
    [
        [
            QgsPointXY(pX, pY),
            QgsPointXY(pX+1000, pY),
            QgsPointXY(pX+1000, pY+1000),
            QgsPointXY(pX, pY+1000),
        ],
        [
            QgsPointXY(pX+100, pY+100),
            QgsPointXY(pX+900, pY+100),
            QgsPointXY(pX+900, pY+900),
            QgsPointXY(pX+100, pY+900),
        ]
    ]
)

geomPolygon = QgsGeometry.fromMultiPolygonXY(
    [
        [
            [
                QgsPointXY(pX, pY),
                QgsPointXY(pX+1000, pY),
                QgsPointXY(pX+1000, pY+1000),
                QgsPointXY(pX, pY+1000),
            ],
            [
                QgsPointXY(pX+100, pY+100),
                QgsPointXY(pX+900, pY+100),
                QgsPointXY(pX+900, pY+900),
                QgsPointXY(pX+100, pY+900),
            ]
        ]
    ]
)

아래는 Python 언어의 특징을 이용한 효율적인 코드 작성입니다.

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
pts = [
(583899.8, 8177297.19),
(583900.23, 8177262.52),
(583896.49, 8177262.47),
(583895.96, 8177297.29),
(583899.8, 8177297.19)
]
geomPolygon = QgsGeometry.fromPolygonXY( [[ QgsPointXY( xy[0], xy[1] ) for xy in pts ]] )
pts = [ (583899.8, 8177297.19), (583900.23, 8177262.52), (583896.49, 8177262.47), (583895.96, 8177297.29), (583899.8, 8177297.19) ] geomPolygon = QgsGeometry.fromPolygonXY( [[ QgsPointXY( xy[0], xy[1] ) for xy in pts ]] )
pts = [
    (583899.8, 8177297.19), 
    (583900.23, 8177262.52), 
    (583896.49, 8177262.47), 
    (583895.96, 8177297.29), 
    (583899.8, 8177297.19)
]

geomPolygon = QgsGeometry.fromPolygonXY( [[ QgsPointXY( xy[0], xy[1] ) for xy in pts ]] )