5 votos

Polígono R spTransform que cruza la línea de la fecha

He creado polígonos con CRS = UTM (ver aquí), que necesito para transformar a la latitud/longitud. Algunos de mis polígonos cruzar la línea de cambio de fecha, lo que provoca la transformación para crear un polígono que atraviesa el mundo entero.

library(sp)
library(rgeos)

points <- data.frame(x = c(-179.5, 0), y = c(-50, -30))
coordinates(points) <- ~x+y
proj4string(points) <- '+init=epsg:4326'

points_sp <- spTransform(points, CRS('+init=epsg:32621')) # wrong zone, but ignored for example
# expand point to circle
circles <- gBuffer(points_sp, width = 1e+5)
# transform back to WGS84
circles_latlon <- spTransform(circles, CRS(proj4string(points)))

par(mfrow = c(1, 2))
plot(circles, axes = TRUE, main = 'UTM')
plot(circles_latlon, axes = TRUE, main = 'WGS84')

enter image description here

Hay una solución para dividir los polígonos? O y la solución alternativa que se ocupa de la línea de cambio de fecha de emisión?

2voto

user20955 Puntos 1817

Cómo sobre el uso de st_wrap_dateline de la sf paquete?

library(sf)
#> Linking to GEOS 3.6.1, GDAL 2.2.4, proj.4 4.9.3
point1 <- st_point(c(-179.5, -50))
point2 <- st_point(c(0, -30))
points <- st_sfc(point1, point2, crs = 4236)

points_trans <- st_transform(points, 32621)
circles <- st_buffer(points_trans, 100000)
circles_latlon <- st_transform(circles, 4326)
circles_latlon2 <- st_wrap_dateline(circles_latlon, options = c("WRAPDATELINE=YES"))

par(mfrow = c(1, 3))
plot(circles, axes = TRUE, main = 'UTM')
plot(circles_latlon, axes = TRUE, main = 'WGS84')
plot(circles_latlon2, axes = TRUE, main = 'WGS84 with wrapdateline')

# check the results
mapview::mapview(circles_latlon2)

Creado en 2018-09-11 por el reprex paquete (v0.2.0).

Usted puede convertir el resultado a un objeto Espacial con:

circles_latlon2_sp <- as(circles_latlon2, "Spatial")

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X