欢迎您来到GIS动力

加入收藏 免费注册 用户登陆 帮助中心
首页 新闻动态 技术专栏 银杏树下 学习考研 软件下载 求职招聘 许愿瓶 节日祝福 用户中心 精彩推荐 资源搜索 地图
专栏导航: AO开发 | SO开发 | ArcGIS桌面 | 超图桌面 | 开发语言 | 数据库 | WebGIS | 银杏文学 | 研究生考题 | FreeMap FreeTalk
   您现在位于: 首页技术专栏开源GIS → 正文
用GeoTools读取Shapefile的属性数据
07-11-10 09:36:01 作者:classicn 出处:GIS大学论坛
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博大精深,但是其中包、类数量非常多,结构复杂,要想弄清还是要下一番功夫的。

(本文已被浏览 次)
发布人:admin
推荐给好友:发送给好友
上篇新闻:
下篇新闻:
相关评论
发表我的评论
  • 尊重网上道德,遵守《全国人大常委会关于维护互联网安全的决定》及中华人民共和国其他各项有关法律法;
  • 本站有权保留或删除您发表的任何评论内容;
  •   相关文章  
    shapefile数据无法正常浏览的问题
    GEOTools (The Open Source Java GIS Toolkit) 
    C#读取shapefile文件
    shapefile格式说明及读写代码示例
    vb.net下读取shapefile文件
    ArcSDE C-API 开发:读取属性数据
    浏览属性数据

    关于我们友情链接 ┋ 与我在线 ┋ 管理 ┋ TOP
     
    网站当前版本:GisPower CMS V3.0
    『GIS 动力』- http://www.gispower.org/
    联系我们:webmaster#gispower.org
    Copyright (c) 2003-2007 GisPOwer.Org. All Rights Reserved.
     

                   滇ICP备05006901号