569  
查询码:00000010
原创:离线地图服务与LINUX系统安装
作者: 井沿博 于 2020年04月22日 发布在分类 / 人防组 / 人防后端 下,并于 2020年04月22日 编辑
地图 离线

前言

因为人防行业改革,目前所有的服务器操作系统全部要切换成linux版本,就目前来看,我们前面研发的地图服务采用的4.0的框架研发的,所以无法达成跨平台的业务需求,而主要引用的地图服务核心库并不支持Core,所以决定重新寻找方案代替现有的离线地图服务。

需要软件

1.Geoserverjava开源的地图服务引擎,以支持多数据格式著称

2.PostgreSql:开源的企业级数据库,目前多使用与地理信息

3.PostGisPostgreSql的插件,PostgreSql提供地理数据投影数据结构

3.Osm2pgsql:将XML格式文件转换为pgsql

4.Supervisor:Linux下配置守护进行,方便开机服务自启动

5.Openlayers:开源的前端地图展示框架

6.Osmsld:标准地图样式包,方便快速生成图层

7.MobaXterm:免费的LINUX远程终端,功能强大操作友好

8.BtServer:免费的系统运维管理软件

9.OsmconvertXML格式文件类型转换工具

10.openstreetmap:全球共同协作的地理地图呈现服务,免费提供.PBF与.OSM地理信息文件

服务部署

1.下载地图

https://www.openstreetmap.org下选择需要下载的地图区域进行下载

粘贴图片

粘贴图片

也可以选择:https://download.geofabrik.de/


粘贴图片

粘贴图片

也可以选择:http://download.openstreetmap.fr/extracts/asia/china/

可以分省来下载区域地图

粘贴图片

注意:经过三种模式文档测试,建议使用第一种,数据很全面,其他提供的数据,有些是你不需要的

不过三种方式提供的数据都是最新的,第一种格式下载完成的直接是.OSM后缀的,不过比较慢

剩下两种模式下载下来的是。PBF格式的。SHP格式的建议不要下载,解压后很大很大。

2.格式转换

软件介绍:https://wiki.openstreetmap.org/wiki/Osmconvert

如果下载的是.PBF格式的文件,则需要将文件格式进行转换,专函为.OSM格式的文件,因此下载

Osmconvert:http://m.m.i24.cc/osmconvert64.exe,这个软件可以讲文件文件转换为.OSM,使用方法相对简单

将下载文件放置到一个文件夹内,在文件夹地址栏内输入cmd点击回车

粘贴图片

粘贴图片

粘贴图片

将文件转换为osm文件,.OSM文件实际上格式为.XML,其内部的信息组成分为三个节点“点(Nodes)、路(Ways)和关系(Relations)”组成,内部还有TAG为K,V形式,对数据进行描述,在文件中,实际已经有路网的相关面熟,所以可以直接用来研发离线路线规划或者导航功能。

关于OSM文件更加详细的描述:https://www.cnblogs.com/xiwang/p/5445157.html

3.安装数据库

经过上述两步骤,数据源已经有了,现在要安装数据库,使用MobaXterm远程LINUX主机,MobaX term可以支持远程桌面级别访问。前提是你的服务器上采用了GUI,如果没有安装GUI可以采用lightdm 具体安装方式:

http://www.dearda.com/index.php/archives/1593

粘贴图片



我选择的是shell访问,没有采用桌面,连接成功后,先检查服务器中有没有安装yum,检查命令如下:

rpm -qa | grep yum

粘贴图片

如果没有安装YUM,请参考网上做法自行安装,一般服务器系统都会安装yum

https://www.cnblogs.com/chenyuanbo/p/11637016.html

修改yum配置文件,将其指向163的yum也可以选择阿里的,yum的配置文件目录为:/etc/yum.repos.d/

粘贴图片

然后执行如下命令:yum install postgresql-server postgresql-contrib

如提示出现各类依赖如需要安装的版本和现有版本的依赖冲突,请依次执行:

yum clean headers ;
yum clean packages;
yum clean metadata;

如提示需要安装其他的版本依赖支持,请根据名称,检索需要安装的方式,我在安装服务器的系统的时候默认已经安装了postgresql-server,只需要安装  postgresql-contrib,单独安装的方式为:yum install postgresql-contrib

当数据库安装成功后,第一步开始初始化数据库和用户,先查找数据库安装位置,执行如下命令:

