朱傳林,范宏飛,段振中,楊仲江,余紅,李玉照
(1.湖北省防雷中心,湖北 武漢 430074;2.南京信息工程大學大氣物理學院,江蘇 南京 210044;3.南京市氣象局,江蘇 南京 210008)
ArcGIS Engine是ESRI公司ArcGIS 9系列軟件中新增加的GIS開發組件,是一個完整的嵌入GIS組件庫和工具,開發人員可以用來創建新的應用程序或者在自定義的軟件應用中擴展GIS的功能.使用ArcGIS Engine,開發人員可以嵌入GIS功能到已經存在的應用中,比如自定義的工業軟件和商用軟件,這樣的應用程序就可以讓很多用戶都實現GIS功能.ArcGIS Engine同時提供了空間分析的相關方法,在空間插值方面支持常用的反距離加權法插值、樣條函數插值、克里金插值等常用的插值方法[1-3].目前一些學者已利用ArcEngine對降雨量的空間插值及等值線的繪制做了分析[2-4],但國內利用ArcEngine處理閃電數據少見報道.閃電強度分布是表征雷電破壞程度的重要指標之一,快速、精確地繪制閃電強度等值線,可以有針對性的對閃電強度較強的地區加強雷電防護.閃電強度等值線是閃電活動規律中最基本的參數之一.閃電強度等值線繪制的關鍵部分是用閃電定位數據進行空間插值,生成連續的閃電強度柵格圖,再將閃電強度值相等的點連成強度等值線.本文中使用ArcEngine控件,基于已有數據進行空間插值,獲得全局空間范圍內各個點位的閃電強度.在Eclispe RCP的平臺上,主要通過閃電數據的加載、反距離加權插值、等值線提取等方法,搭建了閃電強度等值線的自動繪制模塊,將繪制的圖形導出.

圖1 閃電強度等值線自動繪制流程
將閃電原始數據經Java語言處理后導入到Oracle數據庫,利用sql語句從數據庫中查詢出某區域的閃電強度數據,該數據包含經度、緯度、電流強度,然后將閃電數據加載到shp圖層,繪制閃電強度等值線的技術流程圖如圖1所示.
其中:①利用Java語言處理閃電數據時要對數據進行質量控制,剔除小于10 kA以及大于300 kA的正閃電數據;②Oracle數據庫按省份建立了全國的閃電資料數據庫,在數據的導入與輸出的過程中,選中江蘇省,然后利用南京地區的經緯度初步篩選出南京地區的閃電數據;③將統計出的數據轉換成ArcGIS支持的dbf文件,有經度、緯度、電流強度3個字段;④將基數據加載到閃電強度數據圖層;⑤選用反距離加權插值方法,對關聯后的閃電強度數據圖層的電流強度字段進行插值,生成閃電強度等值線[4-5].
2.1反距離加權插值法的含義反距離加權插值IDW(Inverse Distance Weighted Interpotation),也可以稱為距離倒數乘方法.
距離倒數乘方格網化方法是一個加權平均插值法,可以進行確切的或者圓滑的方式插值.方次參數控制著權系數如何隨著離開一個格網結點距離的增加而下降.對于一個較大的方次,較近的數據點被給定一個較高的權重份額,對于一個較小的方次,權重比較均勻地分配給各數據點.

