支持骨骼化的地理空间包

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将参数约束到公共超类   java Spring引导:在构造函数中加载属性文件并用作autowire注释   java中的优先级队列顺序错误。util。优先级队列和特定比较器   带有Java Sprint引导REST的Google应用程序引擎标准在GCLOUD服务器中不起作用   安卓从Java代码中检索变量并将其作为参数分配给TestNG   用于读取列表值的Java JSON对象   java Hibernate映射:实体映射中的重复列   多线程。start()不从Java中的父线程分派   java Android facebook webdialog网络错误(netstack:lib_mgr错误)   http使用Java阻止网站   java DynamicAsper:访问连接报表中动态列的值   java如何分离文件中的每个单词,并在表中显示每个单词和每个单词的编号?   如何打包和部署EclipseJava应用程序?   java使用Mule Anypoint,我想实现没有flowref的功能   java Kafka consumer ClassNotFoundException   java错误捕获帮助;消息不断重复   javaspring,Thymeleaf和CSS如何给错误着色   javascript如何在java中实现反向ajax   如何通过UDP连接从java数据包中读取序列号?