移动 sf 对象的经度
Shifting the longitude of an sf object
我有一张国家地图(sf 对象),我想改变俄罗斯东部的经度,这样它就不会与俄罗斯其他地区隔离开来。
See Image
我找到了 st_shift_longitude
https://github.com/r-spatial/sf/blob/master/R/shift_longitude.R 的后端代码,它将所有坐标移动 180 度,因此生成的地图如下所示:
link
如何修改此代码块以仅移动俄罗斯东部?
shift_lon <- function(x){
xcrs = st_crs(x)
g = (x + c(360, 90)) %% c(360) - c(0, 90)
st_wrap_dateline(st_set_crs(g - c(180, 0), xcrs)) + c(180, 0)
st_set_crs(g, xcrs)
}
st_geometry(countries) <- shift_lon(st_geometry(countries))
也欢迎其他解决方案。
您需要将 world
对象分解为两部分 - 一部分包含俄罗斯,另一部分包含世界其他地区。
然后在俄罗斯部分应用太平洋视图/sf::st_shift_longitude()
,并将其与“世界其他地区”数据集合并。
在这个例子中,我使用了来自 giscoR
包的世界数据集。这是我最喜欢的,但不是唯一可用的;并且它有一个功能(或错误,视情况而定)在 antimidean 处应用薄中断;这导致在我的地图中楚科奇周围出现了人工制品。摆脱它是一个单独的问题,我不确定你会用你的世界数据集版本面对它(所以它可能是,也可能不是相关问题)。
无论如何,这是一个可能的代码实现:
library(sf)
world <- giscoR::gisco_get_countries() # or your own world dataset
rossiya <- subset(world, ISO3_CODE == "RUS")
# shift Russia to a more Pacific centric worldview
pacified_rossiya <- st_shift_longitude(rossiya)
rest_of_world <- subset(world, ISO3_CODE != "RUS")
# this is the important section: bind together the shifted and unshifted parts
world2 <- rbind(pacified_rossiya,
rest_of_world)
plot(st_geometry(world2))
我有一张国家地图(sf 对象),我想改变俄罗斯东部的经度,这样它就不会与俄罗斯其他地区隔离开来。 See Image
我找到了 st_shift_longitude
https://github.com/r-spatial/sf/blob/master/R/shift_longitude.R 的后端代码,它将所有坐标移动 180 度,因此生成的地图如下所示:
link
如何修改此代码块以仅移动俄罗斯东部?
shift_lon <- function(x){
xcrs = st_crs(x)
g = (x + c(360, 90)) %% c(360) - c(0, 90)
st_wrap_dateline(st_set_crs(g - c(180, 0), xcrs)) + c(180, 0)
st_set_crs(g, xcrs)
}
st_geometry(countries) <- shift_lon(st_geometry(countries))
也欢迎其他解决方案。
您需要将 world
对象分解为两部分 - 一部分包含俄罗斯,另一部分包含世界其他地区。
然后在俄罗斯部分应用太平洋视图/sf::st_shift_longitude()
,并将其与“世界其他地区”数据集合并。
在这个例子中,我使用了来自 giscoR
包的世界数据集。这是我最喜欢的,但不是唯一可用的;并且它有一个功能(或错误,视情况而定)在 antimidean 处应用薄中断;这导致在我的地图中楚科奇周围出现了人工制品。摆脱它是一个单独的问题,我不确定你会用你的世界数据集版本面对它(所以它可能是,也可能不是相关问题)。
无论如何,这是一个可能的代码实现:
library(sf)
world <- giscoR::gisco_get_countries() # or your own world dataset
rossiya <- subset(world, ISO3_CODE == "RUS")
# shift Russia to a more Pacific centric worldview
pacified_rossiya <- st_shift_longitude(rossiya)
rest_of_world <- subset(world, ISO3_CODE != "RUS")
# this is the important section: bind together the shifted and unshifted parts
world2 <- rbind(pacified_rossiya,
rest_of_world)
plot(st_geometry(world2))