当前位置: 首页 > news >正文

如何通过Python从DEM文件生成坡度和坡向数据

一般来说,DEM地形数据转坡度和坡向的操作,都是通过ArcGIS来完成。

但 是 (这里有一个Big BUT),主包真是觉得ArcGIS的很多软件设计和操作方法不太方便,所以就想用Python来替代以下,而且直觉上也完全是可以完成的,不就是数学计算吗。

所以,我就开始了尝试......

跑通之后,总结一下整体步骤为后续有需要的同学做点小贡献。

其实操作起来不难,就是需要选择好合适的工具:

首先,就是库文件选择与安装(最关键步骤)

坡度和坡向数据计算库文件主要有如下几类:richdem、GDAL、arcpy

RichDEM

首先,richdem,我个人不建议使用,我就是为了搞定这个库文件浪费了很多时间最后走不通,因为RichDEM的核心功能是用高性能C++ 编写的(特别是地形分析算法),Python只是一个"外壳",实际计算由C++模块_richdem.pyd执行,所以安装起来比较麻烦。

感兴趣的同学也可以自己尝试,反正我安装的时候就是各种报错......

GDAL

GDAL相对来说最容易操作,这是一个非常强大的开源库,可以处理各种栅格和矢量数据格式。Python 中可通过 osgeo 模块来使用 GDAL。

import os
from osgeo import gdal
from osgeo import gdalconst

ArcPy

我自己选择的是arcpy,没有什么有说服力的理由,只是因为这是ArcGIS自带的库文件,所以我觉得它的计算精度或者可靠性更高一点(纯主观,未验证)

但是,这个操作起来其实也有一点点麻烦,因为arcpy 并不是一个可以通过 pip 或 conda install 从公共仓库(如 PyPI、conda-forge)直接安装的库。

arcpy 是 ESRI ArcGIS 软件自带的 Python 模块,它是一个专有的(Proprietary)库。 这意味着:

  1. 必须安装了 ArcGIS Desktop (ArcMap) 或 ArcGIS Pro 软件。

  2. arcpy 模块会随 ArcGIS 软件一起安装,并集成到其自带的 Python 环境中。

  3. 不能像安装其他 Python 库一样,在任意的 Conda 环境或通过 pip 命令来安装 arcpy。

所以在使用arcpy进行坡度坡向计算时,必须得在ArcGIS自带库文件的环境中去运行代码。

下面仔细说一下如何配置ArcGIS的环境:

  1. 找到 ArcGIS Pro 自带的 Python 环境:

    • 默认情况下通常在:C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3

    • 如果在 ArcGIS Pro 中创建了新的环境,其路径可能类似:C:\Users\<YourUsername>\AppData\Local\ESRI\conda\envs\<YourCustomEnvName>

  • 方法 A: 直接激活并使用该环境

    • 打开命令行工具(如 Anaconda Prompt 或 PowerShell)。

    • 直接切换到 ArcGIS Pro 自带的 Python 环境:

      • 如果 ArcGIS Pro 默认环境路径是 C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3

      • 您不能直接用 conda activate arcgispro-py3 (除非手动将其添加到conda已知环境列表中,但这不常见)。

      • 最直接的方式是使用该环境的完整路径来执行 Python 脚本,或者直接运行该环境中的 python.exe。

"C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe" your_script.py
  • 方法 B: 在 IDE (如 VS Code, PyCharm) 中配置解释器

    • 打开IDE,我用的时VS Code。

    • 找到项目或工作区的 Python 解释器设置。

    • 选择或添加解释器,并指定 ArcGIS Pro 自带的 python.exe 路径(例如:C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3\python.exe)。

    • 这样,在 IDE 中运行脚本时,就会使用这个包含 arcpy 的环境。

然后输入C:\Program Files\ArcGIS\Pro\bin\Python\envs\arcgispro-py3即可,具体路径是什么得看自己的配置,选到arcgispro-py3这一级就行。

配置好后,就可以开始写代码运行了,这一部分还需要注意几个问题。

  • 导入arcpy的时候,要把Slope和Aspect都单独导入,不然函数名称不太对
import arcpy
from arcpy.sa import Slope, Aspect
  • 确认好DEM文件路径,同时不要修改内部的文件名,不然可能会出错

验证方法:

  • 手动打开文件资源管理器,导航到 F:\DATA\DEM\。

  • 确认里面有一个名为 dem_1km 的文件夹

  • 进入 dem_1km 文件夹,确认里面有 hdr.adf、w001001.adf 等文件,这些是 ESRI Grid 格式的内部文件。

为了帮助调试,可以在脚本中添加一个检查路径的语句:

import os # 在脚本开头添加这行
# ... (其他导入和环境设置) ...input_dem = r"F:\DATA\DEM\dem_1km"# --- 检查输入路径是否存在 ---
if not os.path.exists(input_dem):print(f"错误:输入数据集路径 '{input_dem}' 不存在。请检查路径是否正确。")exit() # 如果路径不存在,则退出脚本# ... (后续计算代码) ...

OK,到这里基本就能够完美运行了。

可以导入到ArcGIS检查一下。

多吐槽一句,地形数据的格式确实麻烦,还不能拆开,必须以文件夹形式输入,不知道有没有好的解决办法......

http://www.xdnf.cn/news/1028089.html

相关文章:

  • 读取OpenFOAM二进制polyMesh格式的C/C++程序
  • 手搓中文字符编程语言
  • 一文掌握 Windows 文件传输:5 种命令行工具的原理、参数与示例
  • 中国人工智能证书综合信息表(2025年版)
  • 基于混合预编码的同时进行无线信息和功率传输的毫米波海量MIMO-NOMA
  • 如何确保邮件群发不会被标记为垃圾邮件?
  • 【测试开发】函数高阶-闭包、装饰器
  • P25:LSTM实现糖尿病探索与预测
  • Spring AOP与代理模式
  • 利用 Python 爬虫按关键字搜索 1688 商品
  • mvnd-快速打包maven项目
  • 如何使用自动化测试来提高接口测试的效率
  • 1Panel 618 年中大促|不止半价!
  • 《二叉堆》题集
  • Ubuntu VMware虚拟机卡在/dev/sda1
  • ubuntu调整硬盘大小-使用gparted
  • 板子接入mipi摄像头
  • HTML+CSS 动态菜单和登录框
  • 共建数据强国:政务数据共享的双轮革命
  • 【力扣 简单 C】160. 相交链表
  • C++笔记-C++11(三)
  • 【Spring AI】MCP Server实现多实例部署
  • 【灵动Mini-F5265-OB】ADC之片内温度传感器与参考电压获取
  • springboot+vue大文件断点续传
  • 04 dnsmasq 的环境搭建
  • 【MIPI屏幕调试记录】个人记录用
  • Python+requests+pytest接口自动化测试框架的搭建
  • 专项提升-分析dump堆文件 服务器内存占用排查
  • 在死胡同里 做加法是什么意思?
  • 坚持做一件事情和好奇做一件事,本质区别和思考