5 votos

¿Cómo añadir un mapa topográfico a un shapefile?

Me pregunto cómo es posible agregar esta información topográfica (elevación) para el mapa de la Isla Santa Cruz y todos los de la Isla de Galápagos que tengo aquí.

library(rgdal)
library(rgeos)
library(ggplot2)
library(ggthemes)
library(ggsn)
myGPS = data.frame(lat=c( -0.6850556,-0.6854722,  -0.6857778  ),lon=c(-90.22275,-90.22261,  -90.22272)) 
coord.deg = myGPS

class(coord.deg)
## "data.frame"
coordinates(coord.deg)<-~lon+lat
class(coord.deg)
## "SpatialPointsDataFrame"
## attr(,"package")
## "sp"

# does it have a projection/coordinate system assigned?
proj4string(coord.deg) # nope
## NA

# Manually tell R what the coordinate system is
proj4string(coord.deg)<-CRS("+proj=longlat +ellps=WGS84 +datum=WGS84")

# now we can use the spTransform function to project. We will project
# the mapdata and for coordinate reference system (CRS) we will
# assign the projection from counties

coord.deg<-spTransform(coord.deg, CRS(proj4string(gal)))
# double check that they match
identical(proj4string(coord.deg),proj4string(gal))
## [1] TRUE
my_pts <- SpatialPointsDataFrame(coords = coord.deg, data=data.frame(id=1:length(coord.deg)))

URL <- "https://osm2.cartodb.com/api/v2/sql?filename=public.galapagos_islands&q=select+*+from+public.galapagos_islands&format=geojson&bounds=&api_key="
fil <- "gal.json"
if (!file.exists(fil)) download.file(URL, fil)
gal <- readOGR(fil, "OGRGeoJSON")
gal <- gSimplify(gUnaryUnion(spTransform(gal, CRS("+init=epsg:31983")), id=NULL), tol=0.001)
gal_map <- fortify(gal)
rand_pts <- spTransform(my_pts, CRS("+init=epsg:31983"))

# ggplot can't deal with a SpatialPointsDataFrame so we can convert back to a data.frame
my_pts <- data.frame(my_pts)
my_pts.final = my_pts[,2:3]
# we're not dealing with lat/long but with x/y
# this is not necessary but for clarity change variable names
names(my_pts.final)[names(my_pts.final)=="lat"]<-"y"
names(my_pts.final)[names(my_pts.final)=="lon"]<-"x"

gg <- ggplot()
gg <- gg + geom_map(map=gal_map, data=gal_map,
                    aes(x=long, y=lat, map_id=id),
                    color="black", fill="#FFFFFF", size=.5)
gg <- gg + coord_equal()
gg <- gg + ggsn:::scalebar(gal_map, dist=50, location="bottomleft", st.size=5)
gg <- gg + theme_map()
gg <- gg + geom_point(data=my_pts.final, aes(x=x, y=y), color="red")
gg

¿Tiene usted alguna idea? ¿Tienes un paquete de R que hace esto?

He añadido esto:

topo <- readOGR("public.geojson.json", layer ="OGRGeoJSON")
topo <- spTransform(topo, CRS("+init=epsg:31983"))
gg + geom_map(map = topo_map, data = topo_map, aes(map_id=id))

Pero crea un mapa con un negro de la forma en que... enter image description here

4voto

Denis Kash Puntos 16

Su topomap es un SpatialLinesDataframe. se utiliza para polígonos. Aconseja el uso de como abajo. Conecta observaciones en el pedido original. ( `` le orden por x valor, que usted también no desea).

enter image description here

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