vousmevoyez! 2026-03-10 14:38 采纳率: 0%
浏览 9

osm地图导入arcgis没有高度数据怎么办?

我在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 高程数据

    1. 下载高程数据(例如 SRTM 1 arc-second 数据);
    2. 解压并加载到 ArcGIS
      • 打开 ArcCatalog,找到 .tif 文件;
      • 右键点击文件,选择 “Add to Current Map”
      • 确保坐标系正确(建议使用 WGS84 或 UTM);
    3. 使用插值工具生成 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


    四、推荐解决方案(按优先级排序)

    1. 使用 SRTM 或 ASTER GDEM 数据(最可靠、最广泛使用);
    2. 从 OpenTopoMap 下载高程图层(适合快速可视化);
    3. 手动提取 OSM 中的 <ele> 标签并生成点数据(适用于小范围区域);
    4. 使用 ArcGIS 的插值工具(如 IDW、Kriging)从点数据生成 DEM。

    五、总结

    | 问题 | 解决方案 | |------|----------| | OSM 数据无高程信息 | 从 OpenTopoMap、SRTM、ASTER GDEM 获取高程数据 | | OSM 数据含 <ele> 标签 | 使用 Python 脚本提取并生成点数据,再插值成 DEM | | 需要导入 ArcGIS | 使用 GeoTIFF 或 GeoPackage 格式加载高程数据 |


    如有需要,我可以提供完整的 ArcGIS 工作流教程Python 脚本示例 来帮助你完成高程数据的处理与导入。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月10日