如何用R语言的osmdata与sf包为OSM城镇区域填充颜色?
解决OpenStreetMap行政边界填充颜色的问题
你遇到的问题核心是:town_boundaries$osm_lines是线要素(LINESTRING),这类几何对象没有填充属性,所以fill = "red"不会生效。只有多边形(POLYGON/MULTIPOLYGON)类型的要素才能设置填充颜色,下面给你两种解决方法:
方法1:直接使用osm_polygons数据
OpenStreetMap的行政边界有时会直接以多边形形式存储在osm_polygons中,你可以先检查并直接调用:
# 检查是否存在多边形数据并绘图 if (!is.null(town_boundaries$osm_polygons)) { ggplot(town_boundaries$osm_polygons) + geom_sf(fill = "red", color = "black") # color参数设置边界线颜色 }
方法2:将osm_lines转换为多边形
如果只有线数据,需要先把闭合的线合并并转换为多边形:
# 把线要素转换为多边形 boundary_polygons <- town_boundaries$osm_lines %>% st_combine() %>% # 合并所有相关的线 st_polygonize() %>% # 将闭合线转换为多边形 st_sf() # 转为sf格式的对象 # 绘制带填充的边界 ggplot(boundary_polygons) + geom_sf(fill = "red", color = "black")
补充说明
- 转换前确保线是闭合的,
st_polygonize只能处理闭合的线要素; - 如果转换后出现多个小多边形,可以用
st_union()合并成单个面:boundary_polygons <- boundary_polygons %>% st_union() %>% st_sf()
内容的提问来源于stack exchange,提问作者J. Doe
相关产品推荐
相关产品推荐

