用于生成Alpha形状的工具箱。

alphashape的Python项目详细描述


Alpha形状工具箱

pypi versionpypi pyversionstraviscodecovbinderdocumentation statusmit license

用于生成Alpha形状的工具箱。

alpha形状通常用于泛化包含点集的边界多边形。alpha参数定义为值a,使得半径为1/a的圆盘的边可以在一组点的任意两个边成员之间绘制,并且仍然包含所有点。凸面外壳是一个alpha形状,其中alpha参数等于零,该形状类似于在所有数据点上用橡皮筋包裹钉子时所看到的形状。在这个工具箱中,我们将生成α复合物,它与α形状密切相关,但由边缘点之间的直线而不是圆的弧组成。

https://en.wikipedia.org/wiki/alpha_shape

https://en.wikipedia.org/wiki/凸面外壳

围绕点集创建alpha形状通常需要一个视觉交互步骤,其中凹面外壳的alpha参数通过迭代或平分值来确定,以接近最佳拟合。alpha shape工具箱将提供工作流来缩短此手动过程的开发循环,或者通过求解具有特定特征的alpha shape来完全绕过它。将提供一个python api来帮助脚本生成alpha形状。还将提供一个控制台应用程序作为alpha shape工具箱的示例使用,以便于从命令行生成alpha shape。除了能够快速迭代alpha参数以生成凹面外壳的实用程序外,此工具集的框架还将提供一个模板,用于生成可从python、控制台或图形用户界面访问的gis工具集,而无需使用lic在控制台和用户界面上不安装python的情况下,对专有工具集进行限制。

  • 自由软件:麻省理工学院许可证
  • 文档:https://alphashape.readthedocs.io rel="nofollow">https://alphashape.readthedocs.io

功能

导入依赖项

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape

定义一组点

points=[(0.,0.),(0.,1.),(1.,1.),(1.,0.),(0.5,0.25),(0.5,0.75),(0.25,0.5),(0.75,0.5)]

绘制输入点

fig,ax=plt.subplots()ax.scatter(*zip(*points))plt.show()

png

生成Alpha形状(Alpha=0.0)(凸面外壳)

每个凸包都是α形,但不是每个α形都是凸包。当使用alpha参数0调用alphashape函数时,将始终返回凸面外壳。

创建Alpha形状
alpha_shape=alphashape.alphashape(points,0.)

在输入数据上绘制Alpha形状

fig,ax=plt.subplots()ax.scatter(*zip(*points))ax.add_patch(PolygonPatch(alpha_shape,alpha=0.2))plt.show()

png

生成Alpha形状(Alpha=2.0)(凹面外壳)

当我们增加alpha参数值时,边界形状将开始用更紧密的边界框来拟合样本数据。

创建Alpha形状
alpha_shape=alphashape.alphashape(points,2.0)

在输入数据上绘制Alpha形状

fig,ax=plt.subplots()ax.scatter(*zip(*points))ax.add_patch(PolygonPatch(alpha_shape,alpha=0.2))plt.show()

png

生成alpha形状(alpha=3.5)

如果alpha参数过高,将开始丢失原始数据集的点数。

创建Alpha形状
alpha_shape=alphashape.alphashape(points,3.5)

在输入数据上绘制Alpha形状

fig,ax=plt.subplots()ax.scatter(*zip(*points))ax.add_patch(PolygonPatch(alpha_shape,alpha=0.2))plt.show()

png

生成alpha形状(alpha=5.0)

如果你走得太远,你会失去一切。

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
0
importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
1

通过求解最佳alpha值生成alpha形状

如果alpha参数不是作为参数提供的,则可以对其进行求解,但对于大型数据集,这可能需要很长时间来计算。

创建Alpha形状
importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
2

在输入数据上绘制Alpha形状

fig,ax=plt.subplots()ax.scatter(*zip(*points))ax.add_patch(PolygonPatch(alpha_shape,alpha=0.2))plt.show()

png

带有geopandas的alpha形状

样本数据

本笔记本中使用的数据可从阿拉斯加交通和公共设施部网站获取,链接如下。它包括阿拉斯加每个公共机场的点集合。

http://www.dot.alaska.gov/stwdplng/mapping/shapefiles.shtml

加载形状文件

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
4
importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
5

png

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
6
importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
7

生成Alpha形状

Alpha形状将在GeodataFrame所在的坐标框中生成。在本例中,我们将投影到等面积投影,在坐标系中构造我们的阿尔法形状,然后转换回源投影。

投影到反照率等面积空间参考

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
8

png

确定α形状

importsysfromdescartesimportPolygonPatchimportmatplotlib.pyplotaspltimportalphashape
9

png

在数据点上绘制Alpha形状

板卡里投影
points=[(0.,0.),(0.,1.),(1.,1.),(1.,0.),(0.5,0.25),(0.5,0.75),(0.25,0.5),(0.75,0.5)]
0

png

罗宾逊投影
points=[(0.,0.),(0.,1.),(1.,1.),(1.,0.),(0.5,0.25),(0.5,0.75),(0.25,0.5),(0.75,0.5)]
1

png

学分

这个包是用cookiecutter和项目模板创建的。

历史记录

1.0.1(2019-05-06)

  • 为优化的alpha函数添加了图库图。
  • 文档清理。

1.0.0(2019-05-06)

0.1.10(2019-05-05)

  • 正在更正PYPI长描述的格式。

0.1.9(2019-05-05)

0.1.8(2019-05-05)

0.1.7(2019-04-26)

  • 现有功能的完整代码覆盖范围。

0.1.6(2019-04-24)

0.1.5(2019-04-24)

0.1.4(2019-04-24)

  • 错误修复。

0.1.3(2019-04-24)

  • 错误修复。

0.1.2(2019-04-24)

  • 错误修复。

0.1.1(2019-04-24)

  • 错误修复。

0.1.0(2019-04-23)

  • pypi上的第一个版本。

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

推荐PyPI第三方库


热门话题
即使值等于null,java也会检索行   java如何正确地创建子类的新实例   java集合。shuffle未按预期工作   elasticsearch使用JAVA API从Elastic Search建议搜索响应中提取源数据   mysql HTTP状态500 java。lang.NullPointerException   具有多个前端服务实例和后端工作者的java ZMQ请求/响应   通过短信、电子邮件、twitter、黑莓上的facebook分享java   java根据netbeans中的单选按钮切换组件的“enable”属性   java托管Bean不工作:调用NotingMB文件中的save函数时出现空指针异常   如何在java中对包含两个以上异构对象的列表进行排序?   java我在尝试log4j时遇到以下错误。   java可以在MacOSX上实现这一点吗?   我尝试在java中使用定界符输入制作caesar密码   长时间运行Tomcat进程的类加载器中的java问题   java swing焦点问题,焦点丢失,未调用focusgain   java如何以字符串格式“EEE,MMM d,yyyy”获取整数月、日和年   java JList侦听器找不到符号