使用ggsn添加北向箭头和比例尺

时间:2016-01-20 10:01:37

标签: r maps ggmap

我正在寻找一种方法来使用ggsn包生成包括北向箭头和比例尺的地图。

我已经成功添加了北箭头,但也需要添加标量。

这是我到目前为止所做的:

mg  <- get_map(bbox(extent(geit_mb[[1]])*2), source="google", zoom=13)
bbox(extent(geit_mb[[1]])*2)
        min      max
s1 21.17131 21.25476
s2 69.85586 69.90750

maps <- ggmap(mg) + 
        geom_path(data = geit_4237, aes(x=location.long, y=location.lat)) +      
        scalebar(geit_4237, dist = 5, dd2km = TRUE, model = 'WGS84')

north2(maps, .75,.90)

我收到以下错误:

  

警告消息:删除了包含缺失值的两行(geom_text)。

我错过了什么?

但是单独运行scalebar位我会收到这些警告:

Warning messages:
1: In max(data$long) : no non-missing arguments to max; returning -Inf
2: In min(data$lat) : no non-missing arguments to min; returning Inf
3: In max(data$lat) : no non-missing arguments to max; returning -Inf
4: In min(data$lat) : no non-missing arguments to min; returning Inf
5: In max(data$lat) : no non-missing arguments to max; returning -Inf
6: In min(data$lat) : no non-missing arguments to min; returning Inf
7: In sin(lat) : NaNs produced
8: In cos(phi) : NaNs produced
9: In sin(phi) : NaNs produced
10: In sin(phi) : NaNs produced
11: In sin(lat) : NaNs produced
12: In cos(phi) : NaNs produced
13: In sin(phi) : NaNs produced
14: In sin(phi) : NaNs produced

输出:

 dput(bbox(extent(geit_mb[[1]])*2))


structure(c(21.17130645, 69.8558596, 21.25475825, 69.9075024), .Dim = c(2L, 2L), .Dimnames = list(c("s1", "s2"), c("min", "max")))

1 个答案:

答案 0 :(得分:2)

如何将缩放栏添加到ggmap并不是那么明显。这是我管理的内容,在阅读代码时提供了很多帮助。

获取地图并加载库

library("ggmap")
library("ggsn")
map <- get_googlemap(center =c(23.89, 52.74), zoom = 12, maptype = "hybrid")

获取地图的边界框,并将其重新格式化为data.frame scalebar

bb <- attr(map, "bb")
bb2 <- data.frame(long = unlist(bb[c(2, 4)]), lat = unlist(bb[c(1,3)]))

将缩放栏添加到ggmap

ggmap(map) + 
  scalebar(data = bb2, dist = 1, dd2km = TRUE, model  = "WGS84", 
    location = "topleft", 
    anchor = c(
      x = bb$ll.lon + 0.1 * (bb$ur.lon - bb$ll.lon), 
      y = bb$ll.lat + 0.9 * (bb$ur.lat - bb$ll.lat)
    )
  )

data是地图的边界框。

dist给出了比例尺每个部分的长度

dd2km应该为TRUE,因为地图数据是十进制度数(但代码只检查此值是否为空)

model为Google地图提供了基准 - WGS84。

我发现单独设置location会使比例如此靠近传奇或条形图丢失的边缘。因此,我使用anchor将比例尺从左侧定位10%,向上定位90%。我仍然需要设置location,因为它与比例尺相对于锚点的方向相关联。