支持骨骼化的地理空间包

numgeo的Python项目详细描述


Numgeo,地理空间包

注意:最好在支持标记标记语言的情况下查看此文件。

numgeo是一个python模块包,目前主要支持skeletonization

简单地说,多边形的骨架将细长的多边形折叠为线性形式。例如,河流的轮廓是多边形(具有非零区域)。然而,我们常常把河流看作是它的骨架,例如当一条河流被画成地图上的一条或多条曲线时。尽管这些线并不代表河流的宽度,但它们仍然捕捉到河流几何的有用表达式。

算法,简而言之

该算法建立在其他人长期工作的基础上。它也有许多活动部件,但这些是亮点:

  1. 沿输入多边形边界(包括任何孔周围)的采样点。
  2. 计算一个voronoi图。(https://en.wikipedia.org/wiki/Voronoi_diagram
  3. 将“图骨架”与voronoi图中的其他无关位分离(它们共同构成图骨架的“补码”)。例如,多边形中的每个孔都有自己的骨架,应将其丢弃。
  4. 从图骨架中“分割”出路径,以增量方式构造“分割骨架”。
    • 这有点像将乐高积木(积木)从一个玩具盒(骨架)移动到另一个玩具盒(骨架),在转移过程中将其中一些积木堆叠在一起(形成许多积木的连续路径)。
  5. 可以选择在路径中添加“尾部”,以便它们延伸到多边形的边界,而不是短停。
  6. 可以选择修剪掉不需要的路径,以简化骨架并移除噪波。
    • 这是通过使用规范化长度度量来实现的。

快速启动

如果您很想开始,请考虑下面的代码(,但现在不要运行它!):

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

快速提示:

  1. 建议您在安装numgeo之前阅读安装文档。
  2. 处理时间和内存使用都随着interval值的逐渐减小而呈指数增长,因此在选择值时要小心。
  3. 您可以考虑调用process(...)几次,每次都使用不同的intervalmin_normalized_length值,以建立这些参数如何影响输出框架的直觉。
    • 在这种情况下,可以指定out_path_prefix以避免覆盖以前的输出。例如,out_path_prefix="A_"将输出到path/to/a_polygon_shapefile_skel.shp

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java ImageIO。写入()低质量图像   使用安卓的设备屏幕大小的java拖放图像   java Adler32重复速度非常快   java在使用Burp Suite Community Edition时遇到此错误   java是否可以在交换机中使用已存在的字符串?   java:把反斜杠看作正常字符的方法   java如何创建Criteria Builder查询来连接三个具有一对一和多对一实体关系的表?   Java Spark:如何在数据集上进行flatMap,并为后续的groupBy提供新的模式?   JavaTestNG运行每个方法,并忽略TestNG中包含的方法。xml   无法使用Java运行linux命令   java我可以用什么来代替AudioPlayer。游戏者停止();?   关于如何使用pop3使用javamail从gmail帐户删除电子邮件的java查询   java Firebase Android数据库查询(读取数据)