支持骨骼化的地理空间包
numgeo的Python项目详细描述
Numgeo,地理空间包
注意:最好在支持标记标记语言的情况下查看此文件。
numgeo是一个python模块包,目前主要支持skeletonization。
简单地说,多边形的骨架将细长的多边形折叠为线性形式。例如,河流的轮廓是多边形(具有非零区域)。然而,我们常常把河流看作是它的骨架,例如当一条河流被画成地图上的一条或多条曲线时。尽管这些线并不代表河流的宽度,但它们仍然捕捉到河流几何的有用表达式。
算法,简而言之
该算法建立在其他人长期工作的基础上。它也有许多活动部件,但这些是亮点:
- 沿输入多边形边界(包括任何孔周围)的采样点。
- 计算一个voronoi图。(https://en.wikipedia.org/wiki/Voronoi_diagram)
- 将“图骨架”与voronoi图中的其他无关位分离(它们共同构成图骨架的“补码”)。例如,多边形中的每个孔都有自己的骨架,应将其丢弃。
- 从图骨架中“分割”出路径,以增量方式构造“分割骨架”。
- 这有点像将乐高积木(积木)从一个玩具盒(骨架)移动到另一个玩具盒(骨架),在转移过程中将其中一些积木堆叠在一起(形成许多积木的连续路径)。
- 可以选择在路径中添加“尾部”,以便它们延伸到多边形的边界,而不是短停。
- 可以选择修剪掉不需要的路径,以简化骨架并移除噪波。
- 这是通过使用规范化长度度量来实现的。
快速启动
如果您很想开始,请考虑下面的代码(,但现在不要运行它!):
fromnumgeo.scripts.skelimportprocessprocess(r"path/to/polygon_shapefile.shp",interval=0.1,min_normalized_length=0.)
interval
实际上,以映射单位(例如米)指定输出骨架的所需分辨率。如果输入多边形中最窄的收缩是x映射单位,则应指定interval
<;0.5x。
min_normalized_length
实际上,指定输出骨架的简单程度,更高的值对应更简单的值。任何小于1的值。结果没有简化,所以“原始”骨架本身是输出的,可能有很多不需要的位。
因此,如果您要运行示例代码,您将获得分辨率为0.1 m的“原始”骨架(如果您的地图单位是一米)。因为没有指定输出路径,所以骨架将默认为path/to/polygon_shapefile_skel.shp。
快速提示:
- 建议您在安装numgeo之前阅读安装文档。
- 处理时间和内存使用都随着
interval
值的逐渐减小而呈指数增长,因此在选择值时要小心。 - 您可以考虑调用
process(...)
几次,每次都使用不同的interval
和min_normalized_length
值,以建立这些参数如何影响输出框架的直觉。- 在这种情况下,可以指定
out_path_prefix
以避免覆盖以前的输出。例如,out_path_prefix="A_"
将输出到path/to/a_polygon_shapefile_skel.shp。
- 在这种情况下,可以指定