GeoTools读中文shp文件乱码的原因及方法

GeoTools读中文shp文件乱码的原因及方法


发布日期: 2015-06-04 更新日期: 2015-10-21 编辑:bukun 浏览次数: 7994

标签:

摘要: GeoTools和shp文件的概念 GeoTools Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的...

GeoTools和shp文件的概念

GeoTools

Geotools是Java语言编写的开源GIS工具包。该项目已有十多年历史,生命力旺盛,代码非常丰富,包含多个开源GIS项目,并且基于标准的GIS接口。Geotools主要提供各种GIS算法,各种数据格式的读写和显示。在显示方面要差一些,只是用Swing实现了地图的简单查看和操作。但是用户可以根据Geotools提供的算法自己实现地图的可视化。OpenJump和udig就是基于Geotools的。

Geotools用到的两个较重要的开源GIS工具包是JTS和GeoAPI。前者主要是实现各种GIS拓扑算法,也是基于GeoAPI的。但是由于两个工具包的GeoAPI分别采用不同的Java代码实现,所以在使用时需要相互转化。Geotools又根据两者定义了部分自己的GeoAPI,所以代码显得臃肿,有时容易混淆。由于GeoAPI进展缓慢,Geotools自己对其进行了扩充。另外,Geotools现在还只是基于2D图形的,缺乏对3D空间数据算法和显示的支持。

shp文件

Shapefile文件是美国环境系统研究所(ESRI)所研制的GIS文件系统格式文件,是工业标准的矢量数据文件。 Shapefile将空间特征表中的非拓扑几何对象和属性信息存储在数据集中,特征表中的几何对象存为以坐标点集表示的图形文件—SHP文件,Shapefile文件并不含拓扑(Topological)数据结构。一个Shape文件包括三个文件:一个主文件(.shp),一个索引文件(.shx),和一个dBASE(*.dbf)表。主文件是一个直接存取,变长度记录的文件,其中每个记录描述构成一个地理特征(Feature)的所有vertices坐标值。在索引文件中,每条记录包含对应主文件记录距离主文件头开始的偏移量,dBASE表包含SHP文件中每一个Feature的特征属性,表中几何记录和属性数据之间的一一对应关系是基于记录数目的ID。在dBASE文件中的属性记录必须和主文件中的记录顺序是相同的。图形数据和属性数据通过索引号建立一一对应的关系。

GeoTools读中文shp文件出现乱码的原因:

用GeoTools的ShapefileDataStore来读取包含中文字段的shp文件时会出现乱码。

首先认为这个是shp文件的问题,所以把dbf的编码改成UTF-8,发现读取以后还是乱码。

然后把注意力集中到GeoTools上,查看一下代码发现是GeoTools的问题。原来GeoTools的ShapefileDataStore的默认编码是ISO-8859-1,所以会出现乱码。

解决GeoTools读中文shp文件出现乱码的方法

在读取shp文件之前,先要手动调用一下ShapefileDataStore的setStringCharset方法即可 dataStore.setStringCharset(Charset.forName("UTF-8"));

同时需要注意:由于这个方法在ShapefileDataStore的父类和实现接口AbstractDataStore、DataStore中都没有声明,所以在创建dataStore的时候必须声明为ShapefileDataStore。否则,就必须在构造方法中传入字符集的参数。

关注公众号
获取免费资源

随机推荐


Copyright © Since 2014. 开源地理空间基金会中文分会 吉ICP备05002032号

Powered by TorCMS

OSGeo 中国中心 邮件列表

问题讨论 : 要订阅或者退订列表,请点击 订阅

发言 : 请写信给: osgeo-china@lists.osgeo.org