有没有一种方法可以在QGIS中渲染具有平滑(贝塞尔曲线)曲线的线?


33

我正从使用Illustrator创建地图转变为使用QGIS和实际数据制作地图。我无法在QGIS中重新创建的东西之一是可以在Illustrator中获得的平滑曲线。我不是在谈论“连接样式”和“帽样式”,而是整个线条的呈现方式。

我正在寻找一个不包括将SVG导出到Illustrator并在那里完成地图的答案。

另外,我意识到它们可能被认为是不准确的表示形式,但是在大多数情况下,这些地图是为了让骑车者了解他们的位置,而不必一定是精确的表示形式。

这是我的意思的示例: 在此处输入图片说明


2
您的数据如何存储?大多数数据格式(例如shapefile)不允许使用圆弧。我相信现在有些数据库可以做到。
Darren Cope 2012年

Answers:


24

查看Generalizer插件,它应该做您想要的。该插件具有平滑选项,效果很好。

它不会改变线条的呈现方式,而是会生成一个应用了平滑处理(或简化/泛化)的新shapefile。

在此处输入图片说明

在此处输入图片说明


即使启用了第三方存储库,我也找不到适用于QGIS 1.7.3的插件。您能说明如何启用/查找吗?看起来很有趣而且简单。
SaultDon 2012年

3
奇怪。它应该在插件安装程序中,因为它来自主要的QGIS插件存储库。
内森(Nathan W)

3
没错,但是我必须从Python插件安装程序转到选项选项卡,然后将“允许的插件”更改为:“显示所有插件,即使是标记为实验性的插件”。
SaultDon 2012年

我今晚结束了这个插件的使用,它实际上对我来说效果更好,因为我不必使用GRASS层,只需转换当前的shapefile。
布莱恩·凯利

对于非常详细但参差不齐的数字化,我必须分两步进行:首先进行简化(例如Lang算法),然后进行平滑处理。工作了请客。
不同的本

16

使用QGIS + GRASS插件:

从“管理插件”窗口中添加Grass工具栏。 将草草工具插件添加到qgis

您的线将需要是草矢量,因此请将其转换为新的或现有的GRASS地图集。

在GRASS工具栏中,选择GRASS工具... 在此处输入图片说明

查找模块:v.generalize(此处为WIKI教程

然后,您可以选择几种不同的泛化算法: GRASS工具v。概括算法选择

注意算法:Chaiken,Hermite甚至滑动平均。还有其他几个!

可以在Wiki图片中看到差异: v.generalize简化差异示例

来自Wiki:“请注意,“ Chaiken”和“ Hermite”之间的区别在于,“ Chaiken”产生的行“内接”原始行,而“ Hermite”行“外接”原始行,如在图片[上方](黑色线为原始线,绿色线为“ Chaiken”,蓝色为“ Hermite”)


使用uDig + jgrasstools或草:

如果你有困难正从GRASS的v.generalize理想的结果,试用最新版本的uDigjgrasstools。您还可以从与jgrasstools相同的地方抓取草缸。

一旦uDig安装并启动并运行,启用Spatial Toolbox:“窗口”>“显示视图”>“其他...”。 在uDig中启用空间工具箱

取消停靠工具栏以提高可读性(右键单击“空间工具箱”选项卡>“分离...”): 在uDig中分离空间工具箱

加载所需的jgrasstools和grass(可选)模块: 将jgrasstools / grass载入udig

如果还加载了草缸文件,请不要忘记设置草的参数(指向Windows上的草可执行文件或bat文件,或者在Linux中指向草命令,即/ usr / bin / grass): 在uDig中设置草参数

最后!使用jgrasstools中的工具(不是草),您可以通过Vector Processing> LineSmootherJaiTools轻松地概括线 uDig中LineSmootherJaiTools的矢量处理

确保正确设置输入和输出(仅适用于Shapefile,因此无需将数据转换为草的地图集/位置)uDig中Spatial Toolbox的输入和输出设置

设置平滑度公差(0.0-1.0)和输入/输出后,请按一下Spatial Toolbox窗口(右上方)上的Play按钮: 用于uDig的Spatial Toolbox中的play模块

结果:
uDig简化jgrasstools结果...


这会更改原始数据还是在QGIS渲染之前以某种方式对其进行过滤?
Brian Kelly

嗯,在这里得到了回答:“(线)平滑是一个“反向”过程,它以一条线作为输入并产生原始的更平滑的近似值。在某些情况下,这是通过在原始线中插入新的顶点来实现的,并且最多可以达到原始顶点数量的4000%。在这种情况下,在平滑后简化线总是一个好主意。” 来自grass.osgeo.org/grass64/manuals/html64_user/v.generalize.html
Brian Kelly

所以,看起来这是一次您确认您的线路是正确的,并不需要进一步的编辑(除非你想调整所有额外的载体,然后再顺利的话)你很可能会适用的东西
布莱恩凯利

@spline是的,因为您必须使用本质上是“草数据集”(而不是shapefile)的文件,所以您需要确保原始shapefile是完整的。也可以选择简化线以消除多余的顶点,这取决于线的长度和贝塞尔曲线中存在的顶点数量。
SaultDon 2012年

哦,我的话,草对我来说毫无意义...地图名称,位置名称,dbase,PERMANENT ...我试图“发现”如何使用此答案(尽管之前没有草的知识),但不幸失败了。文件似乎到达了您最不期望的位置(我想不是文件吗?),在终于找到了如何选择地图后,我无法在通用化对话框中选择转换后的图层(不是我知道这是什么意思)地图)...噩梦。看看货物,如果我能解决的话:)
不同的本

1

还有另一种方法,可能仅从QGIS 2.0版本开始才采用这种方法:

在“处理”>“工具箱”下,您可以访问GRASS和SAGA工具。为了进行平滑处理,您可以找到v.generalize,也可以使用SAGA进行线条简化。这些工具适用于常规shapefile,因此不需要草向量:

在此处输入图片说明

批处理模式还没有得到很好的解决(由于必须手动选择每个文件,因此在右键菜单中右键单击并选择“作为批处理执行”。上文进一步提到的泛化器插件使您可以更简单地选择多个文件,但这仅在当前没有指定要保存的文件的情况下才起作用,否则插件崩溃。


1

下有一个平滑几何算法Processing Toolbox -> QGis geoalghoritms -> Vector

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.