Recuerda que en la informática cualquier problema casi siempre tiene más de una resoluciones, pero aquí compartiremos lo más óptimo y eficiente.
Solución:
Ok, aquí está el Python que usé 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:
- Seleccione la capa que desea editar;
- Activar Edición;
- Seleccione las entidades de esta capa que desea invertir.
Ejecute el código Python anterior mediante:
- Ir a Complementos > Consola de Python;
- Copiar y pegar el código en la ventana;
- Presiona Enter 2x para ejecutar.
Debería generar “Verdadero” para cada función cuya dirección se intercambió. Si genera “Falso”, entonces no cambió la dirección de esa característica. Esto sucederá si la capa no tiene activada la Edición.
¡Muy fácil!
Lo he envuelto en un complemento llamado Swap Line Direction
y está disponible en el instalador del complemento QGIS.
Este complemento ya no está disponible (a partir del 16/11/2015) en el instalador de complementos, pero puede crear uno propio con bastante facilidad con el complemento “Creador de complementos”.
Echaré un vistazo a lo fácil que es integrarse con fTools.
si tienes el CÉSPED el complemento usa el voltear opción – http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip
Siguiendo la respuesta de Nathan, puede crear una acción de Python en la capa donde desea intercambiar 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á intercambiar líneas con un clic sobre ellas. ¡Es mucho más fácil de usar!
Aquí tienes las comentarios y valoraciones
Nos puedes añadir valor a nuestro contenido informacional participando con tu veteranía en las acotaciones.