国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于NodeJS和ArcGIS緊湊切片的OGC-WMTS服務(wù)的研究與實(shí)現(xiàn)

2014-07-27 06:19:30姜成楨熊志偉殷金榮
創(chuàng)新科技 2014年24期
關(guān)鍵詞:字節(jié)切片客戶端

姜成楨 熊志偉 殷金榮

(黃河勘測(cè)規(guī)劃設(shè)計(jì)有限公司,河南 鄭州 450008)

基于NodeJS和ArcGIS緊湊切片的OGC-WMTS服務(wù)的研究與實(shí)現(xiàn)

姜成楨 熊志偉 殷金榮

(黃河勘測(cè)規(guī)劃設(shè)計(jì)有限公司,河南 鄭州 450008)

在一般情況下都是用ArcGIS Desktop制作精美的地圖,用ArcGIS Server發(fā)布為地圖切片服務(wù),但是,在有些時(shí)候僅需發(fā)布地圖切片服務(wù),如何將龐大的后臺(tái)輕量化,筆者進(jìn)行了摸索,通過(guò)NodeJS來(lái)發(fā)布符合OGC-WMTS規(guī)范的ArcGIS緊湊地圖切片是一個(gè)不錯(cuò)的方案。

NodeJS;ArcGIS;OGC-WMTS;Compact Cache;緊湊切片緩存;bundle

1 引言

ArcGIS是功能最強(qiáng)大和性能最好的GIS平臺(tái),具備一體化的GIS解決方案,具有強(qiáng)大的地圖制作、空間數(shù)據(jù)管理、空間分析、空間信息整合、發(fā)布與共享的能力。其中ArcGIS for Desktop為GIS專業(yè)人士提供強(qiáng)大的高級(jí)的地理數(shù)據(jù)建庫(kù)、分析、處理與地圖制圖等功能;ArcGIS for Server通過(guò)Web Services在網(wǎng)絡(luò)上提供GIS資源和功能服務(wù),廣泛用于企業(yè)級(jí) GIS實(shí)現(xiàn)以及各種Web GIS應(yīng)用程序中。ArcGIS功能強(qiáng)大,當(dāng)然價(jià)格也是很昂貴,而在現(xiàn)實(shí)中往往有這樣的需求:在實(shí)際的產(chǎn)品部署中只是用ArcGIS Server來(lái)發(fā)布電子地圖切片,這提高了成本并造成了資源的浪費(fèi),那有沒(méi)有一種廉價(jià)的替代方案呢?生產(chǎn)階段依然使用ArcGIS Desktop配置地圖并生成地圖切片,在部署時(shí)不使用ArcGIS Server而用其他方式發(fā)布符合OGC-WMTS規(guī)范的地圖服務(wù),對(duì)此,筆者進(jìn)行了探索。為了實(shí)現(xiàn)這個(gè)目的,首先需要了解ArcGIS的地圖切片結(jié)構(gòu);之后需要了解OGC-WMTS服務(wù)規(guī)范;在此基礎(chǔ)上給出實(shí)現(xiàn),實(shí)現(xiàn)的技術(shù)多種,在這里筆者選用NodeJS。

2 ArcGIS緊湊型存儲(chǔ)格式分析

從ArcGIS 10開始增加了一種稱之為緊湊型存儲(chǔ)(Compact)的新的切片緩存文件格式,與之前的松散型存儲(chǔ)(Exploded)相比,它有文件個(gè)數(shù)少、節(jié)約存儲(chǔ)空間、容易部署和遷移等諸多優(yōu)點(diǎn),已經(jīng)成為廣泛使用的格式。其核心為bundle和bundlx兩種文件。

2.1 其中bundle文件存儲(chǔ)地圖切片數(shù)據(jù),bundlx是切片數(shù)據(jù)的索引文件。一個(gè)bundle文件中最多可以存儲(chǔ)128×128(16384)個(gè)地圖切片,以低位到高位的方式4個(gè)字節(jié)記錄切片數(shù)據(jù)長(zhǎng)度,之后存儲(chǔ)切片的真實(shí)數(shù)據(jù)信息,如此循環(huán)。當(dāng)在一個(gè)層級(jí)里,地圖切片數(shù)多余16384個(gè),會(huì)分成多個(gè)bundle文件存儲(chǔ)。

