QGIS和瓷砖出口


几年来,我一直致力于绘制和更新两个山区的山脊方案。 Zungarian Alatau和中天山。

最初,我在Ocad程序中绘制了所有内容。 这是绘制定向越野赛卡的特殊程序。 该项目分为数十页。 然后将这些纸张导出为图片,进行缝合并切成小块。 磁贴上传到ftp。

这是QGis中发生的情况的一个示例

这就是Ocad的情况

然后有一天我遇到了QGIS。

该程序给我留下了深刻的印象。 不错的渲染器。 虽然不如OCAD那样富有表现力,但是适合我的质量。 直接使用地理数据的能力。 无需拆分即可处理整个项目的能力。
所有这些促使整个项目转移到了QGIS。

但是现在我有点后悔。
QGIS渲染器不适合生成图块。
当然,有两个用于QGIS 2的插件QTiles和QMetaTiles。我将它们用于QGIS 3。

我将向您详细介绍干扰QGIS中图块卡生成的难以处理的门框。
使用QTiles插件完成导出

门框编号1。 当渲染器计算哪些对象属于其范围时(在QGIS中称为画布),它不考虑对象符号的大小。

例子1a 点要素

图片

如您所见,顶点图标被裁剪。 渲染器在下部图块上渲染它,但不在上部图块上渲染。 因为峰的中心没有落在图块的边界内。

例子1b 线特征



粗线在图块的边界附近延伸。 她部分掉到了较低的瓷砖上。 我一点都没顶。

该线不必沿着图块的边界。 可能仍然有这种伪像



门框编号2。 题字的安排。

例子2a 线性对象上的简短题词


渲染器在每个图块上推断出名称。

例子2b 线性对象上的长铭文

Z15

Z16

Z15上有一个铭文,因为它完全适合瓷砖的边框。
Z16上没有更多的铭文,因为长的铭文不适合图块的边界。

假设您要绘制一张世界地图,然后在整个大陆上用大写字母写上“ EURASIA”。 什么都不会发生。 铭文仅出现在将其放置在整个图块中的缩放比例上。

实施例2c。 字幕功能

我打开了“显示部分标签”选项

Z16

Z15

在Z16上,渲染器仅显示题词的一部分,该部分可分为小块。 当然,当渲染相邻的图块时,他会忘记它。

如果“显示部分标签”选项被禁用,则Z16上将完全没有题词。

需要两种方法来解决这些问题。

1.金属化
2.缓冲区

元尾。
不是每个瓦片单独渲染,而是一组多个瓦片。 说4x4,然后切成小块。

缓冲区
渲染出比瓷砖或metatile大的区域,然后从中切出所需的块。

两种方法都不能校正上述门框,而是将它们移到下方几个缩放级别。 相同的门框已经出现在图块的边界以及分位数或缓冲区的边界。

实施例2d。 点要素
我做导出插件QMetaTiles。 元文件的大小为2x2。 这意味着该区域将以2x2的瓷砖渲染,然后切成小块。

Z16 图片

真的 铭文现在尚未修剪,因为它完全适合2x2磁贴区域。 但是在元尾的边界上,对象本身已被切除。 线性对象也是如此。
该问题已将缩放级别移至下方。

门框编号3。 下载题词
例子3a
每次,对准器都会为下一个铭文选择最有利的位置。 此外,标签的位置取决于画布的位置。 将其移动几毫米,所有铭文的位置将完全不同。

这意味着,当渲染一个图元文件及其周围的缓冲区时,题词可以放在一个位置,而渲染相邻的图元文件时,可以在一个完全不同的位置。

我正在将一张地图导出到图块。 铭文一阶。

然后我稍微移动画布,然后再次导出。 铭文已经完全不同的顺序。 在这种情况下,会出现此类伪像。



这一切怎么办?

元尾和缓冲区无法解决上述问题,而是将它们移至较低的缩放级别。

1.渲染器计算应绘制的对象时,不仅应考虑对象的地理数据,还应考虑其符号。

例如,对于所有对象,渲染器必须存储BBOX,该对象在单独渲染后将其使用。 渲染场景时,需要考虑画布与渲染对象的各个BBOX的交集。

同时,希望BBOX还包含附加到对象的铭文。

2.标签的位置不应取决于画布的位置。 然后,通过部分导出,标签片段将被很好地缝合。 不需要转移和缓冲区。

不幸的是,目前,从QGI导出图块太糟糕了,尚不清楚何时修复。

也许有人在这里参与QGis的开发?

Source: https://habr.com/ru/post/zh-CN429426/


All Articles