find / -name initdb  查找下初始化数据库命令的位置

粘贴图片

我的文件在这里,然后执行:/usr/bin/postgresql-setup initdb ,初始化数据库,当初始化完成后,可以创建账号或者更改默认账号的密码。执行如下命令:su - postgres

粘贴图片

输入 psql

粘贴图片

执行:ALTER USER postgres WITH PASSWORD 'postgres'

粘贴图片

输入: \q

粘贴图片

输入:exit,进行推出

粘贴图片

数据库已经初始化完成,但是需要远程访问的话,还需要进行另外的配置,执行如下命令:

find / -name postgresql.conf 

粘贴图片

我的数据库安装目录为:/var/lib/pgsql/data/
粘贴图片


将listen_address 还有password_encryption的注释去掉,并将 passwo rd_encryption设置成on,然后更改同级目录下的pg_hba.conf文件,将你的IP添加进去,并更改类型

粘贴图片

执行systemctl start postgresql.service 开启数据库服务

使用Navicat进行数据库链接测试

粘贴图片

创建新的数据库

粘贴图片

在新建的库中,执行以下SQL语句:

CREATE EXTENSION hstore;
CREATE EXTENSION postgis;

粘贴图片

至此一个地理信息库创建完成

4.填充数据

解压osm2pgsql到文件盘内,我是64位系统,则选择64位程序,并将前面获取的OSM 文件,放入到文件夹内,进入文件夹后,在地址栏上输入cmd

粘贴图片

执行如下命令:

osm2pgsql -G -K -d OSM --hstore  -U postgres -H 192.168.199.221 -P 5432 -S "F:\osm2pgsql\x64\default.style" 1.osm

粘贴图片


其中default.style就在o sm2p gsql文件夹内,这个文件的意思为,配置你需要到入库中的内容,默认已经配置了一些,如果你有需要的特殊数据也存储在OSM中,如建筑的高度,可以调整和修改这个文件。

粘贴图片

如这项就是我自行添加的。

然后就是默默的等待执行完成。

当执行完成后,为了保险期间,到数据库中执行如下SQL语句:SELECT * from spatial_ref_sys where srid=900913

查看是否存在。如存在,则删除本条数据, 然后,执行o sm2p gsql文件夹中的900913.sql

粘贴图片

 spatial_ref_sys  这个表为投影坐标系表,内部存储了很多的投影坐标系。导入成功后,数据库中会生产出如下表:

粘贴图片

5.部署GeoServer

部署GeoServer官方提供了两种方式,一种是war包一种是压缩包, war包的形式则需要tamcat经过反复测试,不建议使用war包部署,因为不能够更改缓存路径,所以建议采用压缩包方式部署,可以直接解压,也可以通过宝塔安装FTP进行文件夹上传,为了以后方便一些,这边采用了宝塔,安装宝塔十分简单,但是前提是你的服务器环境中存在gcc,安装宝塔:yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh,在安装FTP服务。将GeoS erver文件上传到主机服务器。

粘贴图片

复制geoserver\lib下的jetty-servlets jetty-util这两个jar包,将其粘贴到geoserver\webapps\geoserver\WEB-INF\lib 中。并修改WEB-INF下面的 web.xml文件 增加:

   <context-param>
      <param-name>GEOWEBCACHE_CACHE_DIR</param-name>
      <param-value>/run/media/root/cachepart/Map</param-value>
   </context-param> 

这个配置为,设置切片存储的路径

粘贴图片

再将上述的注释去掉

粘贴图片


粘贴图片

在回到最外层的geos erver文件夹中,修改start.ini,将端口改为你喜欢的

粘贴图片

在通过命令进入到geos erver的bin文件夹中

cd  /run/media/root/cachepart/Code/geoserver/bin/

粘贴图片

执行 sh startup.sh

如此Geoserve就部署成功了账号为:admin密码为geoserver

粘贴图片

如果出现不能访问,可以先尝试下关闭防火墙 systemctl stop firewalld

同时因为没有用tamcat所以需要配置守护进程,请参考:

https://www.cnblogs.com/ruanraun/p/supervisor.html

配置文件如:

粘贴图片

[program:geoserver]
command=sh startup.sh
directory=/run/media/root/cachepart/Code/geoserver/bin
autorestart=true
stderr_logfile=/var/log/GateWayHost.err.log
stdout_logfile=/var/log/GateWayHost.out.log 
environment=ASPNETCORE_ENVIRONMENT=Production 
user=root
stopsignal=INT
远程访问

