R语言使用leaflet加载CSV坐标数据无法正确识别坐标如何解决
问题修复方案
坐标无法被leaflet正确识别的核心原因是:leaflet默认要求输入的坐标是WGS84地理坐标系(EPSG:4326)的十进制度经纬度,但你提供的X/Y是米为单位的投影坐标系坐标,直接传入会超出leaflet的有效经纬度范围,无法正常渲染点位。
修复步骤
- 第一步:确认你当前坐标对应的投影坐标系EPSG编码,你给出的坐标数值大概率是UTM投影或者区域地方平面投影,可向数据提供方索要对应编码,也可以根据点位实际所在区域、坐标数值范围查询匹配。
- 第二步:使用
sf包对坐标做投影转换,转为WGS84的经纬度坐标后再传入leaflet即可。
修复后参考代码
library(tidyverse) library(leaflet) library(sf) # 读入原始CSV数据 df <- read.csv("你的CSV文件本地路径.csv") # 转换坐标:先将原始坐标转为sf对象,这里32654是示例EPSG编码,可替换为你实际的投影编码 map_data <- st_as_sf(df, coords = c("X", "Y"), crs = 32654) %>% # 转换为leaflet要求的WGS84坐标系 st_transform(crs = 4326) %>% # 拆分出转换后的经纬度列 mutate(lng = st_coordinates(.)[,1], lat = st_coordinates(.)[,2]) # 生成弹窗内容 map_data$popup = paste("<b>Location #: </b>", map_data$Point, "<br>", "<b>Longitude: </b>", map_data$lng, "<br>", "<b>Latitude: </b>", map_data$lat, "<br>", "<b>Description </b>", map_data$Name) # 渲染地图 leaflet(map_data, width = "100%") %>% addTiles(group = "OSM (default)") %>% addProviderTiles(provider = "Esri.WorldStreetMap",group = "World StreetMap") %>% addProviderTiles(provider = "Esri.WorldImagery",group = "World Imagery") %>% addMarkers(lng = ~lng, lat = ~lat, popup = ~popup, clusterOptions = markerClusterOptions()) %>% # 可选:添加底图切换控件 addLayersControl( baseGroups = c("OSM (default)", "World StreetMap", "World Imagery"), options = layersControlOptions(collapsed = FALSE) )
内容的提问来源于stack exchange,提问作者Ed_Gravy
相关产品推荐
相关产品推荐

