因为人防行业改革,目前所有的服务器操作系统全部要切换成linux版本,就目前来看,我们前面研发的地图服务采用的4.0的框架研发的,所以无法达成跨平台的业务需求,而主要引用的地图服务核心库并不支持Core,所以决定重新寻找方案代替现有的离线地图服务。
1.Geoserver:java开源的地图服务引擎,以支持多数据格式著称
2.PostgreSql:开源的企业级数据库,目前多使用与地理信息
3.PostGis:PostgreSql的插件,为PostgreSql提供地理数据投影数据结构
3.Osm2pgsql:将XML格式文件转换为pgsql
4.Supervisor:Linux下配置守护进行,方便开机服务自启动
5.Openlayers:开源的前端地图展示框架
6.Osmsld:标准地图样式包,方便快速生成图层
7.MobaXterm:免费的LINUX远程终端,功能强大操作友好
8.BtServer:免费的系统运维管理软件
9.Osmconvert:XML格式文件类型转换工具
10.openstreetmap:全球共同协作的地理地图呈现服务,免费提供.PBF与.OSM地理信息文件
到https://www.openstreetmap.org下选择需要下载的地图区域进行下载
也可以选择:https://download.geofabrik.de/
也可以选择:http://download.openstreetmap.fr/extracts/asia/china/
可以分省来下载区域地图
注意:经过三种模式文档测试,建议使用第一种,数据很全面,其他提供的数据,有些是你不需要的
不过三种方式提供的数据都是最新的,第一种格式下载完成的直接是.OSM后缀的,不过比较慢
剩下两种模式下载下来的是。PBF格式的。SHP格式的建议不要下载,解压后很大很大。
软件介绍: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
经过上述两步骤,数据源已经有了,现在要安装数据库,使用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;
至此一个地理信息库创建完成
解压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 这个表为投影坐标系表,内部存储了很多的投影坐标系。导入成功后,数据库中会生产出如下表:
部署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
远程访问
当服务完成后,开始进行地图发布。在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
);
点击+号,进入虚拟客户端
我的文件解压在文档文件夹内部,顺序执行如下命令:
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文件其实就是样式文件
备注:geoserver,可以发布GEOJSON的矢量图,但是需要安装一组插件
这可以看到有GEOJSON的选项,可以对GEOJSON进行切片
修改日期 | 修改人 | 备注 |
2020-04-22 15:50:14[当前版本] | 井沿博 | 1.0 |
2020-04-22 15:43:25 | 井沿博 | 1.0 |
2020-04-22 15:35:38 | 井沿博 | 1.0 |
附件类型 | ZIP PNG |
|
|