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.