使用 ggsn 添加指北针和比例尺

Add North arrow and scalebar using ggsn

我正在寻找一种使用 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)

我收到以下错误:

Warning message: Removed 2 rows containing missing values (geom_text).

我错过了什么?

但是 运行 单独使用比例尺我收到了这些警告:

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

如何将比例尺添加到 ggmap 不是很明显。这是我在阅读代码的帮助下管理的内容。

获取地图并加载库

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

获取地图的边界框并将其重新格式化为 data.frame for 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,因为这与比例尺相对于锚点的定位方向有关。