2012-03-22 31 views
6

Tôi muốn tập hợp một shapefile (tệp .shp và các tệp được liên kết là here) thành một tập hợp các tọa độ, cho biết giữa các độ dài [80,90] và chuột [20,30], sau đó viết ra như một shapefile khác. Nếu tôi sử dụng maptools gói:R/GIS: Làm thế nào để tập hợp một shapefile bằng một hộp giới hạn dài-lat?

df = readShapeLines("/path/asia_rivers.shp")

và sau đó nhìn vào cấu trúc của tập tin với as.data.frame(df), tôi không thể tìm thấy bất kỳ cách rõ ràng Subsetting theo tọa độ. Tôi thể sử dụng gói PBSmapping để tập hợp con:

df = importShapefile("/path/asia_rivers.shp") 
df_sub = subset(df, X>=80 & X<=90 & Y >=20 & Y <=30) 

nhưng sau đó tôi dường như không thể để có thể ép buộc này thành một khung dữ liệu có thể được xuất khẩu qua writeSpatialShape() trong maptools. Tôi vẫn gặp lỗi này: Error in PolySet2SpatialLines(df_sub) : unknown coordinate reference system. Chắc chắn tôi đang thiếu một cái gì đó rất cơ bản và có phải là một cách dễ dàng để subsetting dữ liệu địa lý theo tọa độ địa lý?

Trả lời

6

Bạn có thể thử như sau:

library(rgeos) 
rivers <- readWKT("MULTILINESTRING((15 5, 1 20, 200 25), (-5 -8,-10 -8,-15 -4), (0 10,100 5,20 230))") 
bbx <- readWKT("POLYGON((0 40, 20 40, 20 0, 0 0, 0 40))") 

rivers.cut <- gIntersection(rivers, bbx) 

plot(rivers, col="grey") 
plot(bbx, add=T, lty=2) 
plot(rivers.cut, add=T, col="blue") 
+0

Vấn đề không phải là trong âm mưu, nhưng trong Subsetting trong một định dạng mà có thể được xuất ra dưới dạng một shapefile. – user702432

+0

Bạn đã cố gắng đọc shapefile của bạn, cắt nó với một hộp giới hạn thích hợp bằng cách sử dụng gIntersection và sau đó xuất nó, ví dụ: với maptools :: writeShapeLines? Tôi chỉ vẽ nó để cho bạn thấy rằng các dòng đã được cắt với dữ liệu giả, vì tệp hình dạng bạn cung cấp không hợp lệ (một shapefile bao gồm nhiều hơn chỉ là một tệp * .shp; http://en.wikipedia.org/ wiki/Shapefile). – johannes

+0

Xin chào jmsigner ... Xin lỗi, tôi đã xấu. Tôi đã thay đổi liên kết đến thư mục nén có chứa các tệp .dbf, .lyr, .prj, .sbn, .sbx, .shp và .shx gốc. Cảm ơn. – user702432

2

Tôi biết điều này đã được trả lời, nhưng tôi nghĩ bạn có thể làm chính xác những gì bạn muốn sử dụng PBSmapping. PBSmapping có một chức năng để cắt Polysets (đối với dữ liệu đa giác và đường), do đó bạn có thể thử:

df <- importShapefile("/path/asia_rivers.shp") 
df_sub <- clipLines(df, xlim = c(80 , 90) , ylim = c(20 , 30), keepExtra = TRUE) 
dfSL <- PolySet2SpatialLines(df_sub) 

Các phụ giữ cho phép bạn để giữ cho cột phi tiêu chuẩn khi bạn làm clipping (tôi giả sử cho dữ liệu thuộc tính).

1

Một cách khác:

library(raster) 

s <- shapefile("/path/asia_rivers.shp") 

sub <- crop(s, extent(80, 90, 20, 30)) 

shapefile(sub, 'cropped_rivers.shp') 
Các vấn đề liên quan