2012-06-15 42 views
7

Tôi là người mới hoàn thành với dữ liệu không gian. Tôi có đoạn mã sau để vẽ thành công một bản đồ bị chặn. Tôi muốn thêm, như các điểm lưu trữ data.frame. Tôi xin lỗi trước vì không thể để con số này ra khỏi tài liệu OpenStreetMap ... mã bên dưới:Vẽ điểm từ một data.frame bằng cách sử dụng OpenStreetMap

library(OpenStreetMap) 
stores <- data.frame(name=c("Commercial","Union","Bedford"), 
       longitude=c(-70.25042295455933,-70.26050806045532,-70.27726650238037), 
       latitude=c(43.657471302616806,43.65663299041943,43.66091757424481)) 
lat <- c(43.68093,43.64278) 
lon <- c(-70.29548,-70.24097) 
portland <- openmap(c(lat[1],lon[1]),c(lat[2],lon[2]),zoom=15,'osm') 
plot(portland,raster=TRUE) 
#can't figure out what to put here. 

tôi nghi ngờ các định dạng của các cửa hàng là không thích hợp cho dữ liệu không gian. Xin cảm ơn trước, --JT

Trả lời

12

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 ggmapggplot2.

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à:

enter image description here

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) 

enter image description here

+0

Cảm ơn mucho ... điều này sẽ làm việc một cách hoàn hảo! – JimmyT

Các vấn đề liên quan