博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web GIS离线解决方案
阅读量:5770 次
发布时间:2019-06-18

本文共 2916 字,大约阅读时间需要 9 分钟。

1、背景

在离线环境下(局域网中)的GIS系统中如何使用地图?这里的地图主要指的是地图底图,有了底图切片数据,我们就可以看到地图,在上面加上自己的业务数据图层,进行相关操作。

要在离线环境下看到GIS地图,就要有底图切片数据,地图的底图切片数据在一定时间内是不会变化的,可以使用一些地图下载器下载地图切片,如这个。

在CS系统中可以基于GMap.Net来做,参考《》。

下面介绍下Web系统如何使用GIS切片数据,开发web GIS系统。

2、使用GeoWebCache发布WMS服务

Geowebcache是基于Java的Web开源项目,主要用于缓存各种WMS数据源的地图瓦片,它实现了多种服务接口,包括WMS-C,WMTS,TMS,KML。

Geowebcache作为一个独立的开源项目,在最近被Geosever的几个版本所集成,主要是对发布的WMS图层建立缓存切片。

服务发布步骤:

1)官网下载 ,直接解压得到geowebcache.war文件,将该文件直接拷贝至tomcat目录下的webapps下即可,启动tomcat会对war包进行解压。

2)修改geowebcache的配置文件geowebcache-core-context.xml。该文件在Tomcat的webapps\geowebcache\WEB-INF下,修改如下:

Set the location of the template configuration file to copy over to the cache directory if one doesn't already exist.

修改gwcXmlConfig实例化时使用固定路径,该路径可以为任意新建路径文件夹。Geowebcache启动之后会检查此文件夹下是否存在gewebcache.xml文件,如果不存在则按模板新建立并读取使用,如果存在则直接读取使用。

3)修改第2步中的gewebcache.xml文件:

ARCGIS-Demo
D:\\GisMap\\Layer\\conf.xml
D:\\GisMap\\Layer\\_alllayers

在layers节点里添加arcgisLayer节点(默认生成的gewebcache.xml的layers节点有许多其他冗余数据,可删除可保留)。Name节点表示待添加图层的名称(这里配置为ARCGIS-Demo),titlingscheme节点为conf.xml文件的路径,tileCachePath为瓦片数据的路径。

4)瓦片地图的准备

其中conf.xml为配置文件,conf.cdi为显示区域约束文件,_alllayers文件夹下则存放了切片数据,Status.gdb为切片状态情况记录(可直接删除)。

通过瓦片下载器下载瓦片地图,然后生成的切片数据_alllayers文件夹:

L01-L10表示地图缩放级数,按照ArcGIS切片目录组织,切片命名规则也和ArcGIS切片数据命名规则一致。(conf.xml、conf.cdi和_alllayers在同级目录)。

5)启动tomcat,继而启动Geowebcache服务,浏览器访问 localhost:8080/geowebcache,如果一切正确的话可以看到下面的页面

该页面简单说明了Geowebcache的一些情况。

点击“A list of all the layers and automatic demos”连接可以看到下面:

该页面显示了geowebcache.xml配置的图层信息。图中可以看到只配置了一个名字为ARCGIS-Demo的图层,使用的EPSG3857坐标系,发布的图片格式为png格式,点击png链接即可看到瓦片地图。

这里地图显示的级别和坐标系配置都来自conf.xml文件。这里的前端js使用的是Openlayers。查看网页源码:

 
View Code

个人比较喜欢leaflet这个GIS javascript库,使用leaflet加载GeoWebCache发布的这个服务:

    Leaflet - Offline Demo    

3、使用自定义的Http服务

GeowebCache本质上就是个Http服务,通过请求参数获取配置文件中的路径中的切片数据,返回给请求方。

我们可以自己写个独立的Http服务,从数据库中读取切片数据返回给请求方。

切片请求地址类似:http://localhost:8899/1818940751/{z}/{x}/{y}

其中“1818940751”是下载器下载的地图类型,z/x/y分别是zoom和地图切片行列号。

前端js使用leaflet加载:

var amapNormalUrl = 'http://localhost:8899/788865972/{z}/{x}/{y}';var amapNormalLayer = new L.TileLayer(amapNormalUrl, {    minZoom : 1,    maxZoom : 18,    attribution : '高德普通地图'});var mapCenter = new L.LatLng(32.1280, 118.7742); //南京var map = new L.Map('map', {        center : mapCenter,        zoom : 9,        minZoom: 1,        maxZoom: 18,        layers : [ amapNormalLayer ]});

前端js可以自定义投影Projection算法,而国内google地图、高德地图和腾讯地图都是标准的墨卡托投影,可以直接用leaflet加载。

配合一些画图插件,再配合一些后台POI检索服务,如:

则能做出如下效果:

 

总结:介绍了如何使用下载的离线切片数据在局域网环境下发布Web GIS地图服务,前端配合使用一些js插件,实现web下空间数据的检索。

附件:

 
conf.cdi
 
conf.xml

 

参考:

http://leafletjs.com/

http://leafletjs.com/examples/quick-start/

http://www.cnblogs.com/luxiaoxun/p/4454880.html

http://www.cnblogs.com/luxiaoxun/p/5020247.html

 

 

你可能感兴趣的文章
Python3批量爬取网页图片
查看>>
iphone-common-codes-ccteam源代码 CCEncoding.m
查看>>
微信公众平台开发(96) 多个功能整合
查看>>
[转]MVC4项目中验证用户登录一个特性就搞定
查看>>
用Perl编写Apache模块续二 - SVN动态鉴权实现SVNAuth 禅道版
查看>>
Android 阴影,圆形的Button
查看>>
C++概述
查看>>
卡特兰数
查看>>
006_mac osx 应用跨屏幕
查看>>
nginx中配置文件的讲解
查看>>
MindNode使用
查看>>
SQL Server 2016 Alwayson新增功能
查看>>
HTTP库Axios
查看>>
CentOS7下安装python-pip
查看>>
认知计算 Cognitive Computing
查看>>
左手坐标系和右手坐标系 ZZ
查看>>
陀螺仪主要性能指标
查看>>
Java 架构师眼中的 HTTP 协议
查看>>
Linux 目录结构和常用命令
查看>>
Linux内存管理之mmap详解 (可用于android底层内存调试)
查看>>