http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> 软件开发 >> 正文

用GeoTools读取Shapefile的属性数据

作者:classicn…    文章来源:GIS大学论坛    点击数:    更新时间:2007-11-8
摘要:GeoTools是最重要的开源JavaGIS工具包,其中提供了很多实用的工具。但是苦于其文档实在不完整,故在这里简单地介绍GeoTools读取Shapefile属性数据的方法,也算是为和我一样想学习GeoTools但又不知如何下手的朋友们打开一个思路。
GeoTools是最重要的开源JavaGIS工具包,其中提供了很多实用的工具。但是苦于其文档实在不完整,故在这里简单地介绍GeoTools读取Shapefile属性数据的方法,也算是为和我一样想学习GeoTools但又不知如何下手的朋友们打开一个思路。

其实这个很简单。

使用GeoTools,我们今天要做的事情需要将gt2-shapefile-2.3.1.jar加到你的Build Path中。
众所周知,要属性数据保存在dbf文件中,因此为了能够读取属性数据,我们需要导入以下几个包:

import java.io.IOException;
import java.io.FileInputStream;
import java.nio.channels.FileChannel;

import org.geotools.data.shapefile.dbf.DbaseFileReader;
import org.geotools.data.shapefile.dbf.DbaseFileHeader;

GeoTools用Java.nio包中的FileChannel读取文件,这样初始化:

FileChannel in = new FileInputStream("data/res1_4m.dbf").getChannel();

于是初始化DbaseFileReader和DbaseFileHeader

DbaseFileReader dr = new DbaseFileReader(in, true);
DbaseFileHeader dh = dr.getHeader();
DFileReader构造函数的第二个参数是useMemoryMappedBuffer,具体的作用我也没有深入研究,只是从字面推断而已。
接下来从dh中获得字段数

fields = dh.getNumFields();
开始遍历dr,每次取出一行,行被封装在DbaseFileReader的内部类Row中。

while(dr.hasNext()){
        DbaseFileReader.Row row = dr.readRow();
}
遍历每一行中的每个域,读出其中的数据,打印出来,OK

while(dr.hasNext()){
        DbaseFileReader.Row row = dr.readRow();
        for (int i=0;i<fields;i++){
                Object data = row.read(i);
                if(dh.getFieldName(i).equals("NAME")){
                        // TO-DO:  charset error here.
                        String name = new String(data.toString().getBytes(),"utf-8");
                        System.out.print(name);
                }else{
                        System.out.print(data);
                }
                System.out.print("\t");
        }
        System.out.println();
}
上面的一段是因为我的dbf中含有中文,打印出是乱码,这个问题还是有待解决。
最后关闭dr。

dr.close();
还有别忘了给FileInputStream加上try...catch就行了。

上面介绍的是最简单的dbf读法。
GeoTools博大精深,但是其中包、类数量非常多,结构复杂,要想弄清还是要下一番功夫的。

Tags:ArcGIS Engine  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图