मैं QGIS में लाइन दिशा कैसे बदल सकता हूँ?


51

कुछ है जो उम्मीद है कि बहुत आसान है।

मैं QGIS में एक पॉलीलाइन / लाइन की दिशा को स्वैप करने में सक्षम होना चाहता हूं। मैंने कुछ साल पहले MapInfo में ऐसा करने के लिए एक कस्टम टूल बनाया था, हालांकि मुझे QGIS के लिए कुछ भी नहीं मिल रहा है।

किसी को यह करने के लिए एक उपकरण का पता है?

यदि कोई मौजूद नहीं है, तो मुझे इसे बनाने में खुशी होगी, अगर कोई पहले से ही बना हुआ है तो मैं नहीं चाहता।


3
बहुत अच्छा होगा। मैं ऐसे किसी भी मूल QGIS फ़ंक्शन के बारे में नहीं जानता।
UnderDark

3
मेरे पास एक अच्छा विचार है कि मैं इसे बहुत आसानी से कैसे कर सकता हूं, मैं देखूंगा कि क्या मैं आज रात कुछ कोड़ा मार सकता हूं।
नाथन डब्ल्यू

महान! हो सकता है कि इसे ftools / वेक्टर टूल बॉक्स में जोड़ा जा सकता है।
UnderDark

1
चूँकि आपको पहले से ही कोर का ध्यान रखा गया है, इस सवाल से निपटने का कोई भी मौका, लेकिन QGIS के लिए? gis.stackexchange.com/questions/9286/… resource.arcgis.com/content/kbase?fa=articleShow&d=20961
रयानडाल्टन

1
यहाँ टिकट है: hub.qgis.org/issues/4936
माइक टी

जवाबों:


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. प्लगइन्स> पायथन कंसोल पर जा रहे हैं;
  2. कोड को विंडो में कॉपी और पेस्ट करना;
  3. हिट 2x चलाने के लिए दर्ज करें।

यह प्रत्येक विशेषता के लिए "ट्रू" आउटपुट करना चाहिए जिसकी दिशा बदली गई थी। यदि यह "गलत" आउटपुट करता है, तो यह उस सुविधा की दिशा को स्वैप नहीं करता है। यह तब होगा जब परत पर एडिटिंग टॉगल नहीं होगी।

बहुत आसान!

मैंने इसे एक प्लगइन नाम से लपेटा है Swap Line Directionऔर यह QGIS प्लगइन इंस्टॉलर में उपलब्ध है।

यह प्लगइन प्लगइन इंस्टॉलर में (11/16/2015 तक) उपलब्ध नहीं है, लेकिन आप " प्लगइन बिल्डर " प्लगइन के साथ आसानी से अपना निर्माण कर सकते हैं ।

मुझे इस बात पर ध्यान देना चाहिए कि fTools के साथ संभोग करना कितना आसान है।


1
इसलिए आपने अपना स्वयं का समाधान बनाया - अच्छी तरह से किया - क्या इसे मूर्खों में जोड़ा जा सकता है?
Mapperz

मुझे यकीन है कि यह हो सकता है, मुझे बस उस तरीके को देखना होगा जो fTools कोडित है और एक पैच लिख रहा है।
नाथन डब्ल्यू

बहुत खुबस! इस तरह के समाधान मैं क्यूजीआईएस का उपयोग करना पसंद करता हूं। अच्छा काम नातान - BTW मैं अपने छोटे सूची प्रकार प्लगइन aswell पसंद है!
एंडो

@ और धन्यवाद! मैं कुछ नए विचारों का परीक्षण कर रहा हूं, बस इच्छा है कि मेरे पास इस पर काम करने के लिए अधिक समय हो ताकि मैं इसे जल्दी से निकाल सकूं।
नाथन डब्ल्यू

3
यह वास्तव में बहुत बढ़िया है कि आपने इतनी जल्दी और शान से समाधान निकाला। ओपन सोर्स की शक्ति फिर से जीतती है!
रयानडाल्टन

14

यदि आपके पास GRASS प्लगइन v.flip विकल्प का उपयोग करता है - http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip

यहाँ छवि विवरण दर्ज करें


हम्म् अधिक QGIS देशी तरीके से उम्मीद कर रहा था, फिलहाल GRASS स्थापित नहीं है। लेकिन यह लोगों के लिए एक अच्छा सुझाव है।
नाथन डब्ल्यू

अजगर में अच्छा होगा और अंडरडार्क द्वारा उल्लेखित फ़ूल में जोड़ें।
Mapperz

6

नाथन के उत्तर के बाद, आप उस परत में एक अजगर क्रिया बना सकते हैं जहाँ आप लाइनों को स्वैप करना चाहते हैं:

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 के लिए है
डेनिस रौज़ूद


4

यह प्लगइन लाइन दिशा को भी उलट देता है:

https://hub.qgis.org/projects/swapvectordirection

आपको एक सुविधा का चयन करना होगा, और प्लगइन आइकन पर क्लिक करने से पहले परत को संपादन मोड में बदलना होगा।


4

नाथन के पद के आधार पर मैंने सुविधाओं की दिशा को उलटने के लिए एक प्रोसेसिंग स्क्रिप्ट बनाई है:

#!/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


अब तक, प्रसंस्करण टूलबॉक्स में एक रिवर्स दिशा उपकरण है।
आंद्रे जे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.