APP下载

基于GIS的地图瓦片生成方法的设计与实现

2019-08-27张铁

商情 2019年29期
关键词:空间信息数据源网络管理

【摘要】针对传统地图调用模式效率低、时效性差等问题,本文提出了一种基于GIS的地图瓦片生成方法,可将生成的瓦片地图作为背景底图,提高了地图的浏览、查询、地理分析等出图效率。经测试,该方法可实现对地图分块切割,达到了以“空间换取时间”的目标。

【关键词】地图瓦片 GIS 时效性

0引言

随着智慧城市快速推进,城市基础地理信息服务的重要性日益突出,政府相关部门非常重视地理空间信息服务工作。传统的Web GIS系统采用实时请求地图服务器工作模式,该模式极大地消耗了网络负载和服务器负载,导致时效性差、工作效率低,无法满足多用户、高并发的地理空间信息资源共享服务需求。然而,Google Maps的出现打破了人们对传统Web GIS工作模式的看法,同时也给大家提供了研究思路和解决方法。Google Maps将全球地图和影像采用特定的预切割方式进行切片,并将切好的地图图像存储在服务器上,当用户访问地图时,将从Google Maps的服务器上请求图片到本机缓存,这样就很大程度上减轻服务器压力,提高了请求数量和访问速度。鉴于此,为了提高公众服务平台空间信息资源共享的服务效率和能力,开发基于基于GIS的地图瓦片生成方法十分必要。

1地图瓦片生成方法机理

地图切片技术是目前大多数电子地图网站使用的技术,地图分块切割后将地图若干不同的瓦片组合划分不同的等级显示,再由客户端呈现出无缝拼接地图的浏览技术。地图瓦片技术将配置好的一定坐标范围的地图,按照固定的若干个瓦片级别和指定图片尺寸(如128,256像素),切成若干行及列的正方形图片,以指定的格式保存成图像文件,按一定的命名规则和组织方式存储到目录系统中或是数据库系统里,形成金字塔模型的静态地图缓存,地图切图所获得的地图切片也叫瓦片。对每个地图切片所表示的地理范围,进行下一个缩放级别的地图切片生成,直至所要表示地图的最大比例尺,形成地图切片的金字塔结构,地图切片的数量呈指数级别的增长。瓦片式地图采用金字塔结构模型如下图1所示。瓦片式地图采用多分辨率层次模型的结构,从瓦片金字塔的第一层到最后一层,地图显示的细节越来越清晰,但是地图表示的地理范围是不变的。

为了实现对GIS系统的图层信息的提取处理,首先需要参考Google Maps地图瓦片预生成技术对地图按照Google Maps标准进行切割。本文对提取的图层信息进行标准化处理后,统一存储为Google Maps格式(每个tile为256× 256像素的.png格式的图像)。本文采用预切割方式对地图进行切片,并将切好的地图图像存储在服务器上,当用户访问地图时,将从服务器上请求图片到本机缓存,这样很大程度上提高请求数量和访问速度。采用的地图转换参数标准如表1所示。

2地图瓦片生成方法设计与实现

2.1地图瓦片生成算法流程

参考GoogleMaps标准,地图瓦片生成算法流程如图2所示。

2.2地图瓦片生成方法实现结果

2.2.1代码实现

private void getWorkspace() //建立一个工作空间

private void createDatasource()//得到数据源

ds=workspace.getDatasources().open(info)//在工作空间中打开数据源。

public OneLevelMapTilesGet(int layerId,int maxLayerId,Vector v){}//单层切图

public OneLevelMapTilesGet(int layerId,int maxLayerId,Vector v,int tag)

private void getMap(){}从数据源中得到地图,包括加上背景图层。

DatasetVector dv =(DatasetVector)ds.getDatasets().get("backColor_1");

name=ds.getDatasets().getAvailableDatasetName("backColor");

dv=ds.getDatasets().create(newDatasetVectorInfo(name,DatasetType.REGION));

dv為数据集向量,以上为画背景图层图形所需的必要设置。

rs.addNew((Geometry)gr);

rs.refresh();

map.getLayers().add(dv, true);

将背景图层加到map中。

if(layer.getName().equals("房屋@pbn-catv"))

{

GeoStyle g=new GeoStyle();

g.setLineColor(Color.GRAY);

g.setLineWidth(0.1);

LayerSettingVector lsv=new LayerSettingVector();

lsv.setStyle(g);

layer.setAdditionalSetting(lsv);

}

map.open(mapName);//打开地图

Dimension d=newDimension(cib.getMapTileWidth(),cib.getMapTileHeight());

map.setImageSize(d);

double scale=cib.getInitMapScale();

map.setScale(scale);

Rectangle2D r=new Rectangle2D(cib.getMapInitPosition_Left(),cib.getMapInitPosition_Bottom(),cib.getMapInitPosition_Right(),cib.getMapInitPosition_Top());

map.setViewBounds(r);

public void maptoTiles(){}//切图。

String path=cib.getMapOutputPath();//图片存储路径

{map.outputMapToPNG(path+"\\\\1\\\\"+"1_0_0", true);//输为PNG图片

logger.info("The 1 layer has been completed!");//切图完成

private void close(){}//使用完数据源,工作空间,地图后,进行释放。

2.2.2实现结果

根据SuperMap GIS中的沈阳市地图信息,对其进行标准图片的生成,根据本文地理信息标准图片生成算法可知:当切图等级为n时,输出的图片数量是2n-1×2n-1,即当切图等级设置为3时输出的图片数量16张,以此类推。

3结论

立足有线电视网络管理中的地图调用效率低下问题,提出了一种基于GIS的地图瓦片生成算法,采用该算法可实现对地图的精细化切割,自由度较大,同时基于该算法生成的地图具有浏览、查询、地理分析等功能,极大地提高了网络管理效率,测试效果良好,能够满足有线电视网络管理需求。

参考文献:

[1]巫细波,胡伟平.Google Maps运行机制以及应用研究[J].华南师范大学(自然科学版),2009(2):106-110 .

[2]张康寿,等.基于RIA和Web Services的WebGIS系統的开发[J].地理空间信息:2009.

[3]耿庆斋,缪纶,段媛媛,等.基于Google Maps API的地图服务系统研究及应用[J].中国水利水电科学研究院学报,2009(3):62-66.

[4]刘冰,谢轲,陈小乐,等.基于GIS的瓦片式地图切图算法的设计与实现[J].科技信息,2011(7):60-61.

[5]王小军,刘璐.基于ArcGIS Engine进行瓦片式切图的技术研究[J].测绘与空间地理信息, 2010(8).

基金项目:徐州市科技计划项目(No. KC16GX038)。

作者简介:张铁(1970.12-),男,高级工程师,研究方向为网络管理.

猜你喜欢

空间信息数据源网络管理
论空间信息与移动通信的集成应用
图表中的交互 数据钻取还能这么用
共建空间信息走廊 助力“一带一路”
新时期企业网络管理的现状及对策研究
城市空间导示系统中的空间信息编码研究
网络管理技术的应用分析
基于Excel的照片查询系统开发与应用
再谈利用邮件合并功能批量生成准考证
数据有增加 图表自适应