Project Icon

lidar

开源Python工具分析数字高程模型

lidar是一个用于分析数字高程模型(DEM)中嵌套地表凹陷的开源Python包。该工具支持DEM平滑处理、凹陷提取、小型人工凹陷过滤、精细DEM生成、凹陷和山丘嵌套层次描绘,以及凹陷拓扑几何特性计算。lidar还提供交互式图形界面,便于用户以最少代码运行程序。它尤其适合分析LiDAR等高分辨率地形数据。

欢迎使用lidar包

在Colab中打开 图片 图片 图片 图片 图片 图片 图片 图片 DOI

lidar是一个用于描绘数字高程模型(DEMs)中嵌套地表凹陷层次结构的Python包。它特别适用于分析高分辨率地形数据,如由光detection和测距(LiDAR)数据生成的DEMs。

引用

  • Wu, Q., (2021). lidar: A Python package for delineating nested surface depressions from digital elevation data. Journal of Open Source Software, 6(59), 2965, https://doi.org/10.21105/joss.02965
  • Wu, Q., Lane, C.R., Wang, L., Vanderhoof, M.K., Christensen, J.R., & Liu, H. (2019). Efficient Delineation of Nested Depression Hierarchy in Digital Elevation Models for Hydrological Analysis Using Level-Set Method. Journal of the American Water Resources Association. https://doi.org/10.1111/1752-1688.12689 (PDF)

目录

简介

lidar是一个用于描绘数字高程模型(DEMs)中嵌套地表凹陷层次结构的Python包。在传统的水文建模中,DEM中的地表凹陷通常被视为人工制品,因此会被填充和移除以创建无凹陷DEM,然后用于生成连续的河流网络。然而,实际上,DEM中的地表凹陷通常是虚假和实际地形特征的组合。由光detection和测距(LiDAR)数据生成的高分辨率DEM可以捕捉和表示实际的地表凹陷,特别是在冰川和喀斯特地貌中。在过去几十年里,已经开发了各种算法来识别和描绘地表凹陷,如凹陷填充、凹陷破堤、混合破堤-填充和等高线树方法。最近,提出了一种基于图论的水平集方法来描绘嵌套的地表凹陷层次结构。lidar Python包实现了水平集方法,使描绘嵌套的地表凹陷层次结构以及高地地形特征成为可能。它还提供了一个交互式图形用户界面(GUI),允许用户通过最少的编码运行程序。

需求说明

lidar包面向希望将地表凹陷整合到水文建模中的科学家和研究人员。它还可以促进凹陷特征的识别和描绘,如沉洞、滞留池和草原坑洼。地表凹陷的详细拓扑和几何特性对地形分析和水文建模非常有用,包括大小、体积、平均深度、最大深度、最低高程、溢流高程、周长、主轴长度、次轴长度、细长度。

领域现状

目前,有一些开源Python包可以对数字高程数据进行凹陷填充,如RichDEMwhitebox,后者是WhiteboxTools的Python前端。然而,没有Python包提供用于描绘嵌套的地表凹陷和集水区层次结构以及模拟淹没动态的工具。lidar Python包旨在填补这一空白。

主要特性

  • 使用均值、中值和高斯滤波器平滑DEMs。
  • 从DEMs中提取凹陷。
  • 根据用户指定的最小凹陷大小过滤掉小的人工凹陷。
  • 生成精细的DEMs,小凹陷被填充但保持较大凹陷完整。
  • 使用水平集方法描绘凹陷嵌套层次结构。
  • 使用水平集方法描绘山体嵌套层次结构。
  • 计算凹陷的拓扑和几何特性,包括大小、体积、平均深度、最大深度、最低高程、溢流高程、周长、主轴长度、次轴长度、细长度、偏心率、方向和面积-边界框比率。
  • 将凹陷特性导出为csv文件。

安装

lidar支持多种平台,包括Microsoft Windows、macOS和Linux操作系统。请注意,您需要安装Python 3.x(< 3.9)。不支持Python 2.x。lidarPyPIconda-forge上均可获得。 lidar依赖于GDAL,在Windows上使用pip安装可能具有挑战性。 因此,强烈建议从conda-forge通道安装lidar。 如果遇到任何错误,请查看下面的依赖项部分。

从PyPI安装

要从PyPI安装lidar,请在终端中运行以下命令:

pip install lidar

从conda-forge安装

如果您的计算机上已安装AnacondaMiniconda,您可以创建一个新的conda环境来安装lidar:

conda create -n geo python=3.11
conda activate geo
conda install -c conda-forge mamba
mamba install -c conda-forge lidar

升级lidar

