9

非常に大きなシェープファイルがいくつかあります。関数SpatialPolygonsDataFrameを使用してそれらを に読み込むことはできますが、ファイルごとに非常に長い時間がかかります。私が実際に興味があるのは、スロットに表示されるのみです。リソースを集中的に使用するポリゴンをスキップして、データだけを読み取る方法はありますか?rgdalreadOGRdata.frame@data

コード例:

## State of Alabama census blocks (152 MB compressed, 266 MB uncompressed)
shpurl <- "http://www2.census.gov/geo/tiger/TIGER2011/TABBLOCK/tl_2011_01_tabblock.zip"
tmp    <- tempfile(fileext=".zip")
download.file(shpurl, destfile=tmp)
unzip(tmp, exdir=getwd())

## Read shapefile
nm  <- strsplit(basename(shpurl), "\\.")[[1]][1]
lyr <- readOGR(dsn=getwd(), layer=nm)

## Data I want
head(lyr@data)
4

2 に答える 2

8

シェープファイルは、属性データを拡張子 のファイルに格納する複合ファイルです*.dbf。(参照については、ウィキペディアのシェープファイルの記事を参照してください。)dbfサフィックスは、パッケージ 内の関数で読み取ることができるdBase ファイル形式を参照します。read.dbf()foreign

だから、これを試してください:

library(foreign)
df <- read.dbf("tl_2011_01_tabblock.dbf")
## And, more generally, read.dbf("path/to/shapefile/shapefile-name.dbf")
于 2012-11-14T17:59:28.923 に答える
0
    FileInputStream fis = new FileInputStream( "/folder/file.dbf" ); 
DbaseFileReader dbfReader =  new DbaseFileReader(fis.getChannel(),false, Charset.forName("ISO-8859-1"));

        while ( dbfReader.hasNext() )   {
          final Object[] fields = dbfReader.readEntry();

          Long field1 = (Long) fields[0];
          Long field2 = (Long) fields[1];
          System.out.println("DBF field "+i+" value is: " + fields[0]);
          System.out.println("DBF field 2 value is: " + field2);
        }
 dbfReader.close();
 fis.close();
于 2013-02-06T06:41:21.367 に答える