53 votos

¿Cómo puedo cambiar la dirección de la línea en QGIS?

Algo que, con suerte, es bastante fácil.

Me gustaría poder cambiar la dirección de una polilínea/línea en el QGIS. Hice una herramienta personalizada para hacer esto en MapInfo hace un par de años, sin embargo parece que no puedo encontrar nada para QGIS.

¿Alguien sabe de alguna herramienta para hacer esto?

Si uno no existe, entonces estoy feliz de intentar hacerlo, sólo que no quería hacerlo si ya se había hecho uno.

4 votos

Sería estupendo tenerlo. No conozco ninguna función nativa de QGIS de este tipo.

4 votos

Tengo una buena idea de cómo puedo hacer esto con bastante facilidad, voy a ver si puedo azotar algo esta noche.

1 votos

Genial. Quizás se pueda añadir a la caja de herramientas ftools/vector.

66voto

Jauder Ho Puntos 3172

Ok aquí está el Python que utilicé para hacerlo:

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)

Antes de ejecutar el código anterior:

  1. Seleccione la capa que desea editar;
  2. Activar la edición;
  3. Seleccione las características de esta capa que desee invertir.

Ejecuta el código python anterior por:

  1. Ir a Plugins > Consola de Python;
  2. Copiar y pegar el código en la ventana;
  3. Pulsa Enter 2 veces para ejecutar.

Debería salir "True" para cada característica cuya dirección fue intercambiada. Si la salida es "False", entonces no se ha intercambiado la dirección de esa característica. Esto ocurrirá si la capa no tiene activada la edición.

Bastante fácil.

Lo he envuelto en un plugin llamado Swap Line Direction y está disponible en el instalador de plugins de QGIS.

Este plugin ya no está disponible (a partir del 16/11/2015) en el instalador de plugins, pero puedes construir el tuyo propio de forma bastante sencilla con el " Constructor de plugins ".

Voy a echar un vistazo a la facilidad de integración con fTools.

1 votos

Así que has creado tu propia solución - bien hecho - ¿se puede añadir a ftools?

0 votos

Estoy seguro de que se puede, sólo tendré que mirar cómo está codificado fTools y escribir un parche.

0 votos

¡Fantástico! Soluciones como esta son la razón por la que me gusta usar QGIS. ¡Buen trabajo Nathan - BTW me gusta su pequeño catálogo tipo plugin aswell!

16voto

Erik Öjebo Puntos 6937

Si tiene el HIERBA utilice el plugin v.flip opción - http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip

enter image description here

0 votos

Hmmm esperaba una forma más nativa de QGIS, no tengo instalado GRASS en este momento. Pero es un buen consejo para las personas que lo hacen.

0 votos

Sería bueno tenerlo en python y añadirlo a ftools señalado por underdark.

0 votos

Ahora se encuentra en [ Geometría vectorial | Inversión de la dirección de la línea ]

8voto

idrosid Puntos 3672

Siguiendo la respuesta de Nathan, puedes crear una acción de python en la capa donde quieres intercambiar las líneas:

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)

Podrás intercambiar las líneas con un solo clic. Es muy fácil de usar.

1 votos

Este código es para 2.x

6voto

SpliFF Puntos 214

Este plugin también invierte la dirección de la línea:

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

Tiene que seleccionar una característica y poner la capa en modo de edición antes de hacer clic en el icono del plugin.

6voto

ROBINSON Puntos 916

Basado en el post de Nathan he creado un procesamiento script para invertir el sentido de las características:

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

enter image description here

1 votos

¿Cómo ha creado el gif?

2 votos

0 votos

A estas alturas, hay una herramienta de dirección inversa en la caja de herramientas de procesamiento.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X