2.2 bundlx文件比較簡(jiǎn)單,大小81952字節(jié),其中文件起始16字節(jié)和文件結(jié)束16字節(jié)為標(biāo)識(shí)信息,與索引無(wú)關(guān),剩余的81920字節(jié)為有效索引信息,以每5個(gè)字節(jié)重復(fù),5個(gè)字節(jié)同樣以低位到高位的方式記錄了對(duì)應(yīng)的切片在bundle文件中的偏移量,而偏移量的記錄按照列排順序。

2.3 對(duì)于每一個(gè)地圖切片,首先通過(guò)bundlx首先找到bundle中切片內(nèi)容的偏移,然后從bundle文件中取出4個(gè)字節(jié)的長(zhǎng)度數(shù)據(jù),再隨后根據(jù)這個(gè)長(zhǎng)度即可讀取真實(shí)的切片數(shù)據(jù)。

3 WMTS服務(wù)規(guī)范基本要求

WMTS(OpenGIS Web Map Tile Service,切片地圖網(wǎng)絡(luò)服務(wù))提供了一種采用預(yù)先定義地圖切片方法來(lái)發(fā)布數(shù)字地圖服務(wù)的標(biāo)準(zhǔn)化解決方案。與WMS相比,WMTS服務(wù)器不提供可定制地圖服務(wù),而是直接返回實(shí)現(xiàn)預(yù)先生成的切片,在這個(gè)過(guò)程不需要任何圖像操作或地理信息處理過(guò)程,這種方式盡管犧牲了提供定制地圖的靈活性,但是,卻能夠很好地滿足性能與伸縮性的需要。對(duì)于WMTS服務(wù)端,需要響應(yīng)來(lái)自客戶端的以面向資源的架構(gòu)風(fēng)格(KVP、SOAP)的資源請(qǐng)求或以面向過(guò)程的架構(gòu)風(fēng)格(REST)的操作請(qǐng)求,請(qǐng)求包括3類資源:

3.1 服務(wù)元數(shù)據(jù)(ServiceMetadata)資源(面向過(guò)程架構(gòu)風(fēng)格下對(duì)GetCapabilities操作的響應(yīng)),該資源描述指定服務(wù)器實(shí)現(xiàn)的能力和包含的信息,在面向過(guò)程的架構(gòu)風(fēng)格中該操作也支持客戶端與服務(wù)器間的標(biāo)準(zhǔn)版本協(xié)商,此請(qǐng)求服務(wù)器端必須響應(yīng)。直接利用ArcGIS生成的服務(wù)元數(shù)據(jù)進(jìn)行適當(dāng)修改并返回。

3.2 切片(Tile)資源(面向過(guò)程架構(gòu)風(fēng)格下GetTile操作的響應(yīng)),此請(qǐng)求服務(wù)器端必須實(shí)現(xiàn)。找到切片所在的bundle并打開加載Tile返回。

3.3 要素信息(FeatureInfo)資源(對(duì)面向過(guò)程架構(gòu)風(fēng)格下GetFeatureInfo操作的響應(yīng)),服務(wù)器端可選擇實(shí)現(xiàn)。該資源提供了切片中某一特定像素位置處地物要素的信息,在這里不實(shí)現(xiàn)其操作。

4 基于NodeJS的OGC-WMTS實(shí)現(xiàn)

表1 模塊功能說(shuō)明

NodeJS是一個(gè)可以快速構(gòu)建網(wǎng)絡(luò)服務(wù)及應(yīng)用的平臺(tái),采用了Javascript V8引擎,性能很好,同時(shí)還提供了很多系統(tǒng)級(jí)的API,如文件操作、網(wǎng)絡(luò)編程等。它以單進(jìn)程、單線程模式運(yùn)行,事件驅(qū)動(dòng)機(jī)制通過(guò)內(nèi)部單線程高效率地維護(hù)事件循環(huán)隊(duì)列來(lái)實(shí)現(xiàn)的,不存在多線程的資源占用和上下文切換。

由于NodeJS官方API基本都是以會(huì)回調(diào)方式傳遞函數(shù)返回值,容易出現(xiàn)層層嵌套,形成回調(diào)金字塔,代碼可能性變差,調(diào)試?yán)щy,出現(xiàn)異常后難以排查。借助Promise可以解決這個(gè)問(wèn)題,目前實(shí)現(xiàn)Promise標(biāo)準(zhǔn)的模塊有很多,如Q、bluebird和Deferred,筆者在這里使用的是Q,可以通過(guò)npm install Q-g來(lái)安裝這個(gè)插件。

