如何将地图投影从以太平洋为中心更改为以大西洋为中心?
How to change map projection from pacific to Atlantic centered?
library(sf)
library(tidyverse)
我有一个 sf 对象
geometry type:point
预计在太平洋上空
bbox: xmin: 0 ymin: -78 xmax: 359 ymax: 0 (WGS 84)
我想将 sf 对象重新投影到 从太平洋视角 (0,360) 以大西洋为中心 (-180,180)。我在 sf 包 中找到了一个允许从大西洋到太平洋视图(即)st_shift_longitude(x)
的函数。但是我想要的恰恰相反...
帮忙?谢谢
如果没有一些关于数据外观的提示,很难确定,但这是一种方法:
我假设点的原始 sf
对象没有设置 crs,因为经度 0-360 是不寻常的。下面的代码使用 -78-0 纬度和 0-360 经度组成一些数据点。设置了 "+proj=longlat +ellps=WGS84 +pm=-360 +datum=WGS84 +no_defs"
的(有点不寻常的)crs,然后将 lon/lat 数据转换为通常的 4326。
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
library(tidyverse)
set.seed(42) # for reporducibility
points <- tibble(x = sample(0:359, size = 20, replace = T),
y = sample(-78:0, size = 20, replace = T)) %>%
st_as_sf(coords = c("x", "y"), remove = F)
# Set a crs that understands 0-360 longitude
points <- st_set_crs(points, "+proj=longlat +ellps=WGS84 +pm=-360 +datum=WGS84 +no_defs")
# reproject to epsg 4326, the usual lon/lat crs
points_4326 <- points %>% st_transform(4326)
mapview::mapview(points_4326)
同时显示旧 (0-360) 经度和新(-180 到 180)经度的示例数据的头部:
> head(points_4326)
Simple feature collection with 6 features and 2 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -166 ymin: -66 xmax: 88 ymax: -5
Geodetic CRS: WGS 84
# A tibble: 6 × 3
x y geometry
<int> <int> <POINT [°]>
1 240 -66 (-120 -66)
2 23 -66 (23 -66)
3 46 -5 (46 -5)
4 88 -10 (88 -10)
5 17 -61 (17 -61)
6 194 -13 (-166 -13)
由 reprex package (v2.0.1)
于 2022-04-19 创建
library(sf)
library(tidyverse)
我有一个 sf 对象
geometry type:point
预计在太平洋上空
bbox: xmin: 0 ymin: -78 xmax: 359 ymax: 0 (WGS 84)
我想将 sf 对象重新投影到 从太平洋视角 (0,360) 以大西洋为中心 (-180,180)。我在 sf 包 中找到了一个允许从大西洋到太平洋视图(即)st_shift_longitude(x)
的函数。但是我想要的恰恰相反...
帮忙?谢谢
如果没有一些关于数据外观的提示,很难确定,但这是一种方法:
我假设点的原始 sf
对象没有设置 crs,因为经度 0-360 是不寻常的。下面的代码使用 -78-0 纬度和 0-360 经度组成一些数据点。设置了 "+proj=longlat +ellps=WGS84 +pm=-360 +datum=WGS84 +no_defs"
的(有点不寻常的)crs,然后将 lon/lat 数据转换为通常的 4326。
library(sf)
#> Linking to GEOS 3.8.0, GDAL 3.0.4, PROJ 6.3.1; sf_use_s2() is TRUE
library(tidyverse)
set.seed(42) # for reporducibility
points <- tibble(x = sample(0:359, size = 20, replace = T),
y = sample(-78:0, size = 20, replace = T)) %>%
st_as_sf(coords = c("x", "y"), remove = F)
# Set a crs that understands 0-360 longitude
points <- st_set_crs(points, "+proj=longlat +ellps=WGS84 +pm=-360 +datum=WGS84 +no_defs")
# reproject to epsg 4326, the usual lon/lat crs
points_4326 <- points %>% st_transform(4326)
mapview::mapview(points_4326)
同时显示旧 (0-360) 经度和新(-180 到 180)经度的示例数据的头部:
> head(points_4326)
Simple feature collection with 6 features and 2 fields
Geometry type: POINT
Dimension: XY
Bounding box: xmin: -166 ymin: -66 xmax: 88 ymax: -5
Geodetic CRS: WGS 84
# A tibble: 6 × 3
x y geometry
<int> <int> <POINT [°]>
1 240 -66 (-120 -66)
2 23 -66 (23 -66)
3 46 -5 (46 -5)
4 88 -10 (88 -10)
5 17 -61 (17 -61)
6 194 -13 (-166 -13)
由 reprex package (v2.0.1)
于 2022-04-19 创建