(1)
(2)
IDW通過對鄰近區域的每個采樣點值平均運算獲得內插單元值.IDW是一個均分過程,這一方法要求離散點均勻分布,并且密集程度足以滿足在分析中反映局部表面變化[5].
距離倒數法的特征之一是在格網區域內產生圍繞觀測點位置的“牛眼”.用距離倒數格網化時可以指定一個圓滑參數.大于零的圓滑參數保證,對于一個特定的結點,沒有哪個觀測點被賦予全部的權值,即使觀測點與該結點重合也是如此.圓滑參數通過修勻已被插值的格網來降低“牛眼”影響.
2.2ArcGISEngine中反距離加權插值法中的參數設置在ArcGIS Engine中實現反距離加權插值主要分為以下4步:
1)設置插值的字段名.通過IDW接口的setZField方法設置需要插值的字段.
2)設置柵格分析環境,即輸出結果的柵格大小,默認情況下為插值的點圖層所占據范圍的寬度或高度(取寬度和高度中的較小值)的1/250,也可以根據實際情況手動設置輸入輸出柵格大小.需要用到IDW接口的setCellSize()方法[5-6].
3)設置搜索半徑類型,提供了可變值和固定值兩種方式,用來確定進行插值的樣本點的個數,即確定用待插點周圍多少個樣本點進行插值.當選擇可變值時,需要為其設置插值的樣本點個數,其取決于插值單元周圍樣本點的密度,密度越大,半徑越小,實現可變搜索半徑需要用到IDW接口的setVariable()方法.當選擇固定值時,給搜索半徑設置一個固定的值和搜索半徑.搜索半徑是一個常數,對每一個插值單元來說,用于尋找樣本點的圓形區域的半徑都是一樣的.如果搜索半徑距離內的點個數小于插值點個數的最小整數值,則搜索半徑自動增大,實現固定搜索半徑需要用到IDW接口的setFixed()方法[5-6].
4)設置柵格分析環境和搜索半徑后就可以對樣本點進行插值.用IInterpolationOp的IDW 方法實現反距離加權插值.該方法需要的參數分別為:IGeoDataset geoData,geoData為進行插值的點狀要素,需要為其指定插值的字段;Double power,power 為距離的冪,冪是一個正整數,一般設置為2.IDW方法返回一個IGeoDataset地理數據集,然后將其轉成IRaster,即得到插值后的閃電強度柵格圖[7].
3.1閃電強度數據加載生成shp文件將從閃電數據庫中查詢出的閃電數據加載生成shp文件,在點數據的加載過程中主要用到了BufferedReader、IFeatureCursor、IFeatureBuffer等接口,BufferedReader從文件中讀出數據,先將點數據加載IFeatureBuffer的對象,然后把其加載到IFeatureCursor的對象,最后該對象調用flush()方法刷空.其關鍵代碼如下:
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閃電強度數據的插值閃電強度數據加載后,利用ArcGIS Engine IInterpolationOp接口的IDW方法實現反距離加權插值,關鍵代碼如下,其中參數inFeatures為加載后的shp文件的路徑;Output 為柵格文件的輸出路徑;Value為閃電強度數據的閃電強度值,CellSize參數由圖片的大小決定,根據前面的分析將power參數設置為2.
interpolationOp.setInPointFeatures(inFeatures);
interpolationOp.setOutRaster(Output);
interpolationOp.setZField("Value");
interpolationOp.setCellSize(new Double(LightningData2Image.cellsize));
interpolationOp.setPower(2);
3.3等值線的提取利用ArcGIS Engine的Contour接口對插值后的柵格圖生成等值線,關鍵代碼如下,其中的參數inFeatures為插值后得到的閃電強度柵格圖,ContourInterval設置等值線的間隔,Output為輸出的等值線,BaseContour代表等值線從0開始繪制.
contour.setInRaster(inFeatures);
contour.setContourInterval(10);
contour.setOutPolylineFeatures(Output);
contourtool.setBaseContour(0);
3.4等值線的出圖利用ArcGIS Engine的PageLayoutControl、IMapGrid、IGridLabel等接口完成圖形的自動輸出,IMapGrid用于添加經緯度網格,IGridLabel用于添加標簽.部分關鍵代碼如下,其中的參數deviceRect用于設置圖片的大小,pageLayoutControl獲取當前活動的視圖,export對象負責閃電強度等值線圖片的輸出.
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南京地區氣候與環境南京地區的主要范圍介于:東經118.34°E~119.24°E 、北緯31.24°N~32.61°N之間.大部分是低山丘陵,面積4 255.07 km2,江河面積752.06 km2,地處中緯,屬亞熱帶季風氣候,秋天干燥涼爽,冬季寒冷、干燥.每年6月起3~4個月內為南京的主汛期.在汛期里,強對流活動頻繁,雷電活動也相對頻繁.每日午后地表吸收太陽能增溫至峰值,近地層空氣溫度也很高,暖空氣膨脹上升,易產生強對流,直到傍晚太陽落山時才有所緩解.

