2012-07-16 152 views
1

我有一個ARC/INFO生成文件,其內容是這樣的:R:劇情ARC/INFO生成文件

3594 -124.049541 44.429077 
-123.381222 44.530192 
-123.479913 44.625517 
-123.578917 44.720704 
-123.678234 44.815755 
-123.777866 44.910669 
-123.946044 44.885032 
-124.114074 44.858987 
-124.281949 44.832529 
-124.449663 44.805654 
-124.516511 44.684660 
-124.583091 44.563597 
-124.649404 44.442465 
-124.715451 44.321261 
-124.615376 44.227772 
-124.515601 44.134147 
-124.416125 44.040385 
-124.316948 43.946486 
-124.151513 43.973082 
-123.985926 43.999247 
-123.820193 44.024987 
-123.654322 44.050307 
-123.586447 44.170362 
-123.518307 44.290360 
-123.449899 44.410303 
-123.381222 44.530192 
END 
3595 -123.103772 45.009223 
-122.427717 45.101578 
-122.525757 45.198252 
-122.624122 45.294789 
-122.722814 45.391191 
-122.821833 45.487459 
-122.992014 45.464007 
-123.162072 45.440175 
-123.332002 45.415959 
-123.501798 45.391355 
-123.571234 45.271264 
-123.640389 45.151121 
-123.709266 45.030923 
-123.777866 44.910669 
-123.678234 44.815755 
-123.578917 44.720704 
-123.479913 44.625517 
-123.381222 44.530192 
-123.213811 44.554460 
-123.046278 44.578334 
-122.878629 44.601816 
-122.710869 44.624913 
-122.640504 44.744148 
-122.569859 44.863337 
-122.498931 44.982480 
-122.427717 45.101578 
END 
3676 -122.989567 44.147495 
-122.323040 44.238368 
-122.419523 44.335217 
-122.516322 44.431923 
-122.613437 44.528488 
-122.710869 44.624913 
-122.878629 44.601816 
-123.046278 44.578334 
-123.213811 44.554460 
-123.381222 44.530192 
-123.449899 44.410303 
-123.518307 44.290360 
-123.586447 44.170362 
-123.654322 44.050307 
-123.556277 43.955264 
-123.458534 43.860080 
-123.361093 43.764751 
-123.263953 43.669279 
-123.098838 43.693189 
-122.933613 43.716694 
-122.768285 43.739802 
-122.602857 43.762515 
-122.533309 43.881546 
-122.463492 44.000532 
-122.393403 44.119472 
-122.323040 44.238368 
END 
END 

我的策略是在文件中讀取生成的緯度,經度點清單,並開始一每次遇到END時新的唯一組ID。然後我會用陰謀ggplot" and geom_polygon」。

唉,我不知道如何有效地實現文件的讀取。

有什麼想法?

回答

2

閱讀CRAN的空間任務視圖和然後使用rgdal包中的readOGR讀入一個sp類對象,你需要一個支持ARCGEN格式的GDAL/OGR安裝,儘管它被列爲'默認編譯'http://www.gdal.org/ogr/ogr_formats.html我沒有在我的系統中使用

失敗的是,打開文件作爲連接,讀取每一行,構建一個Polygon,然後Po lygons和SpatialPolygons。

這是一個相當次優但工作職能:

readUng <- function(f){ 
    require(sp) 
    stream = file(f,"r") 
    first = readLines(stream,1) 
    bits = strsplit(first," ")[[1]] 
    polys = list();ids=NULL 
    while(TRUE){ 
    id=bits[1] # label pt = bits[2],bits[3] 
    ids=c(ids,id) 
    coords=NULL 
    while(TRUE){ 
     xy=readLines(stream,1) 
     if(xy=="END"){ 
     break 
     } 
     coords=rbind(coords,strsplit(xy," ")[[1]])  
    } 

    polys[[length(polys)+1]] = Polygons(list(Polygon(matrix(as.numeric(coords[,2:3]),ncol=2))),ID=id) 
    lines = readLines(stream,1) 
    if(lines == "END"){ 
     break 
    } 
    bits = strsplit(lines," ")[[1]] 
    } 
    return(SpatialPolygons(polys)) 
} 

現在,它的一個適當的空間數據對象,你也可以給它一個座標系(貌似LAT-長我,所以EPSG:4326 ,但只有你知道)。現在你可以修改所有這些以產生任何ggplot想要的,但是如果它的空間數據那麼你應該保持它作爲一個空間數據類和ggplot應該能夠處理這樣的。

+0

恐怕'readOGR'似乎沒有工作。它抱怨無法打開該文件,通過其他方式可以訪問該文件。 – Richard 2012-07-16 20:32:11

+0

您可能需要指定驅動程序。有關詳細信息,請參閱ogrDrivers()。它的生成或未生成的驅動程序... – Spacedman 2012-07-16 21:41:51

+0

ggplot2包與data.frames一起使用,因此不需要構建SpatialPolygons對象。 – 2012-07-17 08:22:52