4 votos

¿Arreglar las distorsiones al reproyectar los mapas del mundo de cshapes?

Estoy utilizando el cshapes en R como fuente de fronteras de países históricamente precisas. Aunque los mapas WGS 84 por defecto se trazan bien, me gustaría reproyectar los mapas. Esto introduce algunas distorsiones que supongo que están relacionadas con problemas subyacentes en los datos del mapa:

  1. ¿Cómo puedo reproyectar y trazar correctamente un cshapes ¿mapa en R?
  2. Si el problema de la distorsión está realmente relacionado con un problema de datos cartográficos subyacentes, ¿cómo puedo solucionarlo?

Aquí hay un mapa WGS 84 por defecto, que se ve bien:

enter image description here

Pero al intentar trazar un mapa proyectado por Robinson, la distorsión se produce cerca de la longitud 180:

enter image description here

Los asociados El archivo shapefile está aquí .

He creado estos mapas en R utilizando el siguiente código:

library("cshapes")
library("ggplot2")
library("rgdal")

# Get map data and plot with default CRS (WGS 84)
wmap <- cshp(date=as.Date("2012-06-30"))
wmap_df <- fortify(wmap)

ggplot(wmap_df, aes(long,lat, group=group)) + 
  geom_polygon() + 
  labs(title="World map (longlat)") + 
  coord_equal()

ggsave("~/Desktop/map1.png", height=4, width=7)

# Reproject to Robinson
wmap_robin <- spTransform(wmap, CRS("+proj=robin"))
wmap_df_robin <- fortify(wmap_robin)
ggplot(wmap_df_robin, aes(long,lat, group=group)) + 
  geom_polygon() + 
  labs(title="World map (robinson)") + 
  coord_equal()

ggsave("~/Desktop/map2.png", height=4, width=7)

# Export original map data
writeOGR(wmap, ".", "wmap_wgs84", driver="ESRI Shapefile")

Información adicional:

  1. Duplicado de pregunta original sobre el SO alguien de allí me sugirió que intentara conseguir ayuda aquí.
  2. Sé que hay muchas otras fuentes para las fronteras de los países, pero estoy atado a cshapes para obtener mapas históricamente precisos.
  3. Estoy usando GDAL 1.11.3, instalado vía homebrew, y Proj4 4.9.2. He construido rgdal de la fuente contra estos.
  4. Parte de mi problema es que no sé qué términos buscar siquiera para este tema, cualquier ayuda sería genial.

Hay un pregunta similar aquí , lo que indica que el problema es que Rusia y una isla del Pacífico superan los 180°E. Sin embargo, las respuestas proporcionadas están implementadas en QGIS, no en R, o se basan en la eliminación de vértices, lo cual es problemático para mí porque quiero utilizar eventualmente los mapas para hacer mapas temáticos (es decir, países con relleno de color).

3voto

SteveBurkett Puntos 960

Puede utilizar raster::crop para eliminar los nodos que sólo son menores de -180 o mayores de 180

library(cshapes)
library(raster)

wmap <- cshp(date=as.Date("2012-06-30"))
w <- crop(wmap, extent(-180, 180,-90,90))
w_robin <- spTransform(w, CRS("+proj=robin"))
plot(w_robin)

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