基于激光雷达数字高程模型(DEM)的地形水文分析

lidar的Python项目详细描述


激光雷达

https://mybinder.org/badge_logo.svghttps://binder.pangeo.io/badge.svghttps://img.shields.io/pypi/v/lidar.svghttps://pepy.tech/badge/lidarhttps://img.shields.io/travis/giswqs/lidar.svg文档状态https://img.shields.io/badge/license-mit-yellow.svghttps://img.shields.io/badge/endve buy%20me%20a%20coffee yellowgreen.svg

作者:吴秋生(https://weats.io rel="nofollow">https://weats.io wqs @ binghamton edu

激光雷达是一个使用数字高程模型(DEM)进行地形和水文分析的工具集。它特别适用于分析高分辨率地形数据,例如从光探测和测距(lidar)数据中导出的dem。

内容

功能

  • 使用均值、中值和高斯滤波器平滑DEM(请参见 滤波.py
  • 从DEM中提取凹陷(请参见 filling.py )。
  • 根据用户指定的最小凹陷尺寸过滤出小的伪影凹陷(请参见filling.py)。
  • 生成带有小凹陷填充但较大凹陷保持完整的优化DEM(请参见 filling.py )。
  • 使用level set方法描述凹陷嵌套层次结构(请参见slicing.py)。
  • 使用level set方法描述mount嵌套层次结构(请参见mounts.py)。
  • 计算凹陷的拓扑和几何特性,包括大小、体积、平均深度、最大深度、最低高程、溢出高程、周长、长轴长度、短轴长度、伸长度、偏心率、方向和面积bbox比(请参见swqs/lidar/blob/master/lidar/slicing.py" rel="nofollow">切片.py)。
  • 将抑郁症属性导出为CSV文件(请参见切片.py)。

安装

lidar 支持多种平台,包括Microsoft Windows、MacOS和Linux操作系统。请注意,您需要安装 Python3.x 。不支持Python2.x。可以使用以下命令安装 lidar python包。如果您遇到任何错误,请检查下面的 依赖项部分。

pipinstalllidar

如果以前安装过lidar并希望升级到最新版本,可以使用以下命令:

pipinstalllidar-U

教程

现在,使用mybinder.org或binder.pangeo.io启动 lidar python包的交互式笔记本教程:

https://mybinder.org/badge_logo.svghttps://binder.pangeo.io/badge.svg

一个简单的例子
importosimportpkg_resourcesfromlidarimport*# identify the sample data directory of the packagepackage_name='lidar'data_dir=pkg_resources.resource_filename(package_name,'data/')# use the sample dem. Change it to your own dem if neededin_dem=os.path.join(data_dir,'dem.tif')# set output directory. By default, use the temp directory under user's home directoryout_dir=os.path.join(os.path.expanduser("~"),"temp")# parameters for identifying sinks and delineating nested depressionsmin_size=1000# minimum number of pixels as a depressionmin_depth=0.5# minimum depth as a depressioninterval=0.3# slicing interval for the level-set methodbool_shp=False# output shapefiles for each individual level# extracting sinks based on user-defined minimum depression sizeout_dem=os.path.join(out_dir,"median.tif")in_dem=MedianFilter(in_dem,kernel_size=3,out_file=out_dem)sink_path=ExtractSinks(in_dem,min_size,out_dir)dep_id_path,dep_level_path=DelineateDepressions(sink_path,min_size,min_depth,interval,out_dir,bool_shp)print('Results are saved in: {}'.format(out_dir))

有关详细信息,请查看示例.py。

交互式Jupyter笔记本教程

本教程有三种访问方式:

  • HTML版本:https://gishub.org/lidar-html" rel="nofollow">https://gishub.org/lidar html
  • 可视笔记本:https://gishub.org/lidar-notebook" rel="nofollow">https://gishub.org/lidar笔记本
  • 交互式笔记本:https://gishub.org/lidar-cloud" rel="nofollow">https://gishub.org/lidar cloud

将本教程作为云端交互式Jupyter笔记本- https://gishub.org/lidar cloud

https://i.imgur.com/aittpvg.gif

激光雷达图形用户界面

lidar还提供图形用户界面(gui),可使用以下python脚本调用:

importlidarlidar.gui()
https://i.imgur.com/esjcss9.png

依赖关系

lidar的python依赖项列在requirements.txt文件中。此外,lidar有一个c库依赖项:gdal>;=1.11.2。下面将解释如何在不同的操作系统中安装gdal。关于gdal的更多信息可以在这里找到。

强烈建议您使用python虚拟环境(例如conda)来测试lidar包。如有必要,请按照conda用户指南安装conda。一旦安装了conda,就可以使用终端或anaconda提示符创建python虚拟环境。有关详细信息,请查看管理python环境。

安装完gdal后,可以使用以下命令继续安装 lidar python包:

pipinstalllidar

Linux

基于debian的linux

以下命令可用于为基于debian的linux发行版(如ubuntu、linux mint)安装gdal。

sudoadd-apt-repositoryppa:ubuntugis/ppasudoapt-getupdatesudoapt-getinstallgdal-binlibgdal-devpipinstalllidar

如果遇到编译错误,请尝试以下命令。

sudoapt-getinstall--reinstallbuild-essentialsudoapt-getinstallpython3-devpipinstallwheel
基于pacman的linux

以下命令可用于为基于pacman的linux发行版(例如arch-linux、manjaro)安装gdal。如果遇到权限错误,您可能需要使用sudo

sudopacman-Syaourt--noconfirmyaourt-Sgdal--noconfirmyaourt-Spython-gdal--noconfirmpipinstalllidar

MacOS X

对于基于自制的python环境,请执行以下操作。

brewupdatebrewinstallgdal

或者,您也可以从kyngchaos安装gdal二进制文件。然后需要将安装位置 /library/frameworks/gdal.framework/programs 添加到系统路径中。

窗口

下面的说明假设您已经安装了 蟒蛇 。打开conda提示符并输入以下命令以创建conda环境并安装所需的软件包

pipinstalllidar
0

安装 richdem 包时,如果遇到"需要Microsoft Visual C++14.0"的错误,请按照以下步骤修复错误并重新安装 richdem 。有关更多信息,请访问此链接 在Windows上修复python 3错误-需要Microsoft Visual C++14.0

  • 下载 用于Visual Studio 2017的Microsoft生成工具
  • 双击以安装下载的安装程序- Microsoft Build Tools for Visual Studio 2017
  • 打开Microsoft Build Tools for Visual Studio 2017
  • 选择"工作负载"->;"Visual C++生成工具" ,然后单击"安装"按钮

示例

下图显示了北达科他州棉白杨湖研究区(CLSA)内圈定嵌套洼地的水平集方法的工作示例。更多测试数据集(如北达科他州大草原坑洞地区的管道分水岭)可从http://gishub.org/2018-jawra-data" rel="nofollow">http://gishub.org/2018-jawra data

以下示例是在64位Linux计算机上执行的,该计算机具有四核Intel i7-7700 CPU和16 GB RAM。此DEM的算法平均运行时间为0.75秒。

https://湿地.io/file/images/clsa_dem.jpghttps://weets.io/file/images/clsa_result.jpghttps://weets.io/file/images/clsa_table.jpg

参考文献

"激光雷达"软件包中的水平集算法已在以下文章中发表:

  • Wu,Q. ,Lane,C.R.,Wang,L.,Vanderhoof,M.K.,Christensen,J.R.,和Liu,H.(2018年)。用水平集方法有效地描述水文分析数字高程模型中的嵌套洼地层次。 美国水资源协会杂志 。doi: 10.1111/1752-1688.12689 (新闻中) 预印本

水平集和等高线树方法在激光雷达数据特征提取中的应用:

  • Wu,Q. ,&lane,C.R.(2017年)。利用激光雷达数据和航空影像描绘湿地集水区和模拟水文连通性。 水文和地球系统科学 。21:3579-3595。内政部:10.5194/hess-21-3579-2017" rel="nofollow">10.5194/hess-21-3579-2017
  • 吴,Q. ,邓,C.,&Chen,Z.(2016)。利用激光雷达数字高程模型自动圈定岩溶陷坑。 地貌学 。266:1-10。doi: 10.1016/j.geomorph.2016.05.006
  • 吴,Q. ,苏,H.,谢尔曼,D.J.,刘,H.,沃森克拉夫特,J.M.,于,B.,陈,Z.(2016)。一种基于图表的评估风暴引起的海岸变化的方法。 国际遥感杂志 。37:4854-4873。doi: 10.1080/01431161.2016.1225180
  • Wu,Q. ,&Lane,C.R.(2016年)。北达科他州大草原坑洞区湿地洼地的划分与量化。 湿地 。36(2):215–227。doi: 10.1007/s13157-015-0731-6
  • 吴,Q. ,刘,H.,王,S.,余,B.,贝克,R.,&Hinkel,K.(2015)。基于高分辨率地形数据的复杂地表凹陷几何拓扑特征的局部化轮廓树方法。 国际地理信息科学杂志 。29(12):2041-2060。内政部:10.1080/13658816.2015.1038719 rel="nofollow">10.1080/13658816.2015.1038719
  • Wu,Q. ,Lane,C.R.,&Liu,H.(2014年)。一种有效的检测方法g使用高分辨率激光雷达数据和航空图像的潜在林地春季水池。 遥感 。6(11):11444-11467。doi: 10.3390/rs6111444

报告错误

报告错误,请访问https://github.com/giswqs/lidar/issues" rel="nofollow">https://github.com/giswqs/lidar/issues

如果您报告了一个错误,请包括:

  • 您的操作系统名称和版本。
  • 有关本地设置的任何有助于故障排除的详细信息。
  • 重现错误的详细步骤。

学分

  • 这些算法是建立在richdem、numpy、scikit image和ref="https://github.com/nextgis/pygdal" rel="nofollow">pygdal
  • 这个包是用cookiecutter和项目模板创建的。

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

推荐PyPI第三方库


热门话题
java是安卓的子类。所容纳之物ClipData或ClipData。项目   毕加索中的java错误get()无法应用于(安卓.content.Context)   管道接受来自控制台和管道文本文件的Java输入   Java Windows文件权限   java如何在Selenium中找到此按钮?我尝试了partiallinktext并多次尝试cssSelector   java如何在spring jdbc模板中生成流式sql?   方法中的java全局值变为null   java设备“Mobile Intel(R)4 Series Express芯片组系列”(\\.\DISPLAY1)初始化失败:   java查找单独文件夹中的资源到类文件   java iCal4j添加会议说明   java如何处理InvalidTokenException?   oop如果Java不支持运算符重载,增量运算符如何在整数实例上工作?   java如何在Hibernate中获取<map>