कुछ चीजें आप ऐसा करने के लिए क्या करने की जरूरत है।
require(gg_map)
map.base <- get_map(location = c(lon = mean(sites.data$lon),
lat = mean(sites.data$lat)),
zoom = 10) # could also use zoom = "auto"
हम उस के विस्तार की आवश्यकता होगी:
sites.data = data.frame(lon = c(-77.61198, -77.57306, -77.543),
lat = c(35.227792, 35.30288, 35.196),
label = c("PP Site","NOAA", "CRONOS Data"),
colour = c("red","blue","blue"))
अब हम इस क्षेत्र gg_map
पैकेज का उपयोग करने के लिए नक्शा प्राप्त कर सकते हैं:
पहले एक data.frame()
में अपने डेटा डाल करने के लिए है छवि:
bb <- attr(map.base,"bb")
अब हम पैमाने को समझना शुरू करते हैं। सबसे पहले, हमें एक समारोह की आवश्यकता है जो हमें दो बिंदुओं के बीच दूरी प्रदान करती है, जो कि लेट/लांग के आधार पर होती है। उसके लिए, हमने Calculate distance in (x, y) between two GPS-Points पर Haversine सूत्र, फ्लोरिस द्वारा वर्णित का उपयोग करें:
distHaversine <- function(long, lat){
long <- long*pi/180
lat <- lat*pi/180
dlong = (long[2] - long[1])
dlat = (lat[2] - lat[1])
# Haversine formula:
R = 6371;
a = sin(dlat/2)*sin(dlat/2) + cos(lat[1])*cos(lat[2])*sin(dlong/2)*sin(dlong/2)
c = 2 * atan2(sqrt(a), sqrt(1-a))
d = R * c
return(d) # in km
}
अगले कदम के अंक है कि हमारे पैमाने बार परिभाषित करेगा बाहर काम करने के लिए है। इस उदाहरण के लिए, मैं भूखंड के निचले बाएँ में कुछ डाल दिया, सीमांकन बॉक्स है कि हम पहले से ही खोज निकाला है का उपयोग करते हुए:
sbar <- data.frame(lon.start = c(bb$ll.lon + 0.1*(bb$ur.lon - bb$ll.lon)),
lon.end = c(bb$ll.lon + 0.25*(bb$ur.lon - bb$ll.lon)),
lat.start = c(bb$ll.lat + 0.1*(bb$ur.lat - bb$ll.lat)),
lat.end = c(bb$ll.lat + 0.1*(bb$ur.lat - bb$ll.lat)))
sbar$distance = distHaversine(long = c(sbar$lon.start,sbar$lon.end),
lat = c(sbar$lat.start,sbar$lat.end))
अंत में, हम पैमाने के साथ नक्शा आकर्षित कर सकते हैं।
ptspermm <- 2.83464567 # need this because geom_text uses mm, and themes use pts. Urgh.
map.scale <- ggmap(map.base,
extent = "normal",
maprange = FALSE) %+% sites.data +
geom_point(aes(x = lon,
y = lat,
colour = colour)) +
geom_text(aes(x = lon,
y = lat,
label = label),
hjust = 0,
vjust = 0.5,
size = 8/ptspermm) +
geom_segment(data = sbar,
aes(x = lon.start,
xend = lon.end,
y = lat.start,
yend = lat.end)) +
geom_text(data = sbar,
aes(x = (lon.start + lon.end)/2,
y = lat.start + 0.025*(bb$ur.lat - bb$ll.lat),
label = paste(format(distance,
digits = 4,
nsmall = 2),
'km')),
hjust = 0.5,
vjust = 0,
size = 8/ptspermm) +
coord_map(projection="mercator",
xlim=c(bb$ll.lon, bb$ur.lon),
ylim=c(bb$ll.lat, bb$ur.lat))
फिर
हम इसे बचाने के लिए ...
# Fix presentation ----
map.out <- map.scale +
theme_bw(base_size = 8) +
theme(legend.justification=c(1,1),
legend.position = c(1,1))
ggsave(filename ="map.png",
plot = map.out,
dpi = 300,
width = 4,
height = 3,
units = c("in"))
जो तुम कुछ इस तरह देता है:
अच्छी बात है अंकन के सभी का उपयोग करता है ggplot2()
, इसलिए आप यह देखने के लिए कि आपको किस प्रकार की आवश्यकता है, आप http://ggplot2.org पर प्रलेखन का उपयोग कर सकते हैं।
हाय, 'ओएसएम_स्केल_lookup' और संबंधित एफएक्यू लिंक –