QGIS几何生成器(Geometry generators)
🌏🌍 能做什么先看看这张美国各州的地图:我用 geometry generator 的样式把 Alaska 和 Hawaii 移到了本土 48 州下方,就像你经常在美国地图上看到的那样。如果你还想知道怎么用 geometry generator 表达式创建一个全新的图层,让 AK 和 HI 永久出现在下面所示的位置,那就读到本文末尾!
🌏 geometry generator 🌍 能做什么
先看看这张美国各州的地图:我用 geometry generator 的样式把 Alaska 和 Hawaii 移到了本土 48 州下方,就像你经常在美国地图上看到的那样。如果你还想知道怎么用 geometry generator 表达式创建一个全新的图层,让 AK 和 HI 永久出现在下面所示的位置,那就读到本文末尾!
Geometry generator?Generators?
先说说术语,因为你可能会听到别人说“geometry generator”、“the geometry generator”、“geometry generators”等等,挺让人困惑。别纠结具体叫法,本质都一样。无论怎么叫,QGIS 中的 The Geometry Generator 允许你在渲染过程中用表达式按需生成新的点、线或面几何。
嗯,好吧。这到底是啥意思?意思是如果你有一个美国各州的 shapefile,想把 Alaska 和 Hawaii 移到本土各州下方,你可以用一个 geometry generator 表达式来实现——不会生成新的 shapefile,也不需要编辑原文件,一切都在“on the fly”发生。也就是你改变的是该图层的“外观”,而不必修改其原始属性或要素。这就是为什么 geometry generator 出现在 QGIS 图层的 Symbology 选项里的原因。
所以,使用 geometry generator 就是通过一个表达式改变图层的 Symbology,而无需 a) 创建任何新文件 或 b) 以任何方式编辑现有图层?是的,基本就是这样。
我发现理解 QGIS 里 geometry generator 最好的方式就是自己动手试一试。所以,试着下载下面的文件,添加到一个新的 QGIS 工程中。然后进入该图层的 Symbology,点击 Geometry Generator,看看我用来移动 Alaska 和 Hawaii 的表达式。你也可以修改参数看看会发生什么。
请注意,上述示例图层使用的坐标参考系统(CRS)的地图单位是米(metres),所以 geometry generator 表达式中的大数值(见下文)指的是“米”。如果你在一个地图单位为“度”(degrees)的图层上做类似的事,就要留意了。比如,你可能只想把 Alaska 向南挪“几度”,而不是像示例中那样移动“1200000”。
希望现在更清楚了。
Some more geometry generator examples
如果你在本站搜索“geometry generator”,会找到一些示例,但对新手来说有点复杂。所以我先从更简单的开始,接着说上面的美国示例。在下图中你可以看到 Alaska 和 Hawaii 实际在哪(黄色),以及我用 geometry generator 表达式把它们移到了哪里——注意我还把 Alaska 缩放到了 50%,并旋转了一下,这样看起来就像那些把 AK 和 HI 移动过的地图一样。
那还有其他例子吗?当然。我实际上做了一个只含本土 48 州的文件,里面放了很多 geometry generator 表达式供你玩,还配了一个教学视频。文件在这里——下载后添加到一个全新的 QGIS 工程即可:
顺便说一句,注意视频末尾的彩蛋。
看完视频、下载文件后,你会比我在这里能讲的看到更详细的操作。但如果你只想把 Texas 变得更大——而且只放大 Texas——你可以这样做。
BIG TEXAS!
如果你想走得更远、做点奇奇怪怪的东西,见下图——重点是,一旦你掌握原理,就可以随心所欲地玩各种创意。注意,我用到的所有表达式,只要你使用最新版本的 QGIS(当前至少 3.22),都可以复现。
An up to date version of QGIS is required
下面这个版本,我在背景放了一层普通的美国各州图层,然后在上面叠了一层用 geometry generator 表达式生成的小“针”形状,表示 2010 与 2020 年美国人口普查之间的人口变化。关于这种做法,我在这里有更详细的一篇文章:cometmaps。
See, you can do all sorts of cool stuff
我在英国,而且大家有时会移动 Shetland,所以如果你在处理英国地方政府区(local authorities)数据,可能也会觉得有用。想要复现的话,这里是 UK districts 图层:
I made Shetland 5 times bigger, just because
在上面的例子里,我还给 Shetland 加了一个“盒子”——而且是圆角的。仔细看你会发现我在同一个图层里用了两个独立的 geometry generator 符号。下面是我用来加“盒子”的表达式——基本和移动 Shetland 的表达式相同,只是又加了一个 bounding box 和一个 buffer 距离。
Shetland is indeed in a box, but it’s also 5x bigger here
想要更多的例子,看看上面的那个视频,它对应我制作的 US lower 48 states layer。里面塞了“非常多”的示例表达式,任你折腾。这是学习 QGIS 里 geometry generator 各种可能性的极佳方式。下面两张截图展示了文件里都有什么。你只需要把任一表达式前面的 --
删除(意味着去掉注释),一次只保留一个表达式为激活状态,然后就能看到它的效果了。
I put together loads of different expressions in this file
更多推荐
所有评论(0)