Карты с R: невозможно изменить проекцию для точек / координат - PullRequest
1 голос
/ 18 марта 2019

Я хочу построить карту мира с несколькими точками или комбинациями координат широты и долготы.

Я не хочу использовать Mercator, поэтому я заново проецирую оба, данные для карты мира имои координаты.

В то время как проекция на мир меняется, все точки внезапно помещаются в центр карты (обычное поведение, когда проекции не совпадают, см. https://www.earthdatascience.org/courses/earth-analytics/spatial-data-r/intro-to-coordinate-reference-systems/).

Что я делаю неправильно, когда назначаю проекцию точкам?

Мой код:

library(ggplot2)
library(sf)
library(rnaturalearth)

# assign a projection, for example ... 
crs <- 3035

# get data for the world map and assign the projection
world <- ne_countries(scale = "medium", returnclass = "sf")
world <- st_transform(world, crs = crs)

# create data frame with three points, convert it to a spatial object 
# and assign the same projection
points <- data.frame(longitude = c(-105.2519, 10.7500, 2.9833),
                     latitude = c(40.0274, 59.9500, 39.6167))

points <-  st_as_sf(points, coords = c("longitude", "latitude"), crs = crs)

# plot the data with ggplot2:
ggplot() + 
  geom_sf(data = world) +
  geom_sf(data = points, color = "red")

Результат:

enter image description here

Это работает, однако, когда я использую стандартную проекцию WGS84, то есть crs = 4326):

enter image description here

1 Ответ

1 голос
/ 18 марта 2019

Координаты вашего points кадра данных были определены в терминах широта / долгота, которые соответствуют EPSG 4326. Вы должны преобразовать его в объект sf с этим конкретным параметром crs, прежде чем преобразовать его в другойСистемы координат.

Замените это:

points <- st_as_sf(points, coords = c("longitude", "latitude"), crs = crs)

На это:

points <- st_as_sf(points, coords = c("longitude", "latitude"), crs = 4326)
points <- st_transform(points, crs = crs)

И ваш код должен работать.

plot

...