朱傳林,范宏飛,段振中,楊仲江,余紅,李玉照
(1.湖北省防雷中心,湖北 武漢 430074;2.南京信息工程大學(xué)大氣物理學(xué)院,江蘇 南京 210044;3.南京市氣象局,江蘇 南京 210008)
ArcGIS Engine是ESRI公司ArcGIS 9系列軟件中新增加的GIS開發(fā)組件,是一個(gè)完整的嵌入GIS組件庫和工具,開發(fā)人員可以用來創(chuàng)建新的應(yīng)用程序或者在自定義的軟件應(yīng)用中擴(kuò)展GIS的功能.使用ArcGIS Engine,開發(fā)人員可以嵌入GIS功能到已經(jīng)存在的應(yīng)用中,比如自定義的工業(yè)軟件和商用軟件,這樣的應(yīng)用程序就可以讓很多用戶都實(shí)現(xiàn)GIS功能.ArcGIS Engine同時(shí)提供了空間分析的相關(guān)方法,在空間插值方面支持常用的反距離加權(quán)法插值、樣條函數(shù)插值、克里金插值等常用的插值方法[1-3].目前一些學(xué)者已利用ArcEngine對(duì)降雨量的空間插值及等值線的繪制做了分析[2-4],但國(guó)內(nèi)利用ArcEngine處理閃電數(shù)據(jù)少見報(bào)道.閃電強(qiáng)度分布是表征雷電破壞程度的重要指標(biāo)之一,快速、精確地繪制閃電強(qiáng)度等值線,可以有針對(duì)性的對(duì)閃電強(qiáng)度較強(qiáng)的地區(qū)加強(qiáng)雷電防護(hù).閃電強(qiáng)度等值線是閃電活動(dòng)規(guī)律中最基本的參數(shù)之一.閃電強(qiáng)度等值線繪制的關(guān)鍵部分是用閃電定位數(shù)據(jù)進(jìn)行空間插值,生成連續(xù)的閃電強(qiáng)度柵格圖,再將閃電強(qiáng)度值相等的點(diǎn)連成強(qiáng)度等值線.本文中使用ArcEngine控件,基于已有數(shù)據(jù)進(jìn)行空間插值,獲得全局空間范圍內(nèi)各個(gè)點(diǎn)位的閃電強(qiáng)度.在Eclispe RCP的平臺(tái)上,主要通過閃電數(shù)據(jù)的加載、反距離加權(quán)插值、等值線提取等方法,搭建了閃電強(qiáng)度等值線的自動(dòng)繪制模塊,將繪制的圖形導(dǎo)出.
圖1 閃電強(qiáng)度等值線自動(dòng)繪制流程
將閃電原始數(shù)據(jù)經(jīng)Java語言處理后導(dǎo)入到Oracle數(shù)據(jù)庫,利用sql語句從數(shù)據(jù)庫中查詢出某區(qū)域的閃電強(qiáng)度數(shù)據(jù),該數(shù)據(jù)包含經(jīng)度、緯度、電流強(qiáng)度,然后將閃電數(shù)據(jù)加載到shp圖層,繪制閃電強(qiáng)度等值線的技術(shù)流程圖如圖1所示.
其中:①利用Java語言處理閃電數(shù)據(jù)時(shí)要對(duì)數(shù)據(jù)進(jìn)行質(zhì)量控制,剔除小于10 kA以及大于300 kA的正閃電數(shù)據(jù);②Oracle數(shù)據(jù)庫按省份建立了全國(guó)的閃電資料數(shù)據(jù)庫,在數(shù)據(jù)的導(dǎo)入與輸出的過程中,選中江蘇省,然后利用南京地區(qū)的經(jīng)緯度初步篩選出南京地區(qū)的閃電數(shù)據(jù);③將統(tǒng)計(jì)出的數(shù)據(jù)轉(zhuǎn)換成ArcGIS支持的dbf文件,有經(jīng)度、緯度、電流強(qiáng)度3個(gè)字段;④將基數(shù)據(jù)加載到閃電強(qiáng)度數(shù)據(jù)圖層;⑤選用反距離加權(quán)插值方法,對(duì)關(guān)聯(lián)后的閃電強(qiáng)度數(shù)據(jù)圖層的電流強(qiáng)度字段進(jìn)行插值,生成閃電強(qiáng)度等值線[4-5].
2.1反距離加權(quán)插值法的含義反距離加權(quán)插值IDW(Inverse Distance Weighted Interpotation),也可以稱為距離倒數(shù)乘方法.
距離倒數(shù)乘方格網(wǎng)化方法是一個(gè)加權(quán)平均插值法,可以進(jìn)行確切的或者圓滑的方式插值.方次參數(shù)控制著權(quán)系數(shù)如何隨著離開一個(gè)格網(wǎng)結(jié)點(diǎn)距離的增加而下降.對(duì)于一個(gè)較大的方次,較近的數(shù)據(jù)點(diǎn)被給定一個(gè)較高的權(quán)重份額,對(duì)于一個(gè)較小的方次,權(quán)重比較均勻地分配給各數(shù)據(jù)點(diǎn).
(1)
(2)
IDW通過對(duì)鄰近區(qū)域的每個(gè)采樣點(diǎn)值平均運(yùn)算獲得內(nèi)插單元值.IDW是一個(gè)均分過程,這一方法要求離散點(diǎn)均勻分布,并且密集程度足以滿足在分析中反映局部表面變化[5].
距離倒數(shù)法的特征之一是在格網(wǎng)區(qū)域內(nèi)產(chǎn)生圍繞觀測(cè)點(diǎn)位置的“牛眼”.用距離倒數(shù)格網(wǎng)化時(shí)可以指定一個(gè)圓滑參數(shù).大于零的圓滑參數(shù)保證,對(duì)于一個(gè)特定的結(jié)點(diǎn),沒有哪個(gè)觀測(cè)點(diǎn)被賦予全部的權(quán)值,即使觀測(cè)點(diǎn)與該結(jié)點(diǎn)重合也是如此.圓滑參數(shù)通過修勻已被插值的格網(wǎng)來降低“牛眼”影響.
2.2ArcGISEngine中反距離加權(quán)插值法中的參數(shù)設(shè)置在ArcGIS Engine中實(shí)現(xiàn)反距離加權(quán)插值主要分為以下4步:
1)設(shè)置插值的字段名.通過IDW接口的setZField方法設(shè)置需要插值的字段.
2)設(shè)置柵格分析環(huán)境,即輸出結(jié)果的柵格大小,默認(rèn)情況下為插值的點(diǎn)圖層所占據(jù)范圍的寬度或高度(取寬度和高度中的較小值)的1/250,也可以根據(jù)實(shí)際情況手動(dòng)設(shè)置輸入輸出柵格大小.需要用到IDW接口的setCellSize()方法[5-6].
3)設(shè)置搜索半徑類型,提供了可變值和固定值兩種方式,用來確定進(jìn)行插值的樣本點(diǎn)的個(gè)數(shù),即確定用待插點(diǎn)周圍多少個(gè)樣本點(diǎn)進(jìn)行插值.當(dāng)選擇可變值時(shí),需要為其設(shè)置插值的樣本點(diǎn)個(gè)數(shù),其取決于插值單元周圍樣本點(diǎn)的密度,密度越大,半徑越小,實(shí)現(xiàn)可變搜索半徑需要用到IDW接口的setVariable()方法.當(dāng)選擇固定值時(shí),給搜索半徑設(shè)置一個(gè)固定的值和搜索半徑.搜索半徑是一個(gè)常數(shù),對(duì)每一個(gè)插值單元來說,用于尋找樣本點(diǎn)的圓形區(qū)域的半徑都是一樣的.如果搜索半徑距離內(nèi)的點(diǎn)個(gè)數(shù)小于插值點(diǎn)個(gè)數(shù)的最小整數(shù)值,則搜索半徑自動(dòng)增大,實(shí)現(xiàn)固定搜索半徑需要用到IDW接口的setFixed()方法[5-6].
4)設(shè)置柵格分析環(huán)境和搜索半徑后就可以對(duì)樣本點(diǎn)進(jìn)行插值.用IInterpolationOp的IDW 方法實(shí)現(xiàn)反距離加權(quán)插值.該方法需要的參數(shù)分別為:IGeoDataset geoData,geoData為進(jìn)行插值的點(diǎn)狀要素,需要為其指定插值的字段;Double power,power 為距離的冪,冪是一個(gè)正整數(shù),一般設(shè)置為2.IDW方法返回一個(gè)IGeoDataset地理數(shù)據(jù)集,然后將其轉(zhuǎn)成IRaster,即得到插值后的閃電強(qiáng)度柵格圖[7].
3.1閃電強(qiáng)度數(shù)據(jù)加載生成shp文件將從閃電數(shù)據(jù)庫中查詢出的閃電數(shù)據(jù)加載生成shp文件,在點(diǎn)數(shù)據(jù)的加載過程中主要用到了BufferedReader、IFeatureCursor、IFeatureBuffer等接口,BufferedReader從文件中讀出數(shù)據(jù),先將點(diǎn)數(shù)據(jù)加載IFeatureBuffer的對(duì)象,然后把其加載到IFeatureCursor的對(duì)象,最后該對(duì)象調(diào)用flush()方法刷空.其關(guān)鍵代碼如下:
IFeatureCursor featureCursor = featureClass.IFeatureClass_insert(true);
IFeatureBuffer featureBuffer = featureClass.createFeatureBuffer();
IFields fields = featureBuffer.getFields();
int lngIndex = fields.findField("Longitude");
int latIndex = fields.findField("Latitude");
int valIndex = fields.findField("Value");
featureCursor.insertFeature(featureBuffer);
featureCursor.flush();
3.2閃電強(qiáng)度數(shù)據(jù)的插值閃電強(qiáng)度數(shù)據(jù)加載后,利用ArcGIS Engine IInterpolationOp接口的IDW方法實(shí)現(xiàn)反距離加權(quán)插值,關(guān)鍵代碼如下,其中參數(shù)inFeatures為加載后的shp文件的路徑;Output 為柵格文件的輸出路徑;Value為閃電強(qiáng)度數(shù)據(jù)的閃電強(qiáng)度值,CellSize參數(shù)由圖片的大小決定,根據(jù)前面的分析將power參數(shù)設(shè)置為2.
interpolationOp.setInPointFeatures(inFeatures);
interpolationOp.setOutRaster(Output);
interpolationOp.setZField("Value");
interpolationOp.setCellSize(new Double(LightningData2Image.cellsize));
interpolationOp.setPower(2);
3.3等值線的提取利用ArcGIS Engine的Contour接口對(duì)插值后的柵格圖生成等值線,關(guān)鍵代碼如下,其中的參數(shù)inFeatures為插值后得到的閃電強(qiáng)度柵格圖,ContourInterval設(shè)置等值線的間隔,Output為輸出的等值線,BaseContour代表等值線從0開始繪制.
contour.setInRaster(inFeatures);
contour.setContourInterval(10);
contour.setOutPolylineFeatures(Output);
contourtool.setBaseContour(0);
3.4等值線的出圖利用ArcGIS Engine的PageLayoutControl、IMapGrid、IGridLabel等接口完成圖形的自動(dòng)輸出,IMapGrid用于添加經(jīng)緯度網(wǎng)格,IGridLabel用于添加標(biāo)簽.部分關(guān)鍵代碼如下,其中的參數(shù)deviceRect用于設(shè)置圖片的大小,pageLayoutControl獲取當(dāng)前活動(dòng)的視圖,export對(duì)象負(fù)責(zé)閃電強(qiáng)度等值線圖片的輸出.
tagRECT deviceRect = pageLayoutControl.getActiveView().getScreenDisplay().getDisplayTransformation().getDeviceFrame();
IEnvelope pDeviceEnvelope = new Envelope();
pDeviceEnvelope.putCoords(deviceRect.left deviceRect.bottom, deviceRect.right deviceRect.top);
export.setPixelBounds(pDeviceEnvelope);
ITrackCancel pCancle=new CancelTracker();
pageLayoutControl.getActiveView().output(export.startExporting(), (int) export.getResolution(), deviceRect,pageLayoutControl.getActiveView().getExtent(), pCancle();
export.finishExporting();
4.1南京地區(qū)氣候與環(huán)境南京地區(qū)的主要范圍介于:東經(jīng)118.34°E~119.24°E 、北緯31.24°N~32.61°N之間.大部分是低山丘陵,面積4 255.07 km2,江河面積752.06 km2,地處中緯,屬亞熱帶季風(fēng)氣候,秋天干燥涼爽,冬季寒冷、干燥.每年6月起3~4個(gè)月內(nèi)為南京的主汛期.在汛期里,強(qiáng)對(duì)流活動(dòng)頻繁,雷電活動(dòng)也相對(duì)頻繁.每日午后地表吸收太陽能增溫至峰值,近地層空氣溫度也很高,暖空氣膨脹上升,易產(chǎn)生強(qiáng)對(duì)流,直到傍晚太陽落山時(shí)才有所緩解.
圖2 閃電數(shù)據(jù)入庫
圖3 閃電數(shù)據(jù)的查詢
圖4 閃電數(shù)據(jù)的管理
圖5 閃電強(qiáng)度等值線
4.2閃電強(qiáng)度等值線的自動(dòng)繪制技術(shù)的應(yīng)用閃電強(qiáng)度分布是雷電災(zāi)害風(fēng)險(xiǎn)區(qū)劃的量化指標(biāo)之一.為了更好地研究閃電強(qiáng)度的分布,本系統(tǒng)使用Eclipse RCP(Rich Client Platform,富客戶端平臺(tái))技術(shù)搭建,選用優(yōu)秀的Java語言開發(fā),以Eclipse開發(fā)平臺(tái)為基礎(chǔ),建立了全國(guó)的閃電資料Oracle10 g數(shù)據(jù)庫,在數(shù)據(jù)導(dǎo)入到數(shù)據(jù)庫時(shí),需要選擇對(duì)應(yīng)的省份及閃電定位儀型號(hào),如圖2所示,并加入了Job后臺(tái)任務(wù)處理機(jī)制.由于在非UI線程里面不能直接進(jìn)行UI處理,使用Display.getDefault().asyncExec(new Runnable())進(jìn)行UI彈出對(duì)話框處理,數(shù)據(jù)在導(dǎo)入的過程中不會(huì)出現(xiàn)假死機(jī)的現(xiàn)象,給用戶很好的體驗(yàn)效果.將江蘇省的數(shù)據(jù)導(dǎo)入完畢后,利用數(shù)據(jù)庫查詢模塊,可以查看閃電數(shù)據(jù)的起止時(shí)間,根據(jù)起止時(shí)間查看閃電數(shù)據(jù)的條數(shù)等,如圖3所示.在某些特殊情況下,如某些數(shù)據(jù)重復(fù)導(dǎo)入了,利用閃電數(shù)據(jù)庫的管理模塊將該省份的所有數(shù)據(jù)刪除,然后再重新導(dǎo)入.
繪制南京地區(qū)的閃電強(qiáng)度等值線時(shí),系統(tǒng)會(huì)根據(jù)統(tǒng)計(jì)數(shù)據(jù)的起止時(shí)間查詢出該地區(qū)的所有閃電數(shù)據(jù),主要包含閃電時(shí)間、經(jīng)緯度、強(qiáng)度等信息,并且將其寫入到文本文件.數(shù)據(jù)自動(dòng)加載后生成了點(diǎn)圖層的shp文件,通過反距離加權(quán)插值方法自動(dòng)繪制出閃電強(qiáng)度等值線,然后利用南京地區(qū)的地圖掩膜出該區(qū)域的等值線,通過掩膜就可以把地圖以外的數(shù)據(jù)剔除,只保留地圖內(nèi)部的數(shù)據(jù).繪制出的等值線需要通過pageLayoutControl獲取當(dāng)前活動(dòng)的視圖,然后將其導(dǎo)出(支持jpg、tiff、emf、gif等),如圖5所示,在配置項(xiàng)可以添加圖名、圖例、單位、指北針、比例尺,還可以調(diào)整網(wǎng)格大小,最后輸出圖形即可得到南京地區(qū)的閃電強(qiáng)度等值線.
本文中運(yùn)用Oracle數(shù)據(jù)庫統(tǒng)計(jì)出南京地區(qū)的閃電數(shù)據(jù),利用ArcGIS Engine 提供的空間插值方法分析了閃電強(qiáng)度等值線的自動(dòng)繪制步驟并給出了關(guān)鍵步驟的主要程序代碼,其設(shè)計(jì)實(shí)現(xiàn)了閃電強(qiáng)度等值線的自動(dòng)繪制模塊,該模塊在南京地區(qū)地理信息系統(tǒng)中得到應(yīng)用并取得了較好的效果,該技術(shù)方法也為其他地區(qū)閃電強(qiáng)度等值線的自動(dòng)繪制提供了較強(qiáng)的參考價(jià)值[8-9].
在實(shí)際的應(yīng)用中,如果沒有shp格式地圖,等值線區(qū)域?qū)⑹且粋€(gè)矩形區(qū)域.為了更好地結(jié)合地圖繪制等值線,可以結(jié)合Google Map做進(jìn)一步的開發(fā),由Google Map提供地圖,便可繪制出更漂亮的閃電強(qiáng)度等值線.
[1] 李井岡,姚運(yùn)生,李賢華,等.在MapInfo中實(shí)現(xiàn)等值線圖區(qū)域填充的快速算法[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(7):1780-1783.
[2] 宋麗瓊,田原,鄔倫,等.日降水量的空間插值方法與應(yīng)用對(duì)比分析——以深圳市為例[J].地球信息科學(xué),2008,10(5):566-572.
[3] 方書敏,錢正堂,李遠(yuǎn)平.甘肅省降水的空間內(nèi)插方法比較[J].干旱區(qū)資源與環(huán)境,2005,19(3):47-50.
[4] 孟慶香,劉國(guó)彬,楊勤科.黃土高原降水量的空間插值方法研究[J].西北農(nóng)林科技大學(xué)學(xué)報(bào):自然科學(xué)版,2006,34(3):83-88.
[5] 湯國(guó)安,楊昕.ArcGIS地理信息系統(tǒng)空間分析實(shí)驗(yàn)教程[M].北京:科學(xué)出版社,2006:4.
[6] 范銀貴.空間插值方法在繪制降水量等值線中的應(yīng)用[J].水利水電科技進(jìn)展,2002,22(3):48-50.
[7] 李新,程國(guó)棟,盧玲.空間內(nèi)插比較[J].地球科學(xué)進(jìn)展,2000,15(3):260-265.
[8] 朱求安,張萬昌,余鈞輝.基于GIS 的空間插值方法研究[J].江西師范大學(xué)學(xué)報(bào):自然科學(xué)版,2004,28(2):183-188.
[9] 李朝奎,陳良,王勇.降雨量分布的空間插值方法研究——以美國(guó)愛達(dá)荷州為例[J].礦產(chǎn)與地質(zhì),2007,21(6):684-687.