为什么无法构建包含census block及经纬度轮廓的DataFrame?
问题原因
- 你调用
st_coordinates()提取轮廓坐标时,直接丢弃了返回结果中自带的L1分组列:该列的数值对应原NTIA_FL_CB对象的行序号,用来标记每一组坐标点归属的census block,丢失后就无法把坐标和对应的GEOID关联。 - 后续处理中你仅保留了经纬度两列,没有添加block的标识字段,其他团队拿到csv也无法区分不同block的轮廓坐标,自然没法拼成多边形。
NTIA_FL_CB_Shape_xy是普通数据框不是sf空间对象,没必要用st_write导出,直接用R基础的write.csv或者tidyverse的write_csv即可。
解决代码
# 提取坐标,保留分组标识 NTIA_FL_CB_Shape_xy <- as.data.frame(st_coordinates(NTIA_FL_CB$geometry)) # 匹配每个坐标对应的GEOID10,L1对应原sf对象的行号 NTIA_FL_CB_Shape_xy <- NTIA_FL_CB_Shape_xy %>% mutate(GEOID10 = NTIA_FL_CB$GEOID10[L1]) %>% # 关联对应block的GEOID rename(Longitude = X, Latitude = Y) %>% select(GEOID10, Latitude, Longitude) # 如需区分多边形内环外环可保留L2列 # 直接导出csv write.csv(NTIA_FL_CB_Shape_xy, "fl_3cb_ntia_latlong.csv", row.names = FALSE) # 绘图验证逻辑和之前一致 leaflet(NTIA_FL_CB) %>% addTiles() %>% addPolygons(popup = ~GEOID10) %>% addCircleMarkers(data = NTIA_FL_CB_Shape_xy, color = "green")
导出的csv包含GEOID、纬度、经度三个核心字段,其他团队导入GIS软件后,按GEOID分组即可把坐标点连接为对应census block的轮廓多边形。
内容的提问来源于stack exchange,提问作者MJ_215
相关产品推荐
相关产品推荐

