2012-02-09 32 views
6

Xin chào Tôi có một mạng trong R sử dụng thư viện igraphOutput shapefile cho mạng igraph trong R

Vertices: 616 
Edges: 6270 
Directed: TRUE 
No graph attributes. 
Vertex attributes: name, Lat, Lon. 
Edge attributes: V3. 

Làm thế nào tôi có thể tạo ra hai shapefile cho Đỉnh và Edges sử dụng các thông tin Lạt, Lớn ở đỉnh ?

Trả lời

9

Bạn có thể thực hiện việc này bằng cách sử dụng gói spmaptools. Có các chức năng tiện dụng writePointsShape()writeLinesShape() trong maptools sẽ ghi vào định dạng shapefile ESRI.

Trước khi thực hiện việc này, cần trích xuất thông tin lat/lon từ các đỉnh đồ thị và đặt nó vào đối tượng SpatialPoints cho các đỉnh và đối tượng SpatialLinesDataFrame cho các cạnh.

Mã này tạo ra một đối tượng rất đơn giản igraph cho ví dụ sau:

library(igraph) 

## Produce a ring graph with 4 vertices 
x <- graph.ring(4) 

## Add lat/lon information to vertices 
V(x)$lat <- c(50, 50, 51, 51) 
V(x)$lon <- c(40, 41, 41, 40) 

Bây giờ, tạo ra các đối tượng SpatialPoints cho các đỉnh

library(sp) 
library(maptools) 

## Create SpatialPoints object containing coordinates 
xV <- SpatialPoints(cbind(V(x)$lon, V(x)$lat)) 

## Write vertices to a shapefile 
writePointsShape(xV, fn="vertices") 

Cuối cùng, tạo đối tượng SpatialLinesDataFrame cho các cạnh. Đây là một chút lộn xộn, nhưng tôi chưa tìm ra cách nhanh chóng để tạo ra một đối tượng SpatialLines cho các tọa độ.

## Create SpatialLinesDataFrame object describing edges 
edges <- get.edgelist(x)+1 
edges <- cbind(edgeNum=1:nrow(edges), v1=edges[,1], v2=edges[,2]) 
xE <- apply(edges, 1, function(i) Lines(Line(cbind(c(V(x)$lon[i["v1"]], V(x)$lon[i["v2"]]), c(V(x)$lat[i["v1"]], V(x)$lat[i["v2"]]))), ID=as.character(i["edgeNum"]))) 
xE <- SpatialLinesDataFrame(SpatialLines(xE), data=data.frame(edgeNum=1:nrow(edges))) 

## Write edges to a shapefile 
writeLinesShape(xE, fn="edges") 
+0

Cảm ơn bạn rất nhiều. Tôi sẽ thử điều đó ngay bây giờ. – Seen

+0

Đã chuyển đổi Lat và Lon. Đã sửa ngay. Lặp lại sau tôi: (Lon = X, Lat = Y) :) – digitalmaps

+0

Lỗi trong tính hợp lệMethod (đối tượng): coords không thể chứa giá trị bị thiếu. Đó là cách tôi nhận được cho các "áp dụng" chức năng cho dòng. Bạn có bất cứ đề nghị nào mà tôi có thể kiểm tra các giá trị không. Xin lỗi tôi là một bàn tay mới trong R ... – Seen