
WebGIS离线解决⽅案
1、背景
在离线环境下(局域⽹中)的GIS系统中如何使⽤地图?这⾥的地图主要指的是地图底图,有了底图切⽚数据,我们就可以看到地图,在上⾯加上⾃⼰的业务数据图层,进⾏相
关操作。
要在离线环境下看到GIS地图,就要有底图切⽚数据,地图的底图切⽚数据在⼀定时间内是不会变化的,可以使⽤⼀些地图下载器下载地图切⽚,如这个。
在CS系统中可以基于来做,参考《》。
下⾯介绍下Web系统如何使⽤GIS切⽚数据,开发webGIS系统。
2、使⽤GeoWebCache发布WMS服务
Geowebcache是基于Java的Web开源项⽬,主要⽤于缓存各种WMS数据源的地图⽡⽚,它实现了多种服务接⼝,包括WMS-C,WMTS,TMS,KML。
Geowebcache作为⼀个独⽴的开源项⽬,在最近被Geover的⼏个版本所集成,主要是对发布的WMS图层建⽴缓存切⽚。
服务发布步骤:
1)官⽹下载,直接解压得到⽂件,将该⽂件直接拷贝⾄tomcat⽬录下的webapps下即可,启动tomcat会对war包进⾏解压。
2)修改geowebcache的配置⽂件。该⽂件在Tomcat的webappsgeowebcacheWEB-INF下,修改如下:
cachedirectoryifonedoesn'talreadyexist.
修改gwcXmlConfig实例化时使⽤固定路径,该路径可以为任意新建路径⽂件夹。Geowebcache启动之后会检查此⽂件夹下是否存在⽂件,如果不存在则按模板
新建⽴并读取使⽤,如果存在则直接读取使⽤。
3)修改第2步中的⽂件:
在layers节点⾥添加arcgisLayer节点(默认⽣成的的layers节点有许多其他冗余数据,可删除可保留)。Name节点表⽰待添加图层的名称(这⾥配置为
ARCGIS-Demo),titlingscheme节点为⽂件的路径,tileCachePath为⽡⽚数据的路径。
4)⽡⽚地图的准备
其中为配置⽂件,为显⽰区域约束⽂件,_alllayers⽂件夹下则存放了切⽚数据,为切⽚状态情况记录(可直接删除)。
通过⽡⽚下载器下载⽡⽚地图,然后⽣成的切⽚数据_alllayers⽂件夹:
L01-L10表⽰地图缩放级数,按照ArcGIS切⽚⽬录组织,切⽚命名规则也和ArcGIS切⽚数据命名规则⼀致。(、和_alllayers在同级⽬录)。
5)启动tomcat,继⽽启动Geowebcache服务,浏览器访问localhost:8080/geowebcache,如果⼀切正确的话可以看到下⾯的页⾯
该页⾯简单说明了Geowebcache的⼀些情况。
点击“Alistofallthelayersandautomaticdemos”连接可以看到下⾯:
该页⾯显⽰了配置的图层信息。图中可以看到只配置了⼀个名字为ARCGIS-Demo的图层,使⽤的EPSG3857坐标系,发布的图⽚格式为png格式,点击png链
接即可看到⽡⽚地图。
这⾥地图显⽰的级别和坐标系配置都来⾃⽂件。这⾥的前端js使⽤的是Openlayers。查看⽹页源码:
body{font-family:sans-rif;font-weight:bold;font-size:.8em;}
body{border:0px;margin:0px;padding:0px;}
#map{width:85%;height:85%;border:0px;padding:0px;}
varmap,demolayer;
//tsthechonmodifiableparameter
functiontParam(name,value){
str="ewParams({"+name+":'"+value+"'})"
//alert(str);
eval(str);
}
_PER_INCH=96.0;
eLoadErrorColor='transparent';
functioninit(){
varmapOptions={
resolutions:[156543.033928,78271.5169639999,39135.7584820001,19567.8792409999,9783.93962049996,4891.96981024998,2445.98490512499,1222.99245256249,611.49622628138,305.748113140558,152.874056570411,76.437028285
projection:tion('EPSG:3857'),
maxExtent:(-20037508.342787,-20037508.342780996,20037508.342780996,20037508.342787),
units:"meters",
controls:[]
};
map=('map',mapOptions);
trol(mBar({
position:(2,15)
}));
trol(tion());
trol(($('scale')));
trol(osition({element:$('location')}));
demolayer=(
"ARCGIS-Demo","../rvice/wms",
{layers:'ARCGIS-Demo',format:'image/png'},
{tileSize:(256,256),
tileOrigin:(-2.7E7,2.7E7)});
er(demolayer);
Extent((-20037497.2108,-19929239.113399997,20037497.2108,18379686.9965));
//ThefollowingisjustforGetFeatureInfo,opledonotneedthis
er('click',map,function(e){
mentById('nodelist').innerHTML="Loading...pleawait...";
varparams={
REQUEST:"GetFeatureInfo",
EXCEPTIONS:"application/_xml",
BBOX:ent().toBBOX(),
X:.x,
Y:.y,
INFO_FORMAT:'text/html',
QUERY_LAYERS:[0].,
FEATURE_COUNT:50,
Layers:'ARCGIS-Demo',
Styles:'',
Srs:'EPSG:3857',
WIDTH:.w,
HEIGHT:.h,
format:"image/png"};
L("../rvice/wms",params,this,tHTML,tHTML);
(e);
});
}
functiontHTML(respon){
mentById('nodelist').innerHTML=Text;
};