通过GeoServer将存储在ElasticSearch中的GIS数据在QGIS中显示出来
梗概
我试着将ElasticSearch中输入的GeoJSON数据通过GeoServer进行分发,并在QGIS中进行显示。
我們將使用Docker來設置以下應用程式:
– GeoServer 2.16.2
– ElasticSearch 7.9.3
– Kibana 7.9.3
Docker的安装设置
如果没有安装Docker,请首先按照官方网站的指示进行安装。
启动GeoServer、ElasticSearch和Kibana。
开启方式
首先,我们将一系列文件放在JinIgarashi/docker-geoserver-elasticgeo中,以供本文讨论。
这样做,GeoServer和其他一系列应用程序会启动。 zuò, GeoServer hé huì .)
git clone git@github.com:JinIgarashi/docker-geoserver-elasticgeo.git
cd docker-geoserver-elasticgeo
docker-compose up
关于在Docker上启动的应用程式
当使用docker-compose启动时,GeoServer将在端口8600上运行,ElasticSearch将在端口9200上运行,Kibana将在端口5601上运行。
GeoServer的配置采用了kartoza/docker-geoserver的默认.env和docker-compose.yml,并且直接使用了ElasticSearch的官方配置,但仅将节点数设置为一个。
然而,由于需要在GeoServer中安装名为ElasticGeo的扩展,所以我们需要自己按照以下方式创建Dockerfile。
FROM kartoza/geoserver:2.16.2
RUN wget https://github.com/ngageoint/elasticgeo/releases/download/2.16.0-RC1/elasticgeo-2.16.0.zip -O elasticgeo.zip
RUN unzip -o elasticgeo.zip -d /usr/local/tomcat/webapps/geoserver/WEB-INF/lib/
EXPOSE 8080
只需将ElasticGeo的jar文件放置在GeoServer的WEB-INF文件夹中即可完成安装。需要注意的是,由于ElasticGeo在最新的GeoServer2.18版本中无法运行,所以我们将使用2.16.2版本。
确认ElasticSearch
如果在终端上运行并返回以下结果,就表示ElasticSearch已经成功安装。
$ curl http://localhost:9200
{
"name" : "es01",
"cluster_name" : "es-docker-cluster",
"cluster_uuid" : "W_ho6j3NSZWQvuL7CfNnXg",
"version" : {
"number" : "7.9.3",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
"build_date" : "2020-10-16T10:36:16.141335Z",
"build_snapshot" : false,
"lucene_version" : "8.6.2",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
在Kibana中导入GeoJSON。
用浏览器打开Kibana
如果能够访问 http://localhost:5601,并弹出类似下方的画面,就可以了。

将GeoJSON上传到ElasticSearch中。
在这里,我将尝试上传我在卢旺达水务公司作为志愿者一起工作的水表数据超过五万个数据点。

点击”添加图层”。


在选择要上传的文件空间中,拖放您已经拥有的GeoJSON文件,它会自动加载。然后点击”Import file”开始创建索引。
当你看到”Add layer”按钮时,请连续点击它。然后,在”Layer Settings”中适当输入信息并保存。我只将名称设为”rw_connections”,其他保持默认设置。


Kibana的GeoJSON最大大小限制为50MB。
如果超过Kibana的最大限制50MB,您可以使用下面这个ogr2ogr命令来进行导入。但是请注意,如果使用ogr2ogr进行导入,则必须自己在Kibana中创建索引模式。
ogr2ogr -progress -lco BULK_SIZE=5000000 -f "Elasticsearch" http://localhost:9200 connections.geojson -skipfailures
设定GeoServer
由于数据准备工作已经完成,现在可以进行GeoServer的设置了。

请使用以下默认的用户名和密码登录。
-
- ID: admin
- Password: myawesomegeoserver


输入在Kibana上传的索引信息。
-
- Data Source Name: 任意の名前をつけます
-
- elasticsearch_host: Dockerのコンテナ名のes01を入れます
-
- elasticsearch_port: 9200を入れます
- index_name: connectionsとします
除此之外保持默认状态,点击保存即可。


进入图层编辑界面后,这次只需将所有内容保持默认状态,只需设置BBOX,然后创建图层。




用QGIS显示数据
由于GeoServer现在可以将ElasticSearch的数据进行分发,所以我将尝试在QGIS中进行显示。
本次我们将使用目前最新的QGIS3.16版本。

-
- 名称にelasticsearch
URLにhttp://localhost:8600/geoserver/elasticsearch/wfs
バージョンに1.0.0
地物の最大数に10000
のように記入し、OKをクリックします。

如果不知道WFS的URL,可以在浏览器中打开下面这个URL以查看指定的URL的OnlineResource:
http://localhost:8600/geoserver/elasticsearch/ows?service=WFS&version=1.0.0&request=getcapabilities
<Service>
<Name>WFS</Name>
<Title/>
<Abstract/>
<Keywords/>
<OnlineResource>http://localhost:8600/geoserver/elasticsearch/wfs</OnlineResource>


概述
-
- ElasticSearchに投入したGISデータはGeoServerにElasticGeo拡張を入れることで、WFS/WMS配信できる
-
- WFS/WMSの配信方式に乗っかってQGISで表示できる
- QGIS以外でもLeaflet、OpenLayers、Mapbox GL JSなどでもElasticSearchのデータをGeoServer経由で扱える(本記事の対象外)
我觉得通过使用GeoServer,能更加方便地处理ElasticSearch中的GIS数据。