1.引言
最近总是有人在问,如何在ArcGIS API加载本地的Shp文件,其实加载shapefile的文件有多种,比如官网提供了一种方法,但是他是基于portal服务的,官网的例子地址为:add shapefile,这个方案的缺点在与要利用在线的服务,这是一些Giser比较反感的。
在这里我把我加载shp的方式给大家分享一下,主要的步骤为:
- 将我们的shp压缩成一个zip包
- 将我们的zip上传到后台(此处以Java为例)
- 用Java将我们的zip包解压缩
- 利用开源库GDAL将shp解析为GeoJson数据
- 将GeoJson数据传回前台转换成Esri的Json数据
- 利用Graphic显示数据
接下来我们实现一下上面所说的步骤。
2.配置GDAL的Java环境
因为我们要用到GDAL来解析shp数据,所以首先配置我们的GDAL环境。已经编译好的GDAL函数库下载地址为:编译好的GDAL
- 将zip下载下来解压之后为:
-
将bin目录下面的所有dll拷贝到指定位置
位置不固定,此处提供三种方案 (1)拷贝到java工程目录下 (2)拷贝到{JAVA_HOME}\jre\bin目录下 (3)将bin目录配置到环境变量中(我是采用这个)
-
在目录bin\gdal\java下面为:
(1)其中gdal.jar加到构建路径中,
(2)gdalconstjni.dll、gdaljni.dll、ogrjni.dll、osrjni.dll文件拷贝到java工程目录下
- 至此GDAL的Java环境配置完成
3.实现ArcGIS API加载Shp文件
这是我建好的Web项目:
-
介绍后台代码每个类的作用
(1)错误忽略,这是myeclipse编译器的问题 (2)readFile.java是接受zip文件并且给前台返回数据 (3)ZipUtils.java和IOUtil是解压zip文件的工具类 (4)ToGeoJson.java是将shp文件解析为geojson数据 (5)select.java是根据文件的扩展名选择shp文件 (6)MyFileRead.java是读取geojson数据
-
介绍前台代码的作用
(1)js/esriapi是esri提供给我们的api
(2)js/my/geojsonUtil是我自己写的将geojson数据解析为esri json数据
4.结果运行
5.注意事项
5.1dojo/request/iframe
在使用dojo/request/iframe
时,重点在与后台的数据返回上,返回的数据一定要用<textarea></textarea>
包起来,不然前台会报错,找不到<textarea>
对象。例如:
5.2GDAL解析数据
注意事项2在于;GDAL解析Shp数据为geojson数据时,解析出来的数据少一个]}
,我不清楚是我自己电脑的问题,还是都存在这个问题,因此我添加了一个]}
,如图所示:
6.代码下载
本博客的代码和数据下载地址为:ArcGIS API For Javascript之加载shp文件