You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中无错误读取KML文件?德里地铁KML读取报错求助

问题排查与解决方案

错误原因

你遇到的CPL_get_z_range(obj, 2) : z error - expecting three columns错误,核心原因是下载的德里地铁KML文件中混合了2D(仅经纬度)和3D(含高程Z值)的几何要素。sf包的st_read默认要求所有几何要素的坐标维度完全一致,无法自动兼容这种混合类型的坐标数据。

解决方法

以下三种方案都可以解决这个问题,本质都是统一坐标维度为2D(丢弃不需要的高程Z值):

方案1:用GDAL命令行预处理KML

利用ogr2ogr(sf依赖的GDAL工具,你的环境应该已安装)在命令行执行转换:

ogr2ogr -f KML -dim 2 delhi-metro-lines-2d.kml delhi-metro-lines.kml

之后用st_read读取处理后的文件:

metro_lines <- st_read("delhi-metro-lines-2d.kml")

方案2:直接在st_read中添加参数

在st_read里通过options参数告诉GDAL强制将3D坐标转为2D:

library(sf)

metro_lines <- st_read("MY_PATH/delhi-metro-lines.kml", options = "XYZ=XY")

方案3:通过rgdal读取后转sf

如果你的环境安装了rgdal包,可以先读取为Spatial对象并丢弃Z值,再转为sf格式:

library(rgdal)
library(sf)

# 读取时丢弃Z值
metro_sp <- readOGR("MY_PATH/delhi-metro-lines.kml", layer = "Delhi Metro Lines", dropZ = TRUE)
# 转为sf对象
metro_lines <- st_as_sf(metro_sp)

内容的提问来源于stack exchange,提问作者Anisha Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 22:43:03