如何在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
相关产品推荐
相关产品推荐

