The output form file for the igraph network in R

Hello, I have a network in R using the igraph library

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

How can I generate two shapefiles for Top and Edge using Lat, Lon information at the top?

+6
source share
1 answer

You can do this using sp and maptools . maptools has convenient writePointsShape() and writeLinesShape() functions that will be written in the ESRI shapefile format.

Before doing this, you need to extract the lat / lon information from the vertices of the graph and place it in the SpatialPoints object for the vertices and the SpatialLinesDataFrame object for the edges.

This code creates a very simple igraph object for the following example:

 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) 

Now create a SpatialPoints object for the vertices

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

Finally, create a SpatialLinesDataFrame object for the edges. This is a bit dirty, but I have yet to find a quick way to create the SpatialLines object given by the coordinates.

 ## 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") 
+9
source

Source: https://habr.com/ru/post/908007/


All Articles