在R中利用Leaflet绘制样方分析所需的象限网格
在Leaflet中绘制spatstat象限网格的完整方案
我来帮你把spatstat生成的象限网格顺利可视化到Leaflet地图上!你的代码已经有了不错的开头,接下来只需要把tessellation对象转换成Leaflet支持的格式,再配合颜色映射就能完成绘制了。
步骤1:将Tessellation转换为SF格式
Leaflet对**sf(Simple Features)**格式的空间数据支持最好,我们先把qc.tess转成sf对象,同时带上之前的计数数据:
library(sf) # 把tessellation转换成sf几何对象 qc_sf <- st_as_sfc(qc.tess) # 给sf对象添加计数属性,方便后续上色和弹窗 qc_sf <- st_sf(firm_count = qc.nu, geometry = qc_sf)
步骤2:优化颜色映射
你之前定义的颜色映射可以调整得更灵活,比如支持NA值、换个更直观的调色板:
colorpal4 <- colorNumeric( palette = "YlOrRd", # 从黄到红的渐变,适合展示数量多少 domain = qc_sf$firm_count, na.color = "transparent" # 空网格透明显示 )
步骤3:用Leaflet绘制网格
不需要写循环!Leaflet的addPolygons可以直接批量处理整个sf对象,效率更高:
# 初始化地图,以cbd_points的中心为初始视角 leaflet() %>% addTiles() %>% # 添加默认OpenStreetMap底图 addPolygons( data = qc_sf, fillColor = ~colorpal4(firm_count), fillOpacity = 0.7, # 填充透明度,避免遮挡底图 color = "white", # 网格边框颜色 weight = 1, # 边框粗细 popup = ~paste("企业数量:", firm_count) # 点击网格显示计数 ) %>% addLegend( pal = colorpal4, values = qc_sf$firm_count, title = "企业数量", position = "bottomright" )
一些小提示
- 如果你的
cbd_points是SpatialPointsDataFrame,可以转成sf后用st_bbox或者st_centroid更精准地设置地图初始中心:cbd_sf <- st_as_sf(cbd_points) leaflet() %>% setView(lng = st_coordinates(st_centroid(cbd_sf))[1], lat = st_coordinates(st_centroid(cbd_sf))[2], zoom = 12) %>% # 后续添加底图和网格... - 调色板可以换成
viridis系列(比如palette = "viridis"),对色弱用户更友好; - 如果需要调整网格的边框样式,直接修改
color、weight、dashArray等参数即可。
内容的提问来源于stack exchange,提问作者Eugene Tan
相关产品推荐
相关产品推荐

