内容简介:代码日志版权声明:翻译自:http://stackoverflow.com/questions/18136468/is-there-a-way-to-add-a-scale-bar-for-linear-distances-to-ggmap
ggmap(get_map(location="Kinston, NC", zoom=12, maptype='hybrid'))+ geom_point(x=-77.61198,y=35.227792, colour="red", size=5)+ geom_point(x=-77.57306, y=35.30288, colour="blue", size=3)+ geom_point(x=-77.543, y=35.196, colour="blue",size=3)+ geom_text(x=-77.575, y=35.297, label="CRONOS Data")+ geom_text(x=-77.54, y=35.19, label="NOAA")+ geom_text(x=-77.61, y=35.22, label="PP Site")
有一些事情你需要做,以实现这一点.
首先将数据放入data.frame()中:
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包获取该地区的地图:
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"
我们需要该图像的范围:
bb <- attr(map.base,"bb")
现在我们开始了解规模.首先,我们需要一个函数给我们两点之间的距离,基于lat / long.为此,我们使用Haversine公式,由Floris在 Calculate distance in (x, y) between two GPS-Points 描述:
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 的文档,使你看起来如何需要.
代码日志版权声明:
翻译自:http://stackoverflow.com/questions/18136468/is-there-a-way-to-add-a-scale-bar-for-linear-distances-to-ggmap
以上所述就是小编给大家介绍的《有没有办法为ggmap添加比例尺(线性距离)?》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- *Matlab—线性回归方程式与线性系统
- [译] JavaScript 线性代数:使用 ThreeJS 制作线性变换动画
- 线性回归背后的数学
- PyTorch 学习:线性回归
- 数据结构-线性表
- 线性回归数学推导
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Java程序设计
宋中山 严千钧 等编 / 清华大学出版社 / 2005-8 / 27.00元
本书全面、系统地介绍了Java语言的基本概念、基本语法和编程方法。主要内容包括:Java语言概述、数据类型与运算符、流程控制语句、类与对象、继承与多态、异常处理、工具类和算法、Applet小应用程序、图形用户界面、输入和输出、Java多线程以及Java高级编程。每章后面附有习题,读者可参考使用。 本书内容丰富,结构合理,语言简洁,深入浅出,通俗易懂。基础知识与程序实例相结合,示例典型......一起来看看 《Java程序设计》 这本书的介绍吧!