2015-10-26 1 views
0

Для реальных, я искал везде, и кодирование масштаба в карте так трудно ... Adding scale bar to ggplot mapЧто такое «Простейшие» способ добавить масштаб карты в ggmap

Is there a way to add a scale bar (for linear distances) to ggmap?

Можно ли сделать простую линию, которая по-разному масштабируется до предустановки масштабирования, которую мы выбираем в функции?

У меня есть эта простая карта:

library(ggmap) 
pngMAP_df2 = get_map(location = c(-90.5, -0.5), source = "google", zoom = 8,color = "bw") 
s = ggmap(pngMAP_df2) 
s 

Я хотел бы добавить, а также GPS-координаты в этом графике:

myGPS = data.frame(lat=c(-0.6850556,-0.6854722, -0.6857778 ),lon=c(-90.22275,-90.22261, -90.22272)) 

легко осуществить это?

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

Кроме того, возможно ли с помощью этого кода сделать карту еще проще. Как видеть воду в белом и контур земли в черном?

Спасибо,

ответ

1

Что-то вроде:

library(rgdal) 
library(rgeos) 
library(ggplot2) 
library(ggthemes) 
library(ggsn) 

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") 

# sample some points BEFORE we convert gal 
rand_pts <- SpatialPointsDataFrame(spsample(gal, 100, type="random"), data=data.frame(id=1:100)) 

gal <- gSimplify(gUnaryUnion(spTransform(gal, CRS("+init=epsg:31983")), id=NULL), tol=0.001) 

gal_map <- fortify(gal) 

# now convert our points to the new CRS 
rand_pts <- spTransform(rand_pts, CRS("+init=epsg:31983")) 

# and make it something ggplot can use 
rand_pts_df <- as.data.frame(rand_pts) 

gg <- ggplot() 
gg <- gg + geom_map(map=gal_map, data=gal_map, 
        aes(x=long, y=lat, map_id=id), 
        color="black", fill="#7f7f7f", size=0.25) 
gg <- gg + geom_point(data=rand_pts_df, aes(x=x, y=y), color="steelblue") 
gg <- gg + coord_equal() 
gg <- gg + scalebar(gal_map, dist=100, location="topright", st.size=2) 
gg <- gg + theme_map() 
gg 

enter image description here

+0

Он работал вчера. Теперь у меня есть эта ошибка ... 'Ошибка в FUN (слева, справа): нечисловой аргумент для двоичного оператора Кроме того: Предупреждающие сообщения: 1: В Ops.factor (слева, справа): '*' не имеет смысла для факторов 2: В Ops.factor (слева, справа): '*' не имеет значения для факторов –

+0

Хорошо, я нашел его. Мне просто пришлось исправить эту строку: 'gg <- gg + ggsn ::: scalebar (gal_map, dist = 100, location =" topright ", st.size = 2)' Это было потому, что мой растровый пакет был активный. Это противоречит ggsn –

+0

Как я могу добавить точки к моему графику, так как градус десятичный не поддерживается на этом новом графике? –

0

Это будет полный ответ с конкретными точками на карте.

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 
Смежные вопросы