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

R使用geojson_write导出GEOJSON丢失M维度(时间戳)如何解决?

解决方案

核心原因:geojsonio包的geojson_write函数默认遵循RFC7946标准GeoJSON规范,该规范明确定义仅支持2D(XY)和3D(XYZ,含高程)坐标,会自动移除M维度。你要保留4维坐标可以用以下两种方案:

方案1:使用sf自带的st_write函数(推荐)

sf包的写入函数支持关闭RFC7946严格校验,保留XYZM四个维度,直接替换你代码中最后一行geojson_write即可:

# 替换原来的geojson_write代码
st_write(res_sfdata, 
         dsn = "C:/Project/checks/res_sfdata.geojson", 
         driver = "GeoJSON", 
         RFC7946 = FALSE, # 关闭严格RFC7946规范校验,允许保留M维度
         delete_layer = TRUE) # 覆盖已存在的同名文件

输出的GeoJSON会直接保留coordinates中的经度、纬度、高程、时间戳四个值,完全符合你给出的示例格式。

方案2:手动构造JSON结构(适合自定义需求)

如果需要对输出格式做更多自定义调整,可以用jsonlite包手动构造GeoJSON结构再写入:

library(jsonlite)

# 构造FeatureCollection结构
geojson_output <- list(
  type = "FeatureCollection",
  features = lapply(1:nrow(res_sfdata), function(i) {
    list(
      type = "Feature",
      properties = list(Msisdn = res_sfdata$Msisdn[i]), # 可自行添加其他属性字段
      geometry = list(
        type = "LineString",
        coordinates = unname(st_coordinates(res_sfdata$geometry[i])[,1:4]) # 提取XYZM四列
      )
    )
  })
)

# 写入文件
write_json(geojson_output, 
           path = "C:/Project/checks/res_sfdata.geojson",
           auto_unbox = TRUE, # 自动解包单值数组
           digits = 6) # 坐标保留6位小数,可自行调整

补充说明

当前主流的地理可视化库(Mapbox GL JS、deck.gl、Leaflet扩展插件等)均兼容带4维坐标的扩展GeoJSON格式,不会影响你后续的可视化项目使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:21:02