R语言Leaflet下EPSG:27700投影坐标参考系统实现问题问询
错误原因
你遇到的警告由两个核心问题导致:
- leaflet默认会将所有sf图层自动转换为WGS84经纬度坐标系,自定义投影场景下没有关闭该逻辑,就会触发「不是经纬度数据」的警告
- 你手动填写的
proj4def参数和你的myprojectedsfobject实际存储的投影字符串存在细微差异(比如你写的字符串带datum=OSGB36,但sf对象存储的字符串可能没有该参数),就会触发基准面不一致的警告
解决方法
步骤1:对齐投影字符串
不要手动编写proj4定义,直接从你的sf对象中提取原生投影字符串,避免参数不匹配:
library(leaflet) library(sf) # 提取sf对象的原生proj4字符串 sf_proj4 <- st_crs(myprojectedsfobject)$proj4string
步骤2:修改leaflet配置
自定义投影场景下需要关闭默认的坐标系转换和世界复制跳转功能:
# 定义自定义CRS crs <- leafletCRS( code = "EPSG:27700", proj4def = sf_proj4 ) # 调用leaflet绘图 leaflet(options = leafletOptions( crs = crs, worldCopyJump = FALSE # 自定义投影必须关闭该特性 )) %>% addPolygons( data = myprojectedsfobject, label = ~htmlEscape(NAME_3), fill = FALSE, project = FALSE, # 明确禁止leaflet对数据做投影转换 options = pathOptions(noWrap = TRUE) )
补充说明
如果需要叠加底图,不能使用默认的OpenStreetMap等WGS84坐标系的瓦片服务,需要使用支持EPSG:27700的瓦片源,否则底图和矢量图层位置无法对齐。
内容的提问来源于stack exchange,提问作者RDavey
相关产品推荐
相关产品推荐

