从头开始用Geoserver搭建地理信息服务

最近在研究GIS方面的一个应用,就是对澳洲的墨尔本进行网格分片,每个网格为200×200米,利用澳洲维多利亚公路管理局提供的限速区域的信息,在地图上进行标识。整个架构是采用Geoserver + Postgis来进行展示。

Geoserver安装

首先是安装Geoserver,在官网上下载最新的2.15.2的版本,解压后执行bin目录下的startup.sh脚本来启动。

Postgresql+PostGis安装

然后是安装postgresql,按照官网的介绍,安装最新的11版本。

安装完成后,运行psql -U postgres提示对等认证错误,需要先修改一下pg_hba.conf这个文件的配置, 在/etc/postgresql/11/main/目录下找到这个文件,修改认证模式由peer改为trust。修改完成后重启一下服务,sudo service postgresql restart,之后再运行psql -U postgres,进入之后创建一个新的用户和密码,再创建一个新的数据库gisdb,然后赋予把这个数据库的权限赋予给这个新用户。记住postgres这个用户也修改一下密码,然后重新修改pg_hba.conf配置,把认证模式改为md5

PG安装完成后,下一步就是安装Postgis。具体可参见网页:https://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS24UbuntuPGSQL10Apt

地图下载

在openstreetmap.org,可以下载国家,城市的地图,也可自定义选择一个区域的地图来下载。这里我选择了墨尔本的区域,下载地图。格式为osm

地图导入PG

OSM格式的地图可以用osm2pgsql这个工具来导入,具体的安装和使用说明可以见网页:https://wiki.openstreetmap.org/wiki/Osm2pgsql

发布地图

这里我是参考这个网页的做法:https://www.cnblogs.com/think8848/p/6013939.html , 在最后发布图层组成功之后,可以进去设置一下参考坐标系为EPSG:4326,即改为通用的GPS坐标,然后在Layers Preview里面即可看到发布好的地图样式,如下图:

划分网格

在我的应用中,需要对地图进行网格化,即把地图划为很多个200×200米的格子。把格子的顶点坐标定义在Geojson格式的文件中,例如以下的示例:

{"type":"FeatureCollection", "features":[
{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[144.86640166505, -37.86516608276], [144.86866759522002, -37.86516608276], [144.86866759522002, -37.8633761239], [144.86640166505, -37.8633761239], [144.86640166505, -37.86516608276]]]}, "properties": {"id": "1265_634", "adjacentGrids": "1264_634;1264_635;1264_633;1266_634;1266_633;1266_635;1265_633;1265_635"}},
{"type": "Feature", "geometry": {"type": "Polygon", "coordinates": [[[144.86640166505, -37.8633761239], [144.86866759522002, -37.8633761239], [144.86866759522002, -37.861586165039995], [144.86640166505, -37.861586165039995], [144.86640166505, -37.8633761239]]]}, "properties": {"id": "1265_635", "adjacentGrids": "1264_635;1264_636;1264_634;1266_635;1266_634;1266_636;1265_634;1265_636"}}
]}

Geoserver不能直接导入geojson的数据,因此我们还需要用一些第三方的工具来转换。我选择的是GDAL的ogr2ogr来进行转化。GDAL可以通过sudo apt-get install gdal-bin来安装。

装好之后运行以下命令来把geojson转为shape格式

ogr2ogr -f "ESRI Shapefile" xx.shp xx.json

转换后的shape文件即可导入到Geoserver的图层,我为这个图层创建一个新的Polygon Style,填充颜色去掉,用灰色勾边。创建好的图层添加到我们之前创建的图层组中。

添加限速信息

从维多利亚公路管理局的网站上可以下载道路限速区域的信息,下载的文件是ShapeFile格式。在Geoserver里面可以直接添加这个Shape文件,我对里面的数据进行了一些处理,对里面的一些相同限速而且相邻的区域进行合并,处理后的数据再导入导Geoserver,添加到之前创建的图层组中。

最终处理后的地图如下,其中蓝色线段表示静态限速道路,青色线段表示动态限速道路,红色线段表示周期限速道路。线段的点表示起始和终止点:

猜你喜欢

转载自blog.csdn.net/gzroy/article/details/100832619