圖2 閃電數據入庫

圖3 閃電數據的查詢

圖4 閃電數據的管理

圖5 閃電強度等值線
4.2閃電強度等值線的自動繪制技術的應用閃電強度分布是雷電災害風險區劃的量化指標之一.為了更好地研究閃電強度的分布,本系統使用Eclipse RCP(Rich Client Platform,富客戶端平臺)技術搭建,選用優秀的Java語言開發,以Eclipse開發平臺為基礎,建立了全國的閃電資料Oracle10 g數據庫,在數據導入到數據庫時,需要選擇對應的省份及閃電定位儀型號,如圖2所示,并加入了Job后臺任務處理機制.由于在非UI線程里面不能直接進行UI處理,使用Display.getDefault().asyncExec(new Runnable())進行UI彈出對話框處理,數據在導入的過程中不會出現假死機的現象,給用戶很好的體驗效果.將江蘇省的數據導入完畢后,利用數據庫查詢模塊,可以查看閃電數據的起止時間,根據起止時間查看閃電數據的條數等,如圖3所示.在某些特殊情況下,如某些數據重復導入了,利用閃電數據庫的管理模塊將該省份的所有數據刪除,然后再重新導入.
繪制南京地區的閃電強度等值線時,系統會根據統計數據的起止時間查詢出該地區的所有閃電數據,主要包含閃電時間、經緯度、強度等信息,并且將其寫入到文本文件.數據自動加載后生成了點圖層的shp文件,通過反距離加權插值方法自動繪制出閃電強度等值線,然后利用南京地區的地圖掩膜出該區域的等值線,通過掩膜就可以把地圖以外的數據剔除,只保留地圖內部的數據.繪制出的等值線需要通過pageLayoutControl獲取當前活動的視圖,然后將其導出(支持jpg、tiff、emf、gif等),如圖5所示,在配置項可以添加圖名、圖例、單位、指北針、比例尺,還可以調整網格大小,最后輸出圖形即可得到南京地區的閃電強度等值線.
本文中運用Oracle數據庫統計出南京地區的閃電數據,利用ArcGIS Engine 提供的空間插值方法分析了閃電強度等值線的自動繪制步驟并給出了關鍵步驟的主要程序代碼,其設計實現了閃電強度等值線的自動繪制模塊,該模塊在南京地區地理信息系統中得到應用并取得了較好的效果,該技術方法也為其他地區閃電強度等值線的自動繪制提供了較強的參考價值[8-9].
在實際的應用中,如果沒有shp格式地圖,等值線區域將是一個矩形區域.為了更好地結合地圖繪制等值線,可以結合Google Map做進一步的開發,由Google Map提供地圖,便可繪制出更漂亮的閃電強度等值線.
[1] 李井岡,姚運生,李賢華,等.在MapInfo中實現等值線圖區域填充的快速算法[J].計算機工程與設計,2009,30(7):1780-1783.
[2] 宋麗瓊,田原,鄔倫,等.日降水量的空間插值方法與應用對比分析——以深圳市為例[J].地球信息科學,2008,10(5):566-572.
[3] 方書敏,錢正堂,李遠平.甘肅省降水的空間內插方法比較[J].干旱區資源與環境,2005,19(3):47-50.
[4] 孟慶香,劉國彬,楊勤科.黃土高原降水量的空間插值方法研究[J].西北農林科技大學學報:自然科學版,2006,34(3):83-88.
[5] 湯國安,楊昕.ArcGIS地理信息系統空間分析實驗教程[M].北京:科學出版社,2006:4.
[6] 范銀貴.空間插值方法在繪制降水量等值線中的應用[J].水利水電科技進展,2002,22(3):48-50.
[7] 李新,程國棟,盧玲.空間內插比較[J].地球科學進展,2000,15(3):260-265.
[8] 朱求安,張萬昌,余鈞輝.基于GIS 的空間插值方法研究[J].江西師范大學學報:自然科學版,2004,28(2):183-188.
[9] 李朝奎,陳良,王勇.降雨量分布的空間插值方法研究——以美國愛達荷州為例[J].礦產與地質,2007,21(6):684-687.