2015-05-21 13 views
10

ggmap için bir daire ekleyin:en Paketi ggmap kullanarak Londra'da bir haritasını oluşturmak varsayalım

library(ggmap) 
library(mapproj) 

map <- get_map(location = "London", zoom = 11, maptype = "satellite") 

p <- ggmap(map)+ 
    theme(legend.position = "none") 

print(p) 

Şimdi bazı merkez koordinatları ile bu arsa için çevre eklemek istiyorum (diyelim ki: boylam = -0.1 , lat = 52.23) ve örneğin ifade edilen yarıçap kilometrelerce Ben aynen bu işleve bir açıklama ekleyebileceğiniz benzer soru (Draw a circle with ggplot2), bir çözüm kullanmaya çalıştı: Çalışır

p <- p + annotate("path", 
        x = xc+r*cos(seq(0,2*pi,length.out=100)), 
        y = yc+r*sin(seq(0,2*pi,length.out=100))) 

ama daire nedeniyle farklı ölçek gerçekten bir çember değildir. Doğru çizmek mümkün mü? Herhangi bir yardım mutluluk duyacaktır!

EDIT: Farklı paket kullanan ve çıktı doğru olan (https://gis.stackexchange.com/questions/119736/ggmap-create-circle-symbol-where-radius-represents-distance-miles-or-km) bir çözüm buldum. Yine de, eğer herkes ggmap kullanarak nasıl yapılacağını bilirse lütfen paylaşın.

> m = get_map(location="london", zoom=11, maptype="satellite") 
> corners = attributes(m)$bb 
> delta.x = corners["ur.lon"] - corners["ll.lon"] 
> delta.y = corners["ur.lat"] - corners["ll.lat"] 

Sonra buna göre yolunu ayarlayın:

+0

Eğer '+ coord_equal()' haritanızın arsa sonuna ekleyerek denediniz mi? – Phil

+0

Evet, ama o zaman bu mesafe –

+0

Plus açısından güvenilir değil, çıktı bu örnekteki web sitesinden elde edilen çıktıdan farklıdır: http://www.freemaptools.com/radius-around-point.htm –

cevap

0

Harita nesneden enlem ve boylam yayılma alabilirsiniz. Ayrıca, ggmap paketinin LonLat2XY adlı bir işleve sahip olduğuna dikkat edin (bkz. reference).

+2

"buna göre" bu durumda anlamına gelir? –

+0

'Buna göre' sadece daire boyutu parametresini, içine düşürülmekte olan değişkene bağlamayı gerektirmiyor mu? Örneğin, konum lat ve lon sırasıyla, 37.8 ve 122.4 ise, delta.y için köşeleriniz 37.9 [ur] - 37.7 [ll] olabilir. Ancak, elde ettiğiniz sonuçlara ulaşmak için referanslarınızı hesaplamanız gerekir. Onları beslediğiniz her koordinat için istediğiniz boyuta getirir. –

1

İşte sf paketi ve ggplot :: geom_sf kullanarak bir çözüm.

# dev version of ggplot2 required 
library(sf) 
library(ggplot2) 

sf_pt <- st_point(c(-0.1, 52.23)) %>% 
    st_sfc(crs = 4326) %>% 
    st_transform(32630) 

sonra hemen bir tampon

sf_pt %<>% st_buffer(100) 

eklemek EPSG geri dönüşümü: İlk olarak, koordinat bir noktayı oluşturmak ve böylece mesafe saptanabilir EPSG 32630 ile Londra UTM bölge (30 u) dönüşümü: 4326 (enlem/boylam WGS84) ve ggmap ile arsa

p <- ggmap(map) + 
    geom_sf(data = sf_pt %>% st_transform(4326)) + 
    theme(legend.position = "none") 

print(p) 
İlgili konular