如何绘制河岸而不是 R 中的一条线?
How to plot river banks instead of a single line in R?
我一直在尝试使用 sf 和 osm 制作城市地图,但我在与河流作斗争。我设法提取了河流线,所以它在图像上看起来像,即每条河流只有一条线。
有没有办法画出河流的边界,这样就能看出河流有多宽?
我这样提取行:
rivers <- bbx %>%
opq()%>%
add_osm_feature(key = "waterway",
value = c("river", "riverbank", "canal", "stream")) %>%
osmdata_sf()
然后这是我的 ggplot2 代码中的相关部分:
geom_sf(data = rivers$osm_lines,
col = "red",
size = .15,
alpha = 1)+
两者都可以查询;您只需要记住标签 waterway returns a line geometry, while water returns 是一个多边形(通常是多边形类型)。您可能需要拨打两次 OSM 立交桥电话 API。
对于具体示例,请考虑这段代码,它使用来自英国伦敦的河流 - 您希望泰晤士河在其中占据显着位置;它穿过城市时变得很宽...
请注意,从 API 调用返回的多边形和多边形都需要映射。
library(dplyr)
library(ggplot2)
library(osmdata)
bbx <- getbb("London")
# first API call - rivers as lines
rivers_as_lines <- opq(bbox = bbx) %>%
add_osm_feature(key = "waterway") %>%
osmdata_sf(quiet = F)
# second API call - rivers as polygons
rivers_as_polygons <- opq(bbox = bbx) %>%
add_osm_feature(key = "water") %>%
osmdata_sf(quiet = F)
# a visual overview; note the polygons + multipolygons plotted separately
ggplot() +
geom_sf(data = rivers_as_polygons$osm_polygons, fill = "steelblue") +
geom_sf(data = rivers_as_polygons$osm_multipolygons, fill = "steelblue") +
geom_sf(data = rivers_as_lines$osm_lines, color = "red") +
coord_sf(xlim = bbx["x", ],
ylim = bbx["y", ])
我一直在尝试使用 sf 和 osm 制作城市地图,但我在与河流作斗争。我设法提取了河流线,所以它在图像上看起来像,即每条河流只有一条线。
有没有办法画出河流的边界,这样就能看出河流有多宽?
我这样提取行:
rivers <- bbx %>%
opq()%>%
add_osm_feature(key = "waterway",
value = c("river", "riverbank", "canal", "stream")) %>%
osmdata_sf()
然后这是我的 ggplot2 代码中的相关部分:
geom_sf(data = rivers$osm_lines,
col = "red",
size = .15,
alpha = 1)+
两者都可以查询;您只需要记住标签 waterway returns a line geometry, while water returns 是一个多边形(通常是多边形类型)。您可能需要拨打两次 OSM 立交桥电话 API。
对于具体示例,请考虑这段代码,它使用来自英国伦敦的河流 - 您希望泰晤士河在其中占据显着位置;它穿过城市时变得很宽...
请注意,从 API 调用返回的多边形和多边形都需要映射。
library(dplyr)
library(ggplot2)
library(osmdata)
bbx <- getbb("London")
# first API call - rivers as lines
rivers_as_lines <- opq(bbox = bbx) %>%
add_osm_feature(key = "waterway") %>%
osmdata_sf(quiet = F)
# second API call - rivers as polygons
rivers_as_polygons <- opq(bbox = bbx) %>%
add_osm_feature(key = "water") %>%
osmdata_sf(quiet = F)
# a visual overview; note the polygons + multipolygons plotted separately
ggplot() +
geom_sf(data = rivers_as_polygons$osm_polygons, fill = "steelblue") +
geom_sf(data = rivers_as_polygons$osm_multipolygons, fill = "steelblue") +
geom_sf(data = rivers_as_lines$osm_lines, color = "red") +
coord_sf(xlim = bbx["x", ],
ylim = bbx["y", ])