2012-07-16 154 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