如果您之前安装过lidar并想升级到最新版本,可以在终端中运行以下命令:

pip install -U lidar

如果您使用conda,可以通过在终端中运行以下命令将lidar更新到最新版本:

mamba update -c conda-forge lidar

要直接从GitHub使用Git安装开发版本,请运行以下代码:

pip install git+https://github.com/opengeos/lidar

依赖项

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

Linux

基于Debian的Linux

以下命令可用于为基于Debian的Linux发行版(如Ubuntu、Linux Mint)安装GDAL。

sudo add-apt-repository ppa:ubuntugis/ppa
sudo apt-get update
sudo apt-get install gdal-bin libgdal-dev

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

sudo apt-get install --reinstall build-essential
sudo apt-get install python3-dev
pip install wheel
基于Pacman的Linux

以下命令可用于为基于Pacman的Linux发行版(如Arch Linux、Manjaro)安装GDAL。如果遇到权限错误,可能需要使用sudo

sudo pacman -S yaourt --noconfirm
yaourt -S gdal --noconfirm
yaourt -S python-gdal --noconfirm

macOS

对于基于Homebrew的Python环境,执行以下操作。

brew update
brew install gdal

或者,您可以从kyngchaos安装GDAL二进制文件。然后需要将安装位置/Library/Frameworks/GDAL.framework/Programs添加到系统路径中。

Windows

以下说明假设您已安装Anaconda。打开Anaconda Prompt并输入以下命令来创建conda环境并安装所需的包

conda create -n geo python=3.11
conda activate geo
conda install -c conda-forge mamba
mamba install -c conda-forge lidar

安装lidar包时,如果遇到错误提示Microsoft Visual C++ 14.0 is required,请按照以下步骤修复错误并重新安装lidar。更多信息可在此链接Fix Python 3 on Windows error - Microsoft Visual C++ 14.0 is required找到。

  • 下载Microsoft Build Tools for Visual Studio 2017
  • 双击安装下载的安装程序 - Microsoft Build Tools for Visual Studio 2017
  • 打开Microsoft Build Tools for Visual Studio 2017
  • 选择Workloads --> Visual C++ build tools并点击安装按钮

用法

现在通过Google Colab启动lidar Python包的交互式笔记本教程:

Open In Colab

快速示例

import os
import pkg_resources
from lidar import *

# 识别包的示例数据目录
package_name = 'lidar'
data_dir = pkg_resources.resource_filename(package_name, 'data/')

# 使用示例dem。如有需要,请更改为您自己的dem
in_dem = os.path.join(data_dir, 'dem.tif')
# 设置输出目录
out_dir = os.getcwd()

# 识别洼地和划定嵌套洼地的参数
min_size = 1000      # 作为洼地的最小像素数
min_depth = 0.5      # 作为洼地的最小深度
interval = 0.3       # 水平集方法的切片间隔
bool_shp = True      # 为每个单独的水平输出shapefile

# 根据用户定义的最小洼地大小提取洼地
out_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('结果已保存在: {}'.format(out_dir))

lidar GUI

lidar还提供了一个图形用户界面(GUI),可以使用以下Python脚本调用:

import lidar
lidar.gui()

image

ArcGIS Pro的lidar工具箱

工具箱界面

toolbox

toolbox_ui

视频教程

使用ArcGIS Pro划定嵌套地表洼地和集水区

demo

使用ArcMap划定嵌套地表洼地和集水区

demo

实际例子

下面的图像展示了在北达科他州棉花湖研究区(CLSA)使用水平集方法划定嵌套洼地的工作示例。更多测试数据集(例如北达科他州草原坑塘区的Pipestem流域)可以从http://gishub.org/2019-JAWRA-Data下载

以下示例是在一台64位Linux机器上进行的,配备四核Intel i7-7700 CPU和16 GB RAM。该算法对这个DEM的平均运行时间为0.75秒。

image

image

image

参考文献

水平集算法由Wu等人(2019)提出:

  • Wu, Q., Lane, C.R., Wang, L., Vanderhoof, M.K., Christensen, J.R., & Liu, H. (2019). Efficient Delineation of Nested Depression Hierarchy in Digital Elevation Models for Hydrological Analysis Using Level-Set Method. Journal of the American Water Resources Association. DOI: 10.1111/1752-1688.12689 (PDF)

