희망적으로 꽤 쉬운 것.
QGIS에서 폴리 라인 / 라인의 방향을 바꾸고 싶습니다. 몇 년 전에 MapInfo에서이 작업을 수행 할 수있는 사용자 지정 도구를 만들었지 만 QGIS에 대해 아무것도 찾을 수없는 것 같습니다.
누구든지 이것을 할 수있는 도구를 알고 있습니까?
하나가 존재하지 않는다면 나는 그것을 만들어서 기쁘다. 이미 만들어 졌으면하고 싶지 않았다.
희망적으로 꽤 쉬운 것.
QGIS에서 폴리 라인 / 라인의 방향을 바꾸고 싶습니다. 몇 년 전에 MapInfo에서이 작업을 수행 할 수있는 사용자 지정 도구를 만들었지 만 QGIS에 대해 아무것도 찾을 수없는 것 같습니다.
누구든지 이것을 할 수있는 도구를 알고 있습니까?
하나가 존재하지 않는다면 나는 그것을 만들어서 기쁘다. 이미 만들어 졌으면하고 싶지 않았다.
답변:
여기에 내가 사용했던 파이썬이 있습니다.
layer = qgis.utils.iface.mapCanvas().currentLayer()
for feature in layer.selectedFeatures():
geom = feature.geometry()
nodes = geom.asPolyline()
nodes.reverse()
newgeom = QgsGeometry.fromPolyline(nodes)
layer.changeGeometry(feature.id(),newgeom)
위 코드를 실행하기 전에 :
위의 파이썬 코드를 다음과 같이 실행하십시오.
방향이 바뀐 각 기능에 대해 "참"을 출력해야합니다. "False"를 출력하면 해당 기능의 방향을 바꾸지 않았습니다. 레이어에 편집 기능이 설정되어 있지 않은 경우에 발생합니다.
꽤 쉽다!
나는 그것을 플러그인이라고 싸서 Swap Line Direction
QGIS 플러그인 설치 프로그램에서 사용할 수 있습니다.
이 플러그인은 플러그인 설치 프로그램에서 더 이상 사용할 수 없지만 (2015 년 11 월 16 일 현재) " Plugin Builder "플러그인을 사용하여 쉽게 플러그인을 빌드 할 수 있습니다 .
fTools와의 통합이 얼마나 쉬운 지 살펴 보겠습니다.
당신이있는 경우 GRASS의 플러그인을 사용 v.flip의 - 옵션 http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip을
Nathan의 답변에 따라 줄을 바꾸려는 레이어에서 Python 작업을 만들 수 있습니다.
layer = QgsMapLayerRegistry.instance().mapLayer("_your_layer_id_")
r = QgsFeatureRequest([% $id %])
f = QgsFeature()
if layer.getFeatures(r).nextFeature(f):
geom = f.geometry().asPolyline()
geom.reverse()
geom = QgsGeometry.fromPolyline(geom)
if layer.changeGeometry([% $id %], geom):
qgis.utils.iface.messageBar().pushMessage("Line swaped", QgsMessageBar.INFO, 2)
qgis.utils.iface.mapCanvas().refresh()
else:
qgis.utils.iface.messageBar().pushMessage("Cannot swap line. Turn editing on.", QgsMessageBar.WARNING, 3)
else:
qgis.utils.iface.messageBar().pushMessage("Cannot edit this feature.", QgsMessageBar.CRITICAL, 3)
한 번의 클릭으로 줄을 바꿀 수 있습니다. 사용하기 매우 편리합니다!
이 플러그인은 폴리 라인의 방향을 전환합니다.
이 플러그인은 줄 방향을 반대로 바꿉니다.
https://hub.qgis.org/projects/swapvectordirection
플러그인 아이콘을 클릭하기 전에 기능을 선택하고 레이어를 편집 모드로 전환해야합니다.
Nathan의 게시물을 기반으로 기능 방향을 반대로하는 처리 스크립트를 만들었습니다.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# define Interface
##QGIS tools (QGIS 2.x)=group
##Reverse vector direction=name
##Input_layer=vector
##Only_selected_features=boolean true
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from PyQt4 import *
from qgis.core import *
from qgis.gui import *
from qgis.utils import *
# get input parameters from GUI
inlayer = processing.getObject(Input_layer)
selected = Only_selected_features
# check 'Only selected features' option
if selected is True and inlayer.selectedFeatureCount () == 0:
raise RuntimeError('No features selected on Layer \'' + inlayer.name() + '\'.')
# check if input layer is editable
if not inlayer.isEditable():
inlayer.startEditing()
# reverse vector direction
def reverse():
geom = feature.geometry()
nodes = geom.asPolyline()
nodes.reverse()
newgeom = QgsGeometry.fromPolyline(nodes)
inlayer.changeGeometry(feature.id(),newgeom)
if selected is True:
for feature in inlayer.selectedFeatures():
reverse()
else:
for feature in inlayer.getFeatures():
reverse()
# refresh input layer
inlayer.dataProvider().forceReload()