网上搜到的GeoServer
发布MongoDB
中的矢量数据或shp
数据的文章比较少,有一些文章还设置了付费可见,十分不方便。鉴于此,我们发一期shp
数据到MongoDB
再到GeoServer
的过程梳理。
由于MongoDB
是文档型数据库,因此需要先将shp
转geojson
,然后才能存入MongoDB
,我们使用ogr2ogr
工具将shp
转geojson
。ogr2ogr
工具被集成到了QGIS
、PostgreSQL
和GDAL
中,因此只要你安装了三者中的任意一个软件,都可以使用这个工具。本文以QGIS
为例,ogr2ogr
工具一般都位于bin目录下,如QGIS
中位置如下图:
在这个目录下直接输入cmd
后回车,cmd
就进入了这个目录,然后输入ogr2og --help
即可看到相应的帮助说明。shp
转geojson
的命令为:
//ogr2ogr -f geojson <源shp路径> ogr2ogr -f geojson D:\test\test.geojson D:\test\shp\testline.shp
执行完毕之后会看到已经出现了geojson
文件
打开这个文件看看,OK,非常完美,标准的geojson
。
接下来我们就需要将shp
导入MongoDB
了,先来看看MongoDB
的安装路径如下:
注意:从
MongoDB
4.4开始,mongodump.exe 、mongoexport.exe 、mongoimport.exe
等数据库工具需要单独安装,所以当你看到你的MongoDB
的bin
目录下并没有这几个工具的时候,不要惊讶,不要着急。下载地址为:https://www.MongoDB.com/try/download/database-tools
shp
导入MongoDB
,首先我们需要将上面转成功的geojson
处理一下,把原始的geojson
的头尾去掉,也就是只留features
:
变为这样:cmd
进入MongoDB
的bin
路径下,执行如下命令:
//mongoimport -h localhost:27017 -d dbname -c collectionname --file --jsonArray mongoimport -h localhost:27017 -d MLM -c cjg_roads --file "D:\test\test.geojson" --jsonArray
看到MongoDB
中已经导入了数据
这一步在MongoDB
中是必选项,使用其他数据库时,比如PostGIS、MySQL
等并不需要。为什么要创建空间索引?因为不创建空间索引就会导致发布时找不到图层
创建空间索引的命令为:
//cjg_roads是集合名称 db.cjg_roads.createIndex({ "geometry": "2dsphere" })
确保geometry
字段显示了索引
到GeoServer
官网下载自己的GeoServer
版本对应的MongoDB
插件即可。
https://GeoServer.org/download/#archive
下载完成后解压到GeoServer
的webapps\geoserver\WEB-INF\lib
目录下即可,然后重启GeoServer
经过了前面的步骤,发布就顺理成章了,点击新建数据存储,选择MongoDB
即可。
为什么要把头尾去掉?如果不去掉头尾,那么导入命令是这样的:
//mongoimport -h localhost:27017 -d test -c json --type json --file mongoimport -h localhost:27017 -d MLM -c trees --type json --file "D:\test\test.geojson"
最后在GeoServer
中发布时就会遇到坐标范围计算失败的问题
前文已经说过,从MongoDB4.4开始,mongodump.exe 、mongoexport.exe 、mongoimport.exe
等数据库工具需要单独安装,所以当你看到你的MongoDB
的bin目录下并没有这几个工具的时候,不要惊讶,不要着急。下载地址为:https://www.mongodb.com/try/download/database-tools
前文也说过了,没有空间索引,或空间索引未生效,会导致添加图层时读取不到图层,这里也就不再赘述了。
本文详细的梳理shp
文件导入到MongoDB
的过程,以及在GeoServer
中发布的全过程,并提出了几个注意点,希望能引起读者的注意,回见~