水平集和轮廓树方法在LiDAR数据特征提取中的应用:

  • 吴青和C.R. Lane (2017)。利用LiDAR数据和航空影像划定湿地集水区并模拟水文连通性。《水文与地球系统科学》21: 3579-3595。DOI: 10.5194/hess-21-3579-2017

  • 吴青、邓春和陈震 (2016)。基于LiDAR生成的数字高程模型自动划定岩溶漏斗。《地貌学》266: 1-10。DOI: 10.1016/j.geomorph.2016.05.006

  • 吴青、苏晗、D.J. Sherman、刘鸿、J.M. Wozencraft、于波和陈震 (2016)。评估风暴引起的海岸变化的图论方法。《国际遥感杂志》37:4854-4873。DOI: 10.1080/01431161.2016.1225180

  • 吴青和C.R. Lane (2016)。北达科他州草原坑塘区湿地洼地的划定和量化。《湿地》36(2):215–227。DOI: 10.1007/s13157-015-0731-6

  • 吴青、刘鸿、王松、于波、R. Beck和K. Hinkel (2015)。基于高分辨率地形数据的局部轮廓树方法推导复杂地表洼地的几何和拓扑特性。《国际地理信息科学杂志》29(12): 2041-2060。DOI: 10.1080/13658816.2015.1038719

  • 吴青、C.R. Lane和刘鸿 (2014)。利用高分辨率LiDAR数据和航空影像探测潜在林地季节性池塘的有效方法。《遥感》6(11):11444-11467。DOI: 10.3390/rs61111444

贡献

我们欢迎并感谢您的贡献!每一点帮助都很重要,我们将始终给予认可。您可以通过多种方式做出贡献:

贡献类型

报告Bug

请在https://github.com/opengeos/lidar/issues报告Bug。

如果您要报告Bug,请包含以下内容:

  • 您的操作系统名称和版本。
  • 任何可能有助于解决问题的本地设置详细信息。
  • 重现Bug的详细步骤。

修复Bug

浏览GitHub上的问题寻找Bug。任何标记为"bug"和"help wanted"的问题都欢迎任何人来实现。

实现功能

浏览GitHub上的问题寻找新功能。任何标记为"enhancement"和"help wanted"的问题都欢迎任何人来实现。

编写文档

lidar总是需要更多的文档,无论是作为官方lidar文档的一部分、在文档字符串中,还是在网络上的博客文章、文章等。

提交反馈

发送反馈的最佳方式是在https://github.com/opengeos/lidar/issues提交问题。

如果您要提出一个功能:

  • 详细解释它将如何工作。
  • 尽可能缩小范围,使其更容易实现。
  • 请记住这是一个由志愿者驱动的项目,我们欢迎贡献。

入门

准备好贡献了吗?以下是如何为本地开发设置_lidar_。

  1. 在GitHub上fork lidar仓库。

  2. 将您的fork克隆到本地:

git clone git@github.com:your_name_here/lidar.git
  1. 将本地副本安装到conda环境中。假设您已安装conda,以下是如何为本地开发设置fork:
conda create -n lidar-test python
conda activate lidar-test
cd lidar/
pip install -e .
  1. 创建用于本地开发的分支:
git checkout -b name-of-your-bugfix-or-feature

现在您可以在本地进行更改了。

  1. 完成更改后,检查您的更改是否通过flake8和测试,包括使用tox测试其他Python版本:
flake8 lidar tests
python setup.py test or pytest

要获取flake8和tox,只需将它们pip安装到您的conda环境中。

  1. 提交您的更改并将分支推送到GitHub:
git add .
git commit -m "您更改的详细描述。"
git push origin name-of-your-bugfix-or-feature
  1. 通过GitHub网站提交拉取请求。

拉取请求指南

在提交拉取请求之前,请检查它是否符合以下准则:

  1. 拉取请求应包含测试。
  2. 如果拉取请求添加了功能,则应更新文档。将新功能放入带有文档字符串的函数中,并将该功能添加到README.md中的列表中。
  3. 拉取请求应适用于Python 3.7和3.8。检查https://github.com/opengeos/lidar/actions 并确保所有支持的Python版本都通过了测试。

致谢

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

白日梦AI

白日梦AI提供专注于AI视频生成的多样化功能,包括文生视频、动态画面和形象生成等,帮助用户快速上手,创造专业级内容。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

讯飞绘镜

讯飞绘镜是一个支持从创意到完整视频创作的智能平台,用户可以快速生成视频素材并创作独特的音乐视频和故事。平台提供多样化的主题和精选作品,帮助用户探索创意灵感。

Project Cover

讯飞文书

讯飞文书依托讯飞星火大模型,为文书写作者提供从素材筹备到稿件撰写及审稿的全程支持。通过录音智记和以稿写稿等功能,满足事务性工作的高频需求,帮助撰稿人节省精力,提高效率,优化工作与生活。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号