Добавьте базовую карту в SpatialPointDataFrames, используя R

Я хочу добавить базовую карту к своему графику, которая визуализирует три SpatialPointDataFrames. Я уже пробовал maptools, а также пакет RgoogleMaps, но оба не работают так, как я хочу.
Моя проблема: SpatialPointDataFrames не отображаются на фоновой карте GoogleMaps.

Минимальный пример:

City.csv со следующим примером содержимого:

FID,city,POINT_X,POINT_Y
0,New York,-73.996786,40.720813
1,Newark,-74.172237, 40.732196

Код R:

# Load packages
library(RgoogleMaps)
library(sp)

# load .csv file 
city= read.csv("city.csv", header = TRUE)

# convert to SpatialPointDataFrame
coordinates(city) <- c("POINT_X", "POINT_Y")
proj4string(city) <- CRS("+proj=longlat +datum=WGS84")

# use RgoogleMaps
gc <- geocode('new york, usa')
center <- as.numeric(gc)
ggmap(get_googlemap(center = center, color = 'bw', scale = 4), fullpage = T)
# Plot the city dataset
plot(city, pch = 22, col="black", bg= "yellow", cex = 1.5, add = TRUE)

Результатом должен быть график с фоновой картой и двумя точками, но точки не отображаются на карте. Есть проблема с геокодированием или я что-то пропустил? Можно ли объединить функции ggmap и plt?

Любая помощь высоко ценится!

3 ответа

Решение

Использование ggplot2 для такой работы намного проще, вы можете добавлять точки, полигоны, 2 плотности и т. Д. В слои ggmap.

library(RgoogleMaps)
library(sp)
library(ggplot2)
library(ggmap)

P является объектом SpatialPointsDataFrame:

DB <- data.frame(FID=P$FID, city=P$city)
DB <- cbind(DB, P@coords)


DB <- data.frame(FID=c(0,1), city=c("New York", "Newark"),   POINT_X=c(-73.996786,-74.172237), POINT_Y=c(40.720813,40.732196 ))
gc <- geocode("new york, usa")
center <- as.numeric(gc)
G <- ggmap(get_googlemap(center = center, color = 'bw', scale = 4), extent = "device")
G1 <- G + geom_point(aes(x=POINT_X, y=POINT_Y ),data=DB, color="red", size=5)
plot(G1)

Это вывод:

Это две разные фреймворки (grid и base-graphics). Хотя возможна комбинация обоих, я бы порекомендовал придерживаться ggplot.

Вы можете легко добавить очки, используя geom_point()см. ответы здесь, например.

В последнее время, кроме ggplot2, есть также пакеты, такие как листовка и mapview, которые могут это обработать. В случае Leaflet для R см.:

Другие вопросы по тегам