我希望能够在QGIS中交换折线/线的方向。几年前,我在MapInfo中创建了一个自定义工具来执行此操作,但是对于QGIS我似乎找不到任何东西。
有人知道执行此操作的工具吗?
如果不存在,那么我很乐意尝试,只是不想做一个。
#1 楼
好的,这里是我用来做的Python: 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)
运行上述代码之前:
选择要编辑的图层;
切换编辑;
在该层中选择要反转的特征。
通过以下方式运行上述python代码:
转到“插件”>“ Python控制台”;
将代码复制并粘贴到窗口中;
单击“输入2x”以运行。
应该为每个交换了方向的要素输出“ True”。如果输出“ False”,则它没有交换该特征的方向。如果图层没有启用“编辑”功能,则会发生这种情况。
非常简单!
我将其包装在名为
Swap Line Direction
的插件中,并且可以在QGIS插件安装程序中使用。 (自2015年11月16日起)该插件不再可用,但您可以使用“插件生成器”插件轻松地构建自己的插件。
我将看看与fTools集成有多么容易。
评论
因此您创建了自己的解决方案-做得很好-可以将其添加到ftools吗?
– Mapperz♦
2011年5月4日21:36
我敢肯定,我只需要看一下fTools的编码方式并编写补丁即可。
–内森·W
2011年5月4日在22:02
太棒了!这样的解决方案是我喜欢使用QGIS的原因。 Nathan做得好-顺便说一句,我也喜欢您的小目录类型插件!
–安藤
2011年5月4日在22:05
@安藤谢谢!我正在Beta测试一些新的想法,只是希望我有更多的时间来研究它,这样我才能更快地解决它。
–内森·W
2011年5月4日在22:17
您如此迅速而优雅地制定了一个解决方案,真是太棒了。开源的力量再次获胜!
– RyanKDalton
2011年5月4日22:20
#2 楼
如果您拥有GRASS插件,请使用v.flip选项-http://grass.osgeo.org/wiki/GRASS_AddOns#v.flip评论
hmmm希望采用一种更QGIS的本机方式,目前不安装GRASS。但这对这样做的人是一个很好的提示。
–内森·W
2011年5月4日下午5:55
最好在python中使用,并添加到underdark指出的ftools中。
– Mapperz♦
2011年5月4日13:41
#3 楼
该插件也可以反转线方向:https://hub.qgis.org/projects/swapvectordirection
您必须选择一个要素,然后将图层转换为编辑模式,然后点击插件图标。
#4 楼
遵循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)
一键即可交换行。
它非常易于使用!
评论
该代码适用于2.x
–丹尼斯·鲁扎德(Denis Rouzaud)
2013年12月12日上午7:33
#5 楼
此插件将切换折线的方向。http://plugins.qgis.org/plugins/DigitizingTools/
#6 楼
根据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的?
–为什么
17年3月18日在18:01
askubuntu.com/a/123515/666853
–eclipsed_by_the_moon
17年3月18日在18:17
到目前为止,在处理工具箱中有一个反向工具。
– AndreJ
18年3月20日在7:18
评论
太好了。我不知道任何此类本机QGIS功能。我有一个很好的主意,我如何可以轻松地做到这一点,我看看我今晚是否可以做些什么。
大!也许可以将其添加到ftools / vector工具箱中。
既然您已经做好了核心工作,那么您有任何想解决这个问题的机会,但是对于QGIS? gis.stackexchange.com/questions/9286/…resources.arcgis.com/content/kbase?fa=articleShow&d=20961
这张票是:hub.qgis.org/issues/4936