-
序言
最近一直在研究怎么在地图加载用户上传的压缩过的shp文件,arcgis的官网提供来了一个在线的例子(add Shapefiles),但是在线的东西始终是别人的,虽然方便,但是限制太多.
我先是找了GitHub上的shapefile.js(shapefile.js),但是谁想到,arcgis api不支持加载Geojson格式的要素,简单的点线面还好,但是复杂的多面,多线等等都加载不了。所以自己用java写了后台加载。
-
配置gdal
java的gdal配置比C#简单多了,本来想用C#的,可死活配不出来,搞得我以前没学过Java的都破天慌的去写java,也不知道哪里来的勇气。已经编译好的gdal 的下载地址:http://www.gisinternals.com/,我用的是最新的gdal301。
第一步:把bin目录下的所有dll放到你的D:\Program Files\Java\jdk1.8.0_131\jre\bin目录下,也就是你的java的安装位置,让java能找到这些dll,还有其他方法,然后在你的项目中导入gdal.jar包,gdalaljni.dll放在C:/system32下。
位置不固定,此处提供三种方案
(1)拷贝到java工程目录下
(2)拷贝到{JAVA_HOME}\jre\bin目录下
(3)将bin目录配置到环境变量中
-
后台
我用neatbeans写的,对新手来说挺好用的,采用的是serverlet+html方式,在写后台的时候遇到了多线程加载dll的问题,我没有解决,要是你上一次的调试没有关闭,再次运行index界面就会包500错误,其实是因为多线程访问同一个dll出错了,自己可以网上找一下资料,平时运行的时候不会出错。还有一些依赖的包,我会都放在源代码里面
1.Select用来选择shp文件
2.toGeoJson用来读取
3.ZipUtils用来解压文件
4.deleteFile用来删除已经加载完成的文件
5.getFile是请求的serverlet,返回Geojson
6.readFIie是用来测试的可以删掉
4.
前端部分
主界面和依赖的js包,已经在前端界面描述得很清楚了
前端加载的时候有点小bug,前端需要在后端返回的数据后面加上“]}”才能使用,
还有就是加载geojson的包,采用的坐标系是4326,要用其他坐标系的自己去源码里面改,最大个数1000.
- 结果
选择文件后开始上传就能得到结果了。
6.源代码
https://download.csdn.net/download/weixin_44265800/11716413