我在Geofabrik上下载了osm地图,但是属性表里没有高度数据,想请教高度数据如何下载呢?
1条回答 默认 最新
檀越@新空间 2026-03-10 14:39关注下午好🌅🌅🌅
本答案参考通义千问你在使用 OSM(OpenStreetMap)地图数据 时,如果从 Geofabrik 下载的数据中没有高度信息(如海拔、高程等),这是非常常见的问题。因为 OSM 的默认数据格式(.osm 或 .pbf) 并不包含高度信息,除非在 OSM 数据中明确标注了高程数据。
一、为什么你的 OSM 数据没有高度信息?
-
OSM 原始数据 中的高程信息通常是以 标签的形式存在的,比如:
<node id="123456" lat="40.7128" lon="-74.0060"> <tag k="ele" v="10.5"/> </node> -
如果你从 Geofabrik 下载的是标准的
.osm.pbf文件,它可能没有这些标签,除非你下载的是特定区域的“地形”或“高程”数据集。
二、如何获取带有高度信息的 OSM 数据?
✅ 方法一:使用带有高程信息的 OSM 数据源
你可以从以下几个网站下载带有高程信息的 OSM 数据:
1. OpenStreetMap Highways + Elevation Data
- 网站地址:https://www.openstreetmap.org/
- 在地图上选择区域后,点击右上角的 “Export” 按钮,可以导出
.osm文件。 - 该文件可能包含部分高程信息(取决于数据贡献者是否添加了
<ele>标签)。
2. OSM Elevation Dataset (by OpenTopoMap)
- 网站地址:https://opentopomap.org/
- 提供基于 OSM 的高程数据,可以下载为 GeoTIFF 或其他栅格格式。
- 这些数据可用于 ArcGIS 中作为 高程图层 使用。
3. Global Elevation Data from SRTM or ASTER GDEM
如果你需要更精确的高程数据,建议使用 SRTM(Shuttle Radar Topography Mission) 或 ASTER GDEM 数据,它们是全球范围内的高程数据源。
- SRTM:https://srtm.csi.cgiar.org/
- ASTER GDEM:https://gdem.earthdata.nasa.gov/
三、将高程数据导入 ArcGIS 的方法
✅ 方法一:使用 SRTM/ASTER GDEM 高程数据
- 下载高程数据(例如 SRTM 1 arc-second 数据);
- 解压并加载到 ArcGIS:
- 打开 ArcCatalog,找到
.tif文件; - 右键点击文件,选择 “Add to Current Map”;
- 确保坐标系正确(建议使用 WGS84 或 UTM);
- 打开 ArcCatalog,找到
- 使用插值工具生成 DEM(可选)。
✅ 方法二:使用 OSM 高程标签数据
如果你有 OSM 数据中包含
<ele>标签,可以将其转换为 点要素类,然后进行插值生成 DEM。示例代码(Python + GDAL):
from osgeo import ogr, osr import numpy as np # 打开 OSM 文件 driver = ogr.GetDriverByName('OSM') dataSource = driver.Open('your_osm_file.osm', 0) layer = dataSource.GetLayer() # 创建输出点文件 output_driver = ogr.GetDriverByName('GPKG') output_data = output_driver.CreateDataSource('elevation_points.gpkg') output_layer = output_data.CreateLayer('elevations', geom_type=ogr.wkbPoint) # 定义字段 field_defn = ogr.FieldDefn('elevation', ogr.OFTReal) output_layer.CreateField(field_defn) # 遍历所有节点 for feature in layer: geometry = feature.GetGeometryRef() if geometry and geometry.GetGeometryName() == 'POINT': elevation = feature.GetField('ele') if elevation is not None: point = geometry.Clone() new_feature = ogr.Feature(output_layer.GetLayerDefn()) new_feature.SetGeometry(point) new_feature.SetField('elevation', float(elevation)) output_layer.CreateFeature(new_feature) # 关闭数据源 dataSource.Destroy() output_data.Destroy()运行后,你将得到一个包含高程信息的 GeoPackage 文件,可以在 ArcGIS 中加载并进行 插值生成 DEM。
四、推荐解决方案(按优先级排序)
- 使用 SRTM 或 ASTER GDEM 数据(最可靠、最广泛使用);
- 从 OpenTopoMap 下载高程图层(适合快速可视化);
- 手动提取 OSM 中的
<ele>标签并生成点数据(适用于小范围区域); - 使用 ArcGIS 的插值工具(如 IDW、Kriging)从点数据生成 DEM。
五、总结
| 问题 | 解决方案 | |------|----------| | OSM 数据无高程信息 | 从 OpenTopoMap、SRTM、ASTER GDEM 获取高程数据 | | OSM 数据含
<ele>标签 | 使用 Python 脚本提取并生成点数据,再插值成 DEM | | 需要导入 ArcGIS | 使用 GeoTIFF 或 GeoPackage 格式加载高程数据 |
如有需要,我可以提供完整的 ArcGIS 工作流教程 或 Python 脚本示例 来帮助你完成高程数据的处理与导入。
解决 无用评论 打赏 举报-