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

如何从Leaflet/ArcGIS地图下载2013-2015年标记区域数据为KML用于R分析

解决方案:提取、清洗地理数据并转换为KML/GeoJSON

1. 修正JSON解析步骤

你的现有代码错误地将已提取的JSON字符串再次用toJSON()编码,这会导致数据被二次编码无法正常解析。改用jsonlite::fromJSON()将字符串转为可操作的R数据结构:

# 加载所需包
library(jsonlite)
library(sf)

# 读取并提取JSON片段(保留你原有的提取逻辑)
html_in_path <- "C:/Users/username/Downloads/index.html"
html_lines <- readLines(html_in_path)
GeoData <- html_lines[23]
start_string_remove <- '<script type="application/json" data-for="htmlwidget-d7e42020b87f95ae6d45">'
GeoData1 <- gsub(start_string_remove, '', GeoData)
GeoData1 <- gsub("</script>", "", GeoData1)

# 解析JSON为R对象(关键修正:用fromJSON而非toJSON)
GeoData_parsed <- fromJSON(GeoData1)

2. 提取地理要素并转为SF对象

网站的地图数据通常存储在x$features节点下(对应GeoJSON标准结构),将其转换为SF对象以便后续分析:

# 提取features地理要素部分
geo_features <- GeoData_parsed$x$features

# 转换为sf对象,指定坐标系为WGS84(EPSG:4326,KML默认坐标系)
sf_data <- st_as_sf(geo_features, crs = 4326)

# 过滤2013-2015年的数据(根据实际字段名调整,示例假设年份字段为year)
sf_data_filtered <- sf_data[sf_data$year %in% 2013:2015, ]

如果不确定数据结构,可通过str(GeoData_parsed)查看层级,找到存储地理要素的正确路径。

3. 导出为KML或GeoJSON

SF包支持直接导出为KML和GeoJSON格式,满足后续交叉分析需求:

# 导出为KML格式
st_write(sf_data_filtered, "标记区域_2013-2015.kml", driver = "KML")

# 可选:导出为GeoJSON格式
st_write(sf_data_filtered, "标记区域_2013-2015.geojson", driver = "GeoJSON")

验证数据有效性

导出后可读取文件验证数据是否正常:

test_data <- st_read("标记区域_2013-2015.kml")
plot(test_data)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 12:23:29