Как создать и построить полигоны, пересекающие международную линию дат в R?
Я считаю, что следующий код создает многоугольник, который пересекает линию даты. Этот код использует стандартные значения долготы 180 градусов (+ значения для Востока, - значения для Запада). К сожалению, это не имеет ожидаемой формы при нанесении на график.
# long and lat values
x <- c(-130, 120, -140, -90, -130)
y <- c(30, 30, 50, 80, 30)
# create SpatialPolygons object
p1 = Polygons(list(Polygon(cbind(x, y))), "p1")
sp1 <- SpatialPolygons(list(p1))
# plot
plot(sp1, col = "red")
Я могу получить ожидаемую форму, преобразовав все значения долготы в градусы к востоку следующим образом:
# convert lat/lon to degrees East
convert_180_to_360.f <- function(longitude_value){
ifelse(longitude_value < 0, longitude_value + 360, longitude_value)
}
x360 <- convert_180_to_360.f(x)
# create SpatialPolygons object
p2 <- Polygons(list(Polygon(cbind(x360, y))), "p2")
sp2 <- SpatialPolygons(list(p2))
# plot
plot(sp2, col = "red")
Однако этот многоугольник не может быть нанесен на график с другими пространственными данными, основанными на +/- 180 градусах широты.
library(maptools)
# get world map
data(wrld_simpl)
# plot map and polygon
plot(wrld_simpl)
plot(sp2, add = T, col = "red")
Есть ли способ сгенерировать многоугольник, чтобы форма была правильной, и ее можно было построить с помощью других стандартных геопространственных объектов с долготой +/- 180 °?