張云輝+張若飛+朱東旭+裴彪+黃猛
摘要:文章根據(jù)WEBGIS的工作原理,在WEBGIS基礎(chǔ)平臺上,采用計算機網(wǎng)絡(luò)和數(shù)據(jù)庫管理技術(shù),對大慶市的基礎(chǔ)公共設(shè)施數(shù)據(jù)進(jìn)行采集、存儲、管理、分析、計算和圖形處理顯示,以百度地圖作為互聯(lián)網(wǎng)地理系統(tǒng)的底圖進(jìn)行開發(fā),設(shè)計大慶市災(zāi)害預(yù)測信息平臺,實現(xiàn)對基礎(chǔ)公共設(shè)施數(shù)據(jù)的算法分析模擬情況。該系統(tǒng)的構(gòu)建為大慶市的震害預(yù)測情況提供可靠的數(shù)據(jù)分析。
關(guān)鍵詞:GIS,地震,震害預(yù)測,研究
隨著社會經(jīng)濟的高速發(fā)展,人民生活質(zhì)量的提升,城市的建設(shè)也越來越趨于完善,在此社會現(xiàn)狀和背景下,迫切需要一套評定和提高城市抗震防災(zāi)能力加強地震關(guān)鍵技術(shù)研究,采取有效措施減少地震損失,因此,我們決定采用IT+GIS的方式設(shè)計一套針對此情況的實時性信息系統(tǒng)。
廊坊市震害預(yù)測系統(tǒng)是本系統(tǒng)采用B/S系統(tǒng)架構(gòu),基于GIS空間數(shù)據(jù)庫、坐標(biāo)轉(zhuǎn)換技術(shù)、GIS空間分析技術(shù)和PHP開發(fā)技術(shù),應(yīng)用震害因子算法預(yù)測不同強度地震災(zāi)害條件下城市的受損程度及空間分布并進(jìn)行二維可視化顯示、綜合查詢分析和高效的輔助決策功能,確定城市抗震薄弱環(huán)節(jié)并快速預(yù)警。本文詳細(xì)介紹了本系統(tǒng)的開發(fā)過程。
一、系統(tǒng)分析
大慶市震害預(yù)測系統(tǒng)的系統(tǒng)功能結(jié)構(gòu)圖如圖1所示。它的工作流程是根據(jù)大慶市地質(zhì)災(zāi)害分布及危險度、建筑物和建筑設(shè)施的基本情況(包括名稱、空間分布、結(jié)構(gòu)類型、目前工作狀態(tài)等),建立了大慶市地震震害預(yù)測空間數(shù)據(jù)庫,采用MVC設(shè)計模式+CI框架,結(jié)合GIS空間分析應(yīng)用模型和地震工作基本原理,對地震災(zāi)害破壞程度及空間分布做出預(yù)測,實現(xiàn)城市防震減災(zāi)工作中由靜態(tài)規(guī)劃到動態(tài)管理的轉(zhuǎn)變。
二、系統(tǒng)設(shè)計與實現(xiàn)
大慶市震害預(yù)測系統(tǒng)是基于PHP CI框架+MYSQL數(shù)據(jù)庫+百度地圖接口+ARCGIS Shp圖層(進(jìn)行投影轉(zhuǎn)換)進(jìn)行開發(fā)的,充分利用GIS工具軟件對空間數(shù)據(jù)庫的處理,分析功能,提高了應(yīng)用系統(tǒng)的開發(fā)效率,開發(fā)出的系統(tǒng)具有良好的外觀效果,強大的底層數(shù)據(jù)庫,可靠性良好,移植性強,易于維護(hù)。
(一)CI框架的選取
如果在IT系統(tǒng)建設(shè)過程中缺乏總體架構(gòu)和規(guī)劃,系統(tǒng)將在管理上面臨眾多的挑戰(zhàn)。比如:業(yè)務(wù)越來越復(fù)雜,IT系統(tǒng)越來越龐大,檢查一個錯誤就需要在整個項目中查找;不清楚IT系統(tǒng)中各個模塊的現(xiàn)狀,更談不上合理規(guī)劃新的功能;系統(tǒng)難以維護(hù)等問題。因此,一個適用的框架是非常重要的。
CodeIgniter(CI)是一個小巧但功能強大的 PHP 框架,作為一個簡單而“優(yōu)雅”的工具包,它可以為開發(fā)者們建立功能完善的 Web 應(yīng)用程序。它有如下特點:
1. 小巧的框架,CodeIgniter 3包括用戶手冊的安裝包僅有 2MB 大小。
2. 出色的性能,CodeIgniter 的性能始終優(yōu)于大多數(shù)同類框架。
3. 沒有大規(guī)模集成類庫,CodeIgniter 不是一個大而全的框架。在保持簡潔的同時提供足夠強大的功能來提高你的生產(chǎn)力,在此基礎(chǔ)之上也有許多第三方擴展為你提供更多功能。
4. 幾乎 0 配置,CodeIgniter 奉行約定勝于配置的理念(例如把模型文件放到“models“文件夾中)。當(dāng)用戶希望修改配置的時候,在“config“文件夾中有許多配置項供用戶修改。
5. 廣泛兼容各種主機環(huán)境,CodeIgniter
3只需 PHP 5.3.7 版,幾乎可以運行在任何虛擬主機或云平臺上。對于需要數(shù)據(jù)庫的 Web 應(yīng)用來說,CodeIgniter 支持包括 MySQL 在內(nèi)的大多數(shù)常見數(shù)據(jù)庫。由于本系統(tǒng)經(jīng)過測試后要部署在大慶市自己的服務(wù)器上,因此兼容性強是選擇本框架的核心。
基于以上優(yōu)點,CI框架非常適合本系統(tǒng)的開發(fā)。
基于CI框架,系統(tǒng)的主界面通過選擇xx數(shù)據(jù)集,可以進(jìn)行分類數(shù)據(jù)的相應(yīng)的展示,這里用到了百度地圖的BMAP.POINT對后臺數(shù)據(jù)進(jìn)行集成,使用icon類進(jìn)行點顏色的選擇,并且設(shè)置了圖形的透明度等屬性,以求給用戶一個大方美觀的界面。
系統(tǒng)的主界面如圖2所示。
(二)空間數(shù)據(jù)庫設(shè)計
基于任何一個GIS系統(tǒng)的核心都是數(shù)據(jù)庫的建設(shè),由于本系統(tǒng)要對城市的抗震能力進(jìn)行分析,因此不僅要包含基礎(chǔ)的行政區(qū)劃圖、建筑物統(tǒng)計信息表等(其中包含了建筑物類型、空間分布、結(jié)構(gòu)類型、抗震設(shè)防、目前工作狀態(tài)等30余項內(nèi)容)基礎(chǔ)地理信息,還要包含生命線(鐵路、公路、水系、橋梁、水管、電線、煤氣管線、暖氣管線)等基礎(chǔ)信息,經(jīng)過半年多的前期調(diào)研,整個基礎(chǔ)信息數(shù)據(jù)文件有13.4GB之多,這么多的數(shù)據(jù)如果不能給他們進(jìn)行清晰的按類劃分,對于程序員的后期開發(fā)將會產(chǎn)生災(zāi)難性的后果,因此項目組依據(jù)前期所調(diào)查出來的結(jié)果,把所有數(shù)據(jù)按照類型分為三大類(公共基礎(chǔ)數(shù)據(jù)、生命線數(shù)據(jù)、地理信息數(shù)據(jù))近200張表。如圖3、圖4所示。
三、數(shù)據(jù)查詢
有了數(shù)據(jù)庫,那么下一步就是提供給用戶方便的查詢功能,據(jù)百度大數(shù)據(jù)統(tǒng)計,在所有的IT用戶中,85%以上的用戶每天適用最頻繁的就是查詢功能。為了方便用戶本系統(tǒng)提供了精確查詢和模糊查詢2個功能。尤其是模糊查詢,是本系統(tǒng)的一個特色,為了在模糊查詢時能精確查找出所有匹配的建筑,項目組對數(shù)據(jù)庫中的建筑物所在位置字段進(jìn)行了重新定義,把原來的一個字段分解為了5個字段(建筑物所在的(市)字段,(轄區(qū)/縣/胡同)字段,(街道/鄉(xiāng)鎮(zhèn))字段,(小區(qū)名/村名/單位名)字段,(樓號)字段。),并且重寫了search類進(jìn)行實現(xiàn)。雖然增加了工作量,但是對于后期的系統(tǒng)開發(fā)卻大大提升了效率,效果如圖5所示。endprint
(一)地震烈度算法的選擇
本系統(tǒng)提供圓形模型和線性模型兩種烈度算法給用戶提供選擇,在進(jìn)行相應(yīng)的參數(shù)輸入后,進(jìn)行計算,然后用戶選擇添加想要分析的數(shù)據(jù),系統(tǒng)經(jīng)過一系列的比對算法之后,會給用戶呈現(xiàn)出不同顏色的數(shù)據(jù)集。
此部分是整個系統(tǒng)的核心部分,在計算機行業(yè)中有一句話叫:數(shù)據(jù)的呈現(xiàn)是軟件,程序的靈魂是算法;為此專門設(shè)計了一個烈度圖的類intensityShow。
在此類中共有三個方法intensityRArray,drawOval, ovalPoint.
1. 根據(jù)烈度返回距離 intensityRArray方法
此方法根據(jù)沙海軍提出的衰減模型進(jìn)行距離的選擇和判斷,根據(jù)相應(yīng)計算出的烈度,然后進(jìn)行距離的選擇,以確定長短軸。
2. 繪制橢圓 drawOval方法
此處調(diào)用百度地圖的BMAP. Polygon方法進(jìn)行覆蓋物的繪制,這樣就可以和百度地圖進(jìn)行對接,使得功能在百度地圖上展示出來。
3. 計算烈度圈的點 ovalPoint方法
此方法是核心的算法,因為百度地圖BMAP. Polygon方法要求的是一個裝有經(jīng)緯度數(shù)據(jù)點的數(shù)組,因此,計算相應(yīng)的數(shù)據(jù)點就成為了此算法的核心部分,根據(jù)橢圓的標(biāo)準(zhǔn)公式和直線的點斜式公式,依次對橢圓上180度的點進(jìn)行計算,分別在四個區(qū)間內(nèi)進(jìn)行分別處理,這樣我們就可以得到經(jīng)過計算的360個點。
a^2=b^2+c^2長短軸之間的關(guān)系(1)
F1P+F2P=2a橢圓上任意一點到兩焦點之間的距離相等(2)
x^2/a^2+y^2/b^2=1 x軸的橢圓標(biāo)準(zhǔn)方程(3)
y=kx+b(默認(rèn)過橢圓圓心,因此b值為0) (4)
我們模擬這條線從0度開始,持續(xù)選擇180度,在每一度進(jìn)行計算,因此,我們沒一度都可以得到第一(第二)象限,第三(第四)象限的坐標(biāo)點,逐次計算,最終得到360個橢圓的邊界點。
但是這里面還有兩個核心的問題沒有解決。
1. 如何得到這個長軸的點呢?因為它使用的是經(jīng)緯度的單位,所以就得使用經(jīng)緯度的坐標(biāo)進(jìn)行轉(zhuǎn)換,但是百度地圖的投影和我們?nèi)粘J褂玫耐队巴耆灰粯樱绻麖娦惺褂脛t會產(chǎn)生較大誤差,所以必須利用百度的相應(yīng)接口進(jìn)行間接的坐標(biāo)計算,因此我使用了縮進(jìn)方法,每次以極微弱的經(jīng)緯度差距在同一經(jīng)度(緯度)進(jìn)行向前尋找,以距離為限制條件,一旦搜索到和距離相匹配的點,則就選中這個點,那么這個問題就解決了
for(vari=0.0000;i var bLat = centre.lat+i; bPoint = new BMap.Point(centre.lng,bLat); if(map.getDistance(centre,bPoint).toFixed(0)==b.toFixed(0)*1000){//在這個經(jīng)度下尋找距離為b的點 bPointLat = bLat; break; } } 2. 如何將繪制好的橢圓進(jìn)行旋轉(zhuǎn)呢? 在線性代數(shù)中,坐標(biāo)相對位置的轉(zhuǎn)換可以看成矩陣的變換,則使用向量法,將每一個點的坐標(biāo)向同一方向進(jìn)行偏移,最終實現(xiàn)了橢圓的旋轉(zhuǎn)。 var x=Math.abs(lng*Math.cos(angle)); var y=Math.abs( lng*Math.sin(angle))。 (二)建筑物震害評估 由于大慶市有數(shù)萬棟建筑,因此在計算時本系統(tǒng)采用基于網(wǎng)格計算的震害因子法。并基于不同的震級給出不同的建筑物受損情況。 如何在現(xiàn)有的極少的數(shù)據(jù)下進(jìn)行拓展查詢呢?這些數(shù)據(jù)并沒有被調(diào)查到,只能最大程度的去模糊搜索這些數(shù)據(jù),策略是若某一棟被搜索的建筑并沒有數(shù)據(jù),那么我們就查找它在哪一個區(qū)域,因為這個區(qū)域的屬性應(yīng)該是一樣的,我們就默認(rèn)這個區(qū)域的宏觀屬性是所查找建筑的詳細(xì)屬性,這樣,即使數(shù)據(jù)不全,我們也可以對整個城市的建筑群,進(jìn)行一個客觀的評估。 圖7是經(jīng)過計算分析的經(jīng)濟損失是否達(dá)到震害損失合格線的效果圖。 (三)圖表繪制 經(jīng)上述算法和相關(guān)計算,將各種破壞情況下的數(shù)據(jù)統(tǒng)計繪制出來。 此圖表的繪制主要使用EChart進(jìn)行實現(xiàn),主要調(diào)用Echart的EChart.setOption()方法進(jìn)行圖標(biāo)繪制, EChart.title()設(shè)置標(biāo)題,EChart.tooltip()設(shè)置工具信息,EChart.legend()設(shè)置x軸坐標(biāo)信息,EChart.series設(shè)置數(shù)據(jù)比例值,這樣數(shù)據(jù)圖表就渲染和制作完成。 (四)截圖繪圖PPT&&WORD快速產(chǎn)出 在整個系統(tǒng)流程中我們設(shè)計了一套流程進(jìn)行模擬分析,設(shè)置模擬地震,選擇分析數(shù)據(jù)集,進(jìn)行餅狀圖繪制,導(dǎo)出PPT&&WORD,在此過程中,我們在關(guān)鍵流程位置進(jìn)行自動截圖,這在我們點擊事件中點擊觸發(fā),但是并不影響用戶對本系統(tǒng)使用,截圖時是每次成圖的界面進(jìn)行自動截圖,然后將這些圖片早生成word時自動導(dǎo)入到word中,這樣達(dá)到快速產(chǎn)出的功能。 此功能需要調(diào)用office的接口,為此我們專門寫了一個類,PowerPointExport進(jìn)行實現(xiàn),在此類中,我們把引用office如下方法getProperties.createTemplatedSlide實現(xiàn)每一頁模版的創(chuàng)建;getProperties. createRichTextShape實現(xiàn)創(chuàng)建文本的樣式;getProperties. setHorizontal實現(xiàn)創(chuàng)建偏移量的設(shè)定;getProperties.createTextRun實現(xiàn)繪制文本框;getProperties.setPath實現(xiàn)路徑的保存;getProperties.setDescription實現(xiàn)背景的渲染等一系列近20種方法進(jìn)行修飾,這里不再一一贅述。效果如圖10所示。 四、結(jié)論與展望 本系統(tǒng)利用IT+GIS技術(shù),實現(xiàn)了對公共數(shù)據(jù)的分享,分析,與發(fā)布,方便業(yè)內(nèi)人士進(jìn)行數(shù)據(jù)分析,該系統(tǒng)的開發(fā)希望可以讓業(yè)內(nèi)人士避免在數(shù)據(jù)的繁雜中尋找自己想要的可用數(shù)據(jù),方便了人們的日常工作,同時由于本系統(tǒng)在數(shù)據(jù)庫維護(hù),GIS空間數(shù)據(jù)抽取算法中還有一些問題,在今后的研發(fā)過程中將做進(jìn)一步的修改和優(yōu)化。 參考文獻(xiàn): [1]汪素云.中國分區(qū)地震動衰減關(guān)系的確定[J].中國地震,2000(02). [2]姜開興.城市抗震減災(zāi)策略[J].中國減災(zāi),2007(11). [3]李淑貞.地震災(zāi)害評估[M].地震出版社,2006. *基金項目:2016年國家級大學(xué)生創(chuàng)新創(chuàng)業(yè)訓(xùn)練計劃項目——基于GIS的大慶市震害分析模擬系統(tǒng)(201611775029);中央高?;究蒲袠I(yè)務(wù)費專項資金創(chuàng)新團隊資助計劃項目(ZY20110102)。 (作者單位:防災(zāi)科技學(xué)院)