QGIS에서 회선 방향을 전환하려면 어떻게해야합니까?


51

희망적으로 꽤 쉬운 것.

QGIS에서 폴리 라인 / 라인의 방향을 바꾸고 싶습니다. 몇 년 전에 MapInfo에서이 작업을 수행 할 수있는 사용자 지정 도구를 만들었지 만 QGIS에 대해 아무것도 찾을 수없는 것 같습니다.

누구든지 이것을 할 수있는 도구를 알고 있습니까?

하나가 존재하지 않는다면 나는 그것을 만들어서 기쁘다. 이미 만들어 졌으면하고 싶지 않았다.


3
가지고 좋을 것입니다. 나는 그러한 기본 QGIS 기능을 모른다.
— underdark

3
나는 이것을 어떻게 쉽게 할 수 있는지 잘 알고 있습니다. 오늘 밤에 무언가를 채울 수 있는지 볼 것입니다.
— Nathan W

큰! 어쩌면 그것은 ftools / vector 도구 상자에 추가 될 수 있습니다.
— underdark

1
이미 코어를 관리 했으므로이 질문을 해결할 기회가 있습니까? 그러나 QGIS를 위해서라면? gis.stackexchange.com/questions/9286/… resources.arcgis.com/content/kbase?fa=articleShow&d=20961
— RyanDalton

1
티켓은 다음과 같습니다. hub.qgis.org/issues/4936
— Mike T

답변:


62

여기에 내가 사용했던 파이썬이 있습니다.

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)

위 코드를 실행하기 전에 :

  1. 편집하려는 레이어를 선택하십시오.
  2. 편집 토글;
  3. 이 레이어에서 반전하려는 기능을 선택하십시오.

위의 파이썬 코드를 다음과 같이 실행하십시오.

  1. 플러그인> Python 콘솔로 이동하십시오.
  2. 코드를 창에 복사하여 붙여 넣기;
  3. Enter 2x를 눌러 실행하십시오.

방향이 바뀐 각 기능에 대해 "참"을 출력해야합니다. "False"를 출력하면 해당 기능의 방향을 바꾸지 않았습니다. 레이어에 편집 기능이 설정되어 있지 않은 경우에 발생합니다.

꽤 쉽다!

나는 그것을 플러그인이라고 싸서 Swap Line DirectionQGIS 플러그인 설치 프로그램에서 사용할 수 있습니다.

이 플러그인은 플러그인 설치 프로그램에서 더 이상 사용할 수 없지만 (2015 년 11 월 16 일 현재) " Plugin Builder "플러그인을 사용하여 쉽게 플러그인을 빌드 할 수 있습니다 .

fTools와의 통합이 얼마나 쉬운 지 살펴 보겠습니다.


1
ftools에 추가 할 수 있습니까?
— Mapperz

fTools가 코딩되는 방식을보고 패치를 작성하면됩니다.
— Nathan W

환상적인! 이와 같은 솔루션은 QGIS 사용을 좋아하는 이유입니다. 좋은 직업 나단-BTW 당신의 작은 카탈로그 유형 플러그인도 좋아합니다!
— Ando

@ 안도 감사합니다! 몇 가지 새로운 아이디어를 베타 테스트 중입니다. 더 빨리 작업 할 수 있도록 더 많은 시간을 할애했으면 좋겠습니다.
— Nathan W

3
정말 빠르고 훌륭하게 솔루션을 완성한 것은 정말 대단합니다. 오픈 소스의 힘이 다시 이깁니다!
— RyanDalton


6

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)

한 번의 클릭으로 줄을 바꿀 수 있습니다. 사용하기 매우 편리합니다!


1
이 코드는 2.X입니다
— 데니스 Rouzaud



4

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()

여기에 이미지 설명을 입력하십시오


GIF는 어떻게 만들었습니까?
— whyzar


이제는 처리 도구 상자에 역방향 도구가 있습니다.
— AndreJ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.