如题,java读取shapefile文件内容,输出到前端,用arcgis for js进行展示。循例一言不合就发图,来个感性认识。
shapefile是一种空间数据文件。它是美国esri公司制定的一种文件格式。事实上,shapefile通常不会是一个文件,而是一堆名字相同,只是后缀名不同的文件,它们组合在一起,对同一个地理对象进行不同角度的描述,形成一个完整的小空间数据库。所以,有些软件处理shapefile,要求提交的是这些文件的打包,比如zip。
以上文件负责的功能各有不同:
.shp 存储地理形状和位置信息
.dbf 存储属性信息
.shx 索引文件
.prj 坐标系
.cpg 字符编码,如UTF-8
可见这里面,最重要的是shp文件。java里面,读取shapefile,一般就是用GeoTools。读取方法,网上的教程大同小异。从测试结果看,读取的时候,将.shp文件路径作为参数传递,该方法会自动检查同一个目录下有没有其他相关文件,有的话会一并读出。本来.shp文件存储的只是空间信息,属性数据在dbf中,但geotools会自动读出来,包含在读取结果中。而如果只有单个.shp文件,那结果就只有空间数据。所以刚开始的时候,我搞不懂为什么网上的例子都只将.shp文件路径作为参数传递,还苦苦搜索一个读取全部文件的方法。结果当然就是找不到,因为没有必要。
以上是铺垫知识。那么,要用java读取shapefile文件内容,输出到前端,用arcgis for js进行展示,要经过哪些步骤呢?梳理如下:
1、服务器端(java)用geotools类库读取shapefile,得到GeoJson
java用geotools类库读取shapefile
2、由于前段使用arcgis for js展示,须将GeoJson转为EsriJson
3、输出到前端后,前端用arcgis for js进行展示
这三个步骤,都需要进行详细阐述,留待下回分解,但在开始之前,还需要了解一下铺垫知识:地理坐标系。尤其是步骤2,网上比较少例子。下面有一个ESRI官方测试网址,前端代码可见,但后端读取的代码却找不到。ESRI自己读取shapefile的话,肯定不用通过geotools,所以它没有转换的问题。geojson格式的话,用leaflet等应该可以直接展示,但arcgis for js不行。
测试网址
ESRI官方测试网址,提交一个shapefile的zip包并展示
非arcgis的在线测试网址