具體到模塊劃分,可分為L(zhǎng)oader模塊、Cache模塊、parser模塊和Wmts模塊。其中Wmts是主模塊,其邏輯是通過(guò)parser的parse方法解析客戶端請(qǐng)求,若客戶端請(qǐng)求ServiceMetadata信息,則首先檢查SmdCache,若已經(jīng)加載過(guò)該服務(wù)的元數(shù)據(jù)信息則直接返回,若未加載過(guò)則調(diào)用SmdLoader加載并存入緩存后返回;若客戶端請(qǐng)求Tile,則先檢查TileCache,若已加載過(guò)則直接返回,無(wú)則檢查BundleCache,若有則直接通過(guò)fd加載Tile,若無(wú)則通過(guò)BundleLoader加載bundle然后再加載Tile,緩存后返回給客戶端。

為了減少不必要的I/O進(jìn)行緩存是必不可少的,除了Cache數(shù)據(jù)外,還記錄訪問(wèn)次數(shù)和最后一次訪問(wèn)的時(shí)間,有了這兩個(gè)信息對(duì)不同的Cache就可以采用不同的緩存調(diào)度策略。SmdCache可以一直保存ServiceMetadata信息,因?yàn)閿?shù)據(jù)量不會(huì)太大,而且為了提高響應(yīng)效率,可以在服務(wù)啟動(dòng)時(shí)就進(jìn)行加載WMTS服務(wù)的ServiceMetadata信息。BundleCache可以采用LRU策略,即最少使用頁(yè)面置換算法;TileCache則采用訪問(wèn)次數(shù)計(jì)數(shù)與LRU相結(jié)合的調(diào)度策略,替換掉訪問(wèn)次數(shù)少、最久沒(méi)有被請(qǐng)求的地圖切片,同樣為了提高訪問(wèn)速度,在系統(tǒng)啟動(dòng)開始可以預(yù)先加載熱點(diǎn)區(qū)域的地圖切片。

5 測(cè)試

開發(fā)完成后需要進(jìn)行嚴(yán)格的功能和性能測(cè)試,在這里筆者選擇使用Openlayers進(jìn)行功能測(cè)試,結(jié)果正常。采用微軟WAST壓力測(cè)試工具進(jìn)行性能測(cè)試取得了不錯(cuò)的成績(jī)。

6 結(jié)語(yǔ)

在只有簡(jiǎn)單的發(fā)布地圖切片的需求時(shí),采用此種方案是可行的,除了能大大的減少成本支出,還具有拷貝即部署的特點(diǎn)。

[1]劉穎.基于ArcGIS Server的移動(dòng)地圖Mashup應(yīng)用系統(tǒng)設(shè)計(jì)與研究[J].北京郵電大學(xué),2012(12).

P208

A

1671-0037(2014)12-102-2

姜成楨,男,工程師,研究方向:測(cè)繪與地理信息系統(tǒng)開發(fā)。

猜你喜歡
字節(jié)切片客戶端
No.8 字節(jié)跳動(dòng)將推出獨(dú)立出口電商APP
No.10 “字節(jié)跳動(dòng)手機(jī)”要來(lái)了?
縣級(jí)臺(tái)在突發(fā)事件報(bào)道中如何應(yīng)用手機(jī)客戶端
孵化垂直頻道:新聞客戶端新策略
基于Vanconnect的智能家居瘦客戶端的設(shè)計(jì)與實(shí)現(xiàn)
簡(jiǎn)談MC7字節(jié)碼
基于SDN與NFV的網(wǎng)絡(luò)切片架構(gòu)
腎穿刺組織冷凍切片技術(shù)的改進(jìn)方法
冰凍切片、快速石蠟切片在中樞神經(jīng)系統(tǒng)腫瘤診斷中的應(yīng)用價(jià)值比較
客戶端空間數(shù)據(jù)緩存策略
独山县| 上犹县| 德昌县| 郑州市| 高清| 黎川县| 志丹县| 渑池县| 彝良县| 滦南县| 虞城县| 清涧县| 印江| 化隆| 且末县| 报价| 新河县| 遵义市| 宜阳县| 巫溪县| 江西省| 伊金霍洛旗| 孝感市| 新巴尔虎右旗| 商河县| 乾安县| 平昌县| 上林县| 肃宁县| 全州县| 陈巴尔虎旗| 科技| 岳普湖县| 公安县| 若尔盖县| 巨鹿县| 彭泽县| 福鼎市| 望江县| 东乌珠穆沁旗| 宜春市|