Suite

Ggmap : créer un symbole de cercle où le rayon représente la distance (miles ou km)


J'essaie d'ajouter un cercle autour d'un point de latitude et de longitude donné où la taille du cercle (rayon) reflète la distance en miles ou en km.

J'ai réussi à trouver cet exemple en utilisant ggmap, où je peux ajouter un cercle. mais que dois-je faire pour qu'il représente la distance. J'aimerais finalement que les limites du cercle représentent 20 milles du centre.

Code ci-dessous :

library(ggmap) library(ggplot2) d <- data.frame(lat=c(33.79245), lon=c(-84.32130)) emory <- get_map("Atlanta,Georgia", zoom=12) p <- ggmap( emory) p <- p + geom_point(data=d, aes(x=lon, y=lat), color="red", size=20, alpha=0.5) p

Le problème réel est de tracer un cercle de 40 miles de diamètre sur une carte avec une projection lat/long (typiquement EPSG:4326), car les unités natives de la carte sont les degrés. Par conséquent, il me semble que la solution la plus simple consiste à travailler avec une projection différente basée sur des mètres (qui peuvent facilement être convertis en miles) plutôt que sur des degrés.
En alternative àget_map, vous pouvez travailler avecgmapdu démo package qui permet également la récupération des données Google Maps. Je dois avouer queget_mapdonne une résolution spatiale plus élevée et est plus facile à manipuler lorsque vous travaillez avecggplot, mais à des fins de démonstration,gmapdevrait faire l'affaire aussi. Quoi qu'il en soit, récupérer les données de Google Maps fonctionne de manière assez similaire…

# Google Map of Atlanta library(dismo) emory <- gmap("Atlanta,Georgia", zoom = 10, scale = 2)

Ensuite, vous devez transformer votre emplacement central en un véritable objet spatial en définissantcoordonnéesetprojection. À des fins ultérieures de mise en mémoire tampon et de traçage, vous devez le reprojeter dans le système de référence de coordonnées (CRS) de l'objet "RasterLayer" de Google Maps.

d <- data.frame(lat = c(33.79245), lon = c(-84.32130)) coordonnées(d) <- ~ lon + lat projection(d) <- "+init=epsg:4326" d_mrc <- spTransform (d, SCR = SCR(projection(émorie)))

Maintenant que vous avez transformé votre position lat/long en projection Mercator de Google en mètres, vous pouvez définir une petite fonction d'aide qui convertit les miles en mètres (ou vous utilisez simplement un outil de conversion en ligne). Sur la base de la distance ainsi calculée en mètres,gBufferdu géos package créera un objet 'SpatialPolygons' de forme circulaire.

# Conversion de miles en mètres mile2meter <- function(x) { x * 1609.344 } # Création de tampon d_mrc_bff <- gBuffer(d_mrc, width = mile2meter(20))

Maintenant que vous avez assemblé tout ce dont vous avez besoin, il est enfin temps de tracer.

library(scales) # pour la fonction 'alpha()' plot(emory) plot(d_mrc_bff, col = alpha("blue", .35), add = TRUE) points(d_mrc, cex = 2, pch = 20)


Voir la vidéo: Plotting data on maps in R using ggmap (Octobre 2021).