2012-02-09 33 views
6

Merhaba ben iGRAPH kitaplığı ben köşe noktalarındaki Lat, boylam bilgilerinin kullanıldığı iki köşeler için shapefiles ve Kenarları üretebilir nasılÇıktı şekil dosyası

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

kullanarak Ar bir ağ ?

cevap

9

Bunu sp ve maptools paketlerini kullanarak yapabilirsiniz. maptools'da writePointsShape() ve writeLinesShape() gibi kullanışlı işlevler vardır ve bunlar ESRI şekil dosyası biçimine yazılır.

Bunu yapmadan önce, grafik köşelerinden lat/lon bilgilerini ayıklamak ve köşeler için SpatialPoints nesnesine ve kenarlar için SpatialLinesDataFrame nesnesine yerleştirmek gerekir.

Bu kod, aşağıdaki örnekte için çok basit igraph nesne üretir:

Şimdi
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) 

, kenarları için SpatialLinesDataFrame nesne oluşturmak Son olarak, köşe

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") 

için SpatialPoints nesne oluşturmak. Bu biraz dağınık, ama henüz koordinatlar verilen bir SpatialLines nesnesi üretmek için hızlı bir yol bulmak için henüz.

## 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

Çok teşekkür ederim. Bunu şimdi deneyeceğim. – Seen

+0

Lat ve Lon'u çevirdiyse. Şimdi düzeltildi. Benden sonra tekrar et: (Lon = X, Lat = Y) :) – digitalmaps

+0

validity içinde hata.Method (object): Coords eksik değerleri içeremez. Hat için "uygulama" işlevini böyle alırım. Değerleri kontrol edebileceğim herhangi bir öneriniz var mı? Maalesef, R ... – Seen

İlgili konular