【摘要】針對傳統(tǒng)地圖調(diào)用模式效率低、時效性差等問題,本文提出了一種基于GIS的地圖瓦片生成方法,可將生成的瓦片地圖作為背景底圖,提高了地圖的瀏覽、查詢、地理分析等出圖效率。經(jīng)測試,該方法可實現(xiàn)對地圖分塊切割,達(dá)到了以“空間換取時間”的目標(biāo)。
【關(guān)鍵詞】地圖瓦片 GIS 時效性
0引言
隨著智慧城市快速推進(jìn),城市基礎(chǔ)地理信息服務(wù)的重要性日益突出,政府相關(guān)部門非常重視地理空間信息服務(wù)工作。傳統(tǒng)的Web GIS系統(tǒng)采用實時請求地圖服務(wù)器工作模式,該模式極大地消耗了網(wǎng)絡(luò)負(fù)載和服務(wù)器負(fù)載,導(dǎo)致時效性差、工作效率低,無法滿足多用戶、高并發(fā)的地理空間信息資源共享服務(wù)需求。然而,Google Maps的出現(xiàn)打破了人們對傳統(tǒng)Web GIS工作模式的看法,同時也給大家提供了研究思路和解決方法。Google Maps將全球地圖和影像采用特定的預(yù)切割方式進(jìn)行切片,并將切好的地圖圖像存儲在服務(wù)器上,當(dāng)用戶訪問地圖時,將從Google Maps的服務(wù)器上請求圖片到本機(jī)緩存,這樣就很大程度上減輕服務(wù)器壓力,提高了請求數(shù)量和訪問速度。鑒于此,為了提高公眾服務(wù)平臺空間信息資源共享的服務(wù)效率和能力,開發(fā)基于基于GIS的地圖瓦片生成方法十分必要。
1地圖瓦片生成方法機(jī)理
地圖切片技術(shù)是目前大多數(shù)電子地圖網(wǎng)站使用的技術(shù),地圖分塊切割后將地圖若干不同的瓦片組合劃分不同的等級顯示,再由客戶端呈現(xiàn)出無縫拼接地圖的瀏覽技術(shù)。地圖瓦片技術(shù)將配置好的一定坐標(biāo)范圍的地圖,按照固定的若干個瓦片級別和指定圖片尺寸(如128,256像素),切成若干行及列的正方形圖片,以指定的格式保存成圖像文件,按一定的命名規(guī)則和組織方式存儲到目錄系統(tǒng)中或是數(shù)據(jù)庫系統(tǒng)里,形成金字塔模型的靜態(tài)地圖緩存,地圖切圖所獲得的地圖切片也叫瓦片。對每個地圖切片所表示的地理范圍,進(jìn)行下一個縮放級別的地圖切片生成,直至所要表示地圖的最大比例尺,形成地圖切片的金字塔結(jié)構(gòu),地圖切片的數(shù)量呈指數(shù)級別的增長。瓦片式地圖采用金字塔結(jié)構(gòu)模型如下圖1所示。瓦片式地圖采用多分辨率層次模型的結(jié)構(gòu),從瓦片金字塔的第一層到最后一層,地圖顯示的細(xì)節(jié)越來越清晰,但是地圖表示的地理范圍是不變的。
為了實現(xiàn)對GIS系統(tǒng)的圖層信息的提取處理,首先需要參考Google Maps地圖瓦片預(yù)生成技術(shù)對地圖按照Google Maps標(biāo)準(zhǔn)進(jìn)行切割。本文對提取的圖層信息進(jìn)行標(biāo)準(zhǔn)化處理后,統(tǒng)一存儲為Google Maps格式(每個tile為256× 256像素的.png格式的圖像)。本文采用預(yù)切割方式對地圖進(jìn)行切片,并將切好的地圖圖像存儲在服務(wù)器上,當(dāng)用戶訪問地圖時,將從服務(wù)器上請求圖片到本機(jī)緩存,這樣很大程度上提高請求數(shù)量和訪問速度。采用的地圖轉(zhuǎn)換參數(shù)標(biāo)準(zhǔn)如表1所示。
2地圖瓦片生成方法設(shè)計與實現(xiàn)
2.1地圖瓦片生成算法流程
參考GoogleMaps標(biāo)準(zhǔn),地圖瓦片生成算法流程如圖2所示。
2.2地圖瓦片生成方法實現(xiàn)結(jié)果
2.2.1代碼實現(xiàn)
private void getWorkspace() //建立一個工作空間
private void createDatasource()//得到數(shù)據(jù)源
ds=workspace.getDatasources().open(info)//在工作空間中打開數(shù)據(jù)源。
public OneLevelMapTilesGet(int layerId,int maxLayerId,Vector v){}//單層切圖
public OneLevelMapTilesGet(int layerId,int maxLayerId,Vector v,int tag)
private void getMap(){}從數(shù)據(jù)源中得到地圖,包括加上背景圖層。
DatasetVector dv =(DatasetVector)ds.getDatasets().get("backColor_1");
name=ds.getDatasets().getAvailableDatasetName("backColor");
dv=ds.getDatasets().create(newDatasetVectorInfo(name,DatasetType.REGION));
dv為數(shù)據(jù)集向量,以上為畫背景圖層圖形所需的必要設(shè)置。
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(){}//使用完數(shù)據(jù)源,工作空間,地圖后,進(jìn)行釋放。
2.2.2實現(xiàn)結(jié)果
根據(jù)SuperMap GIS中的沈陽市地圖信息,對其進(jìn)行標(biāo)準(zhǔn)圖片的生成,根據(jù)本文地理信息標(biāo)準(zhǔn)圖片生成算法可知:當(dāng)切圖等級為n時,輸出的圖片數(shù)量是2n-1×2n-1,即當(dāng)切圖等級設(shè)置為3時輸出的圖片數(shù)量16張,以此類推。
3結(jié)論
立足有線電視網(wǎng)絡(luò)管理中的地圖調(diào)用效率低下問題,提出了一種基于GIS的地圖瓦片生成算法,采用該算法可實現(xiàn)對地圖的精細(xì)化切割,自由度較大,同時基于該算法生成的地圖具有瀏覽、查詢、地理分析等功能,極大地提高了網(wǎng)絡(luò)管理效率,測試效果良好,能夠滿足有線電視網(wǎng)絡(luò)管理需求。
參考文獻(xiàn):
[1]巫細(xì)波,胡偉平.Google Maps運行機(jī)制以及應(yīng)用研究[J].華南師范大學(xué)(自然科學(xué)版),2009(2):106-110 .
[2]張康壽,等.基于RIA和Web Services的WebGIS系統(tǒng)的開發(fā)[J].地理空間信息:2009.
[3]耿慶齋,繆綸,段媛媛,等.基于Google Maps API的地圖服務(wù)系統(tǒng)研究及應(yīng)用[J].中國水利水電科學(xué)研究院學(xué)報,2009(3):62-66.
[4]劉冰,謝軻,陳小樂,等.基于GIS的瓦片式地圖切圖算法的設(shè)計與實現(xiàn)[J].科技信息,2011(7):60-61.
[5]王小軍,劉璐.基于ArcGIS Engine進(jìn)行瓦片式切圖的技術(shù)研究[J].測繪與空間地理信息, 2010(8).
基金項目:徐州市科技計劃項目(No. KC16GX038)。
作者簡介:張鐵(1970.12-),男,高級工程師,研究方向為網(wǎng)絡(luò)管理.