Làm cách nào để phủ lớp bản đồ (shp và csv) trong R?


9

Đây là một crosspost từ stackoverflow . Tôi biết rất ít về phần mềm GIS và tôi đang thực hiện tất cả các ánh xạ của mình trong R. Xin lỗi trước nếu đây là câu hỏi quá cơ bản. Giả sử tôi có hai shapefile từ các nguồn khác nhau nhưng với các thuộc tính khác nhau. Giả sử, một là cho ranh giới quản trị của Texas ( boundaries.shp) và cái kia là cho các dòng sông Texas ( rivers.shp). Tôi cũng có một tập tin thứ ba towns.csvcho thấy các vị trí của các thị trấn trong tiểu bang. Sau khi đọc trong các tệp, tôi có thể ghi đè lên các vị trí thị trấn trên các ranh giới phân biệt trong maptoolsgói:

plot(boundaries); points(towns$lon, towns$lat)

Nhưng làm thế nào tôi có thể phủ cả ba? Chắc chắn có một cách dễ dàng để làm điều này?

Câu trả lời:


8

PBSMapping phải phù hợp với nhu cầu của bạn. Có một hướng dẫn tại NCEAS . Mã dưới đây được điều chỉnh từ hướng dẫn đó. Tôi đang đưa ra giả định về dữ liệu của bạn btw. Vui lòng chỉnh sửa cho phù hợp với tình huống của bạn.

library(PBSmapping)

#prepare towns
pts <- read.csv("towns.csv")
towns <- points(towns$lon, towns$lat)
# read in shapefiles 
rivers <- importShapefile("rivers.shp")
boundaries <- importShapefile("boundaries.shp")


# note that importShapefile reads the .prj file if it exists, but it
# does not adopt the proj4 format used by the above approaches
proj.abbr <- attr(boundaries, "projection") # abbreviated projection info
proj.full <- attr(boundaries, "prj") # full projection info
print(proj.abbr)
# [1] "LL"

# generate map using PBSmapping plotting functions
plotPolys(boundaries, projection=proj.abbr, border="gray",
    xlab="Longitude", ylab="Latitude")
addPoints(towns, pch=20, cex=0.8)
addLines(rivers, col="blue", lwd=2.0)

Cảm ơn, RK tôi vẫn đang cố gắng hiểu rõ, nhưng đây là một con trỏ tuyệt vời.
dùng3671

Không có gì. Hãy vui vẻ lập bản đồ :)
RK

11

Cách đơn giản nhất để phủ hai ô có thể là sử dụng add = TRUEtùy chọn trong plot. Dưới đây là một ví dụ với dữ liệu nhân tạo

# Load sp package for creating artificial data
library(sp)

# Create sample town points
towns <- data.frame(lon = sample(100), lat = sample(100))
towns <- SpatialPoints(towns)

# Create sample polygon grid
grd <- GridTopology(c(1,1), c(10,10), c(10,10))
polys <- as.SpatialPolygons.GridTopology(grd)

# Plot polygons
plot(polys)

# Add towns (in red colour)
plot(towns, add = TRUE, col = 'red')

Cảm ơn cho sứt mẻ, yellowcap. Nhưng nó nói "add không phải là một tham số đồ họa."
dùng3671

Ví dụ này hoạt động tốt khi tôi chạy nó trên máy tính của mình, nhưng có vẻ như "add" không hoạt động luôn và phụ thuộc vào lớp dữ liệu đầu vào, xem bài đăng này . Vì vậy, đề xuất của tôi có thể không phải là cách tốt nhất để đi ...
yellowcap
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.