Tôi không biết gói OpenStreetMap
. Nhưng tôi cung cấp một giải pháp thay thế mà vẫn vẽ Bản đồ OpenStreet nhưng sử dụng gói ggmap
để tìm nạp và vẽ bản đồ. Hàm get_map
có thể tìm nạp bản đồ từ nhiều nguồn khác nhau: osm, google, stamen và cloudmade; được thiết lập với source
. Ngoài ra, các nguồn có các kiểu khác nhau, được đặt với maptype
. Ranh giới của bản đồ được đưa ra trong một vectơ vị trí. Ngoài ra, vector vị trí có thể cung cấp cho trung tâm của bản đồ với một tập hợp mức thu phóng thích hợp. Bản đồ được vẽ bằng ggplot2
và do đó các điểm và nhãn có thể được thêm vào bản đồ như thể chúng được thêm vào bất kỳ đối tượng ggplot nào. Để chạy các mục sau, cần cài đặt gói ggmap
và ggplot2
.
library(ggmap)
stores <- data.frame(name=c("Commercial","Union","Bedford"),
longitude=c(-70.25042295455933,-70.26050806045532,-70.27726650238037),
latitude=c(43.657471302616806,43.65663299041943,43.66091757424481))
location = c(-70.2954, 43.64278, -70.2350, 43.68093)
# Fetch the map
portland = get_map(location = location, source = "osm")
# Draw the map
portlandMap = ggmap(portland)
# Add the points layer
portlandMap = portlandMap + geom_point(data = stores, aes(x = longitude, y = latitude), size = 5)
# Add the labels
portlandMap + geom_text(data = stores, aes(label = name, x = longitude+.001, y = latitude), hjust = 0)
Kết quả là:
Các nhãn có thể bị mất trong nền. Trong trường hợp đó, một cái gì đó như thế này có thể là thích hợp. Nó sử dụng code from here để cung cấp cho văn bản một phác thảo.
portlandMap = ggmap(portland) + geom_point(data = stores, aes(x = longitude, y = latitude), size = 5)
theta <- seq(pi/16, 2*pi, length.out=32)
xo <- diff(location[c(1,3)])/250
yo <- diff(location[c(2,4)])/250
for(i in theta) {
portlandMap <- portlandMap + geom_text(data = stores,
aes_(x = stores$longitude + .001 + cos(i) * xo,
y = stores$latitude + sin(i) * yo,
label = stores$name),
size = 5, colour = 'black', hjust = 0)
}
portlandMap +
geom_text(data = stores, aes(x = longitude + .001, y = latitude, label=name),
size = 5, colour = 'white', hjust = 0)
Cảm ơn mucho ... điều này sẽ làm việc một cách hoàn hảo! – JimmyT