geotools解析Shapefile文件

交代背景

前段工程师给了我 gis 相关的一些文件,想让我解析里面的数据,简单点就是解析 Shapefile 文件,由于地理信息相关的数据都是 GeoJson 的数据格式;也是第一次接触 gis,所以先简单的了解了下这些专用的名词。

Shapefile

一个Shapefile文件最少包括三个文件:
主文件(.shp)、–存储地理要素的几何图形的文件。
索引文件(
.shx)、–存储图形要素与属性信息索引的文件。
dBASE表文件(.dbf),–存储要素信息属性的dBase表文件。
除此之外还有可选的文件包括:
空间参考文件(
.prj)、
几何体的空间索引文件(.sbn 和 .sbx)、
只读的Shapefiles的几何体的空间索引文件(.fbn 和.fbx)、
列表中活动字段的属性索引(.ain 和 .aih)、
可读写Shapefile文件的地理编码索引(.ixs)、
可读写Shapefile文件的地理编码索引(.mxs)、
dbf文件的属性索引(
.atx)、
以XML格式保存元数据(.shp.xml)、
用于描述.dbf文件的代码页,指明其使用的字符编码的描述文件(
.cpg)。

Geotools

GeoTools 是英国利兹大学(University of Leeds)的James Macgll 从1996 年开始研发的一个操作和显示地图的开源Java 代码库,[1] 提供了一系列符合规范的操作地理空间数据的方法,例如可以用它来实现一个地理信息系统(GIS)。GeoTools库在开发时执行OGC规范。目前GeoTools的最新版本是 GeoTools 17 Releases。

Geojson

要素组合的数据格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{ "type": "FeatureCollection",
​ "features": [
​ { "type": "Feature",
​ "geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
​ "properties": {"prop0": "value0"}
​ },
​ { "type": "Feature",
​ "geometry": {
​ "type": "LineString",
​ "coordinates": [
​ [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
​ ]
​ },
​ "properties": {
​ "prop0": "value0",
​ "prop1": 0.0
​ }
​ },
​ { "type": "Feature",
​ "geometry": {
​ "type": "Polygon",
​ "coordinates": [
​ [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
​ [100.0, 1.0], [100.0, 0.0] ]
​ ]
​ },
​ "properties": {
​ "prop0": "value0",
​ "prop1": {"this": "that"}
​ }
​ }
​ ]
}
核心代码

github-demo 传送门