粘贴图片

6.发布地图

当服务完成后,开始进行地图发布。在Geoserver中,先创建工作区

粘贴图片

先提交,提交后在进行修改

粘贴图片

把这几个勾选上,然后创建数据存储

粘贴图片

粘贴图片

注意空间名称和数据源名称不能一样。

当数据源构建完成后,则需要发布我们的地图图层了,首先将osm sld文件解压后,在目录下会有几个SQL文件

粘贴图片

通过名称很好理解,一个是创建表,一个是创建视图,我选择的是创建视图,因为比较好修改,在Navicat中,选择我们刚刚创建好的数据库,右击执行SQL文件

粘贴图片

当执行成功以后,会输出如下数据,因为前面我们追加了一个height,是为了做2.5D地图效果呈现的所以,我们要修改下数据

粘贴图片

为building这个视图追加height,和myname字段,脚本如下:

SELECT planet_osm_polygon.way, planet_osm_polygon.building, planet_osm_polygon.aeroway, planet_osm_polygon.height, planet_osm_polygon.name AS myname FROM planet_osm_polygon WHERE (((planet_osm_polygon.building IS NOT NULL) AND (planet_osm_polygon.building <> 'no'::text)) OR (planet_osm_polygon.aeroway = 'terminal'::text)) ORDER BY planet_osm_polygon.z_order

同时到planet_osm_polygon表中,为没有高度的建筑设置一个默认值执行如下脚本

update planet_osm_polygon set building='yes' where height is not null and building is null 
UPDATE planet_osm_polygon SET height='30'  
WHERE (((planet_osm_polygon.building IS NOT NULL) AND (planet_osm_polygon.building <> 'no'::text) and height is null) OR (planet_osm_polygon.aeroway = 'terminal'::text))
同时新建一个地理边界的视图

CREATE TABLE "area" AS ( 
  SELECT planet_osm_polygon.way
   FROM planet_osm_polygon
);

这样地图的图层已经在视图中全部创建完成了。然后发布图层
osmsld文件进行解压。因为我没有将压缩包解压到LINUX系统下,直接解压在WINDOWS系统下,所以还是要使用MobaXterm

粘贴图片

点击+号,进入虚拟客户端

粘贴图片

我的文件解压在文档文件夹内部,顺序执行如下命令:

cd mydocuments;

cd osmsld;

cd sld;

粘贴图片

修改 SLD_create.sh

粘贴图片

将地址、工作区。数据存储的名称分别填好,并用#号注释最后两行,修改完成后,执行如下命令:

sh SLD_create.sh

粘贴图片

等待执行完成后,修改sld文件夹下的layergroup.xml,因为我用的是湖南省的地图,所以海域图层没有什么左右,就先删除了

粘贴图片

保存后,执行如下命令

curl -v -u admin:geoserver -XPOST -d @layergroup.xml -H "Content-type: text/xml" http://192.168.199.221:8022/geoserver/rest/layergroups

粘贴图片

当执行完成后,在图层区域就可以看到:

粘贴图片

在图层组区域就可以看到

粘贴图片

修改图层组,将图层组划分到工作区内

粘贴图片

注意此处,要将坐标参考系改为4326  在重新生成边界,默认的坐标输出的结果,不是我们熟知的经纬坐标

然后开始预览查看

粘贴图片

点击openlayers查看

目前地图已经发布成功,但是不好看,我们可以调整样式,最终呈现效果

粘贴图片

粘贴图片

参考百度地府所做的午夜蓝样式皮肤

修改样式可以在

粘贴图片

这个里面进行修改,.sld文件其实就是样式文件

7.相关附件












备注:geoserver,可以发布GEOJSON的矢量图,但是需要安装一组插件



将其粘贴到/geoserver/webapps/geoserver/WEB-INF/lib/  中,在重启服务,在点击任意图层或者图层组

粘贴图片

这可以看到有GEOJSON的选项,可以对GEOJSON进行切片

8.总结

粘贴图片






 推荐知识

 历史版本

修改日期 修改人 备注
2020-04-22 15:50:14[当前版本] 井沿博 1.0
2020-04-22 15:43:25 井沿博 1.0
2020-04-22 15:35:38 井沿博 1.0

 附件

附件类型

ZIPZIP PNGPNG

知识分享平台 -V 4.8.7 -wcp