需求的提出:
由于业务需求,展示GIS时,不能连接互联网,也就是说不能调用互联网上提供的地图服务。
因为不能联网,所以必须在局域网或本机上搭建离线瓦片地图服务。本文讲述如何搭建离线瓦片地图服务。
1.下载瓦片地图
由于不能连接互联网,所以我们得找一台能上互联网的机器,将需要的地图以瓦片形式下载下来,便于离线时调用。关于什么是瓦片地图,网上很多相关的文章,请自行搜索、了解。
从如下链接下载离线地图下载工具:
Download Offline Map Maker
从Offline Map Maker的官方主页:
Offline Map Maker
可以看到,这个工具可以下载当今世界一些主流地图提供商的地图,如下:
在上述界面,输入你要下载地图范围的左、右、上、下经纬度,地图精度及瓦片地图保存目录,点击start即可下载,如下是我下载全中国的离线地图设置:
你也可以不用范围的上下左右经纬度,而采用勾选“use kml/gpx to define a polygon area”,选择一个定义范围的文件进行区域范围的选择,从而下载地图。本下载工具还支持断点下载,当本次因为某种原因断开时,下次开启,选择指定原先下载的任务名称,可以接续下载。
说明:
本下载工具仅仅支持1~12级精度地图,12到18级的要收取79美元才行。请保证存放瓦片地图的磁盘足够大,按我上面的设置下载,占用4.58GB,png图片个数为680530个。下载时间很长,我本机下载了28个小时。
下载完成后,进入到该软件的“Tools ---> Map Viewer”菜单,找到上面的下载任务名称,如:我设置的chinamap.omm,如下:
就可以看到离线地图了。可以根据该工具,查看你下载的离线地图是否是你想要的、是否完整。
2.搭建瓦片地图服务
2.1 利用jdk 8、 Tomcat 10.0.27搭建瓦片地图服务
jdk 8、 Tomcat 10.0.27的下载请自行到各自的官网下载,建议下载jdk8,在此不再赘述。
jdk 8、 Tomcat 10.0.27的安装,请自行百度,网上相关文章很多,在此不再赘述。
安装完上述后,打开cmd,将tomcat\bin\startup.bat拖动到cmd(其中tomcat为其安装目录,下同),按回车启动tomcat,如下:
打开浏览器,输入http://127.0.0.1:8080, 其中8080是端口,请自行根据你自己的配置更改。如果出现如下界面,证明tomcat安装成功:
Tomcat安装后,Tomcat的主目录是webapps/root目录。在conf文件夹下面找到server.xml配置文件,并找到文件末尾,在文件末尾增加如下行:
docBase即为默认访问的文件夹名称。
按照上面提到的方法,启动tomcat,在浏览器输入:
http:127.0.0.1:8080/1/1/0.png
如果看到如下界面,则证明离线地图服务搭建成功:
2.1.1.将tomcat地图服务设置为服务且开机自启动
将tomcat注册为服务主要是方便维护,就是在服务器重启的时候不用再手动的去启动tomcat。
注册方法:
在DOS命令行模式下,cd到tomcat下的bin目录。在bin目录下可以看到一个service.bat的批处理文件,这个文件就是用来注册服务用的。在bin目录下执行命令 service.bat install 服务名(例如:service.bat install Tomcat10)
执行成功后可以看到提示:
The Service '服务名'has been installed
这样服务就已经注册完毕了。如果注册成功,如果是Windows系统,单击“我的电脑”,选择“属性->管理->服务和应用程序->服务”菜单,则右侧就能看到名称为上述'服务名'的服务了;可以直接将服务设置为自动,这样以后再重启服务器就会自动运行,不需要手动启动。
如果想要卸载服务的话需要执行命令:service.bat uninstall 服务名,执行成功后会提示:
The Service ‘服务名’ has been removed
2.2.利用nginx搭建瓦片地图服务
从官网nginx: download下载Nginx,之后找到conf/nginx.conf文件,更改该文件的http节点为如下:
http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 8088;server_name localhost;#允许跨域请求的域,*代表所有add_header 'Access-Control-Allow-Origin' *;#允许带上cookie请求add_header 'Access-Control-Allow-Credentials' 'true';#允许请求的方法,比如 GET/POST/PUT/DELETEadd_header 'Access-Control-Allow-Methods' *;#允许请求的headeradd_header 'Access-Control-Allow-Headers' *;#切片服务location ~ .*\.(gif|jpg|jpeg|png)$ { expires 24h; root E:/QGIS/osmchina/chinamap/;#指定图片存放路径 access_log E:/QGIS/osmchina/chinamap/log;#图片路径 proxy_store on; proxy_store_access user:rw group:rw all:rw; proxy_temp_path E:/QGIS/osmchina/chinamap/;#图片路径 proxy_redirectoff; proxy_set_header Host 127.0.0.1; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; client_max_body_size 10m; client_body_buffer_size 1280k; proxy_connect_timeout 900; proxy_send_timeout900; proxy_read_timeout900; proxy_buffer_size 40k; proxy_buffers 40 320k; proxy_busy_buffers_size 640k; proxy_temp_file_write_size 640k; }location / {root html;index index.html index.htm;}#error_page 404 /404.html;# redirect server error pages to the static page /50x.html#error_page 500 502 503 504 /50x.html;location = /50x.html {root html;}}
其中listen 表示访问端口,root表示地图瓦片图片存放目录;access_log为日志存放目录;proxy_temp_path为代理临时目录,请根据自己的实际设置。之后打开cmd将目录定位到nginx安装目录下,在cmd输入如下命令:
start nginxnginx -s reload
之后,在浏览器输入:
http://127.0.0.1:8088
如果出现如下界面,则nginx启动成功:
再输入:
http://127.0.0.1:8088/1/1/0.png
如果出现如下界面:
证明基于nginx的离线地图服务配置成功。
3.用QGIS调用离线地图服务并展示离线地图
打开QGIS 3.26.2.exe,选择xyz Tiles节点,单击右键,选择“New Connection...”菜单,按如下操作,输入name,如:chinaofflinemap, 在URL中输入前文配置好的离线地图服务的URL,如:http://127.0.0.1:8080/{z}{x}{y}.png,在左下角的zoom Level中输入最小最大地图精度,本例是1~12:
单击确定,将name,如:chinaofflinemap拖动到中间地图画布中,如果一切没问题,就能看到离线地图,如下:
说明:
某些较老版本的QGIS没有XYZ Tiles节点,请用较新的版本。可以利用QGIS进行二次开发,通过代码实现加载上述瓦片服务地图到自己的业务项目,具体参看QGIS二次开发:加载XYZ Tiles形式的瓦片地图