導航:首頁 > 編程語言 > 程序庫的實現

程序庫的實現

發布時間:2024-09-02 10:07:48

程序實現

(一)實現思路

要實現土壤環境質量評價,首先要整理好評價數據,主要包括表層土壤有機污染物分析數據圖層、表層土壤地球化學全量分析數據圖層及表層土壤采樣數據圖層3個,統一格式和投影,並存放在資料庫中;用戶可根據許可權自動載入數據,並設置參數(如區塊顏色、評價指標、評價因子、模型庫等)直接進行評價,評價的結果可用報表或色塊圖輸出,關鍵在於模型庫的建立,具體按如下流程建立。

(1)「一票否決法」評價模塊

第一步,首先連接SQL Server資料庫,載入3個數據圖層,分別是表層土壤有機污染物分析數據圖層、表層土壤地球化學全量分析數據圖層及表層土壤采樣數據圖層。

第二步,遍歷表層土壤地球化學全量分析數據點,讀取pH、Cd、Hg、As、Cu、Pb、Cr、Zn、Ni欄位對應的值,先判斷該點的pH值區間范圍,根據此pH 值范圍判斷Cd、Hg、Pb、Zn、Ni元素含量是否超標,如果超標則表示該評價單元不合格,否則從表層土壤采樣數據圖層中讀取該點的4個采樣點的屬性欄位(「土地利用」)的值,如果4個采樣點的土地利用情況均為13(水澆地),則As、Cu、Cr 3個重金屬元素使用旱地的標准,再做是否超標的判斷,如果沒有超標則轉用下一步再做判斷。

第三步,根據該點的位置讀取表層土壤有機污染物分析數據圖層中相應的土壤有機污染物分析測試數據,判斷pH值區間范圍確定DDT和六六六的標准值,最後得出該點是否超標。

(2)單元素污染指數評價模塊

第一步,首先連接SQL Server資料庫,載入3個數據圖層,分別是表層土壤有機污染物分析數據圖層、表層土壤地球化學全量分析數據圖層及表層土壤采樣數據圖層。

第二步,獲取要進行評價的評價因子(如Hg)。

第三步,遍歷表層土壤地球化學全量分析數據點,分別讀取pH、Hg欄位對應的值,先判斷某點的pH值區間范圍,根據此pH值范圍判斷Hg元素的評價標准值(SHg),當然也可以區域背景平均值、平均值加2(3)倍標准差為評價標准,將該點的實測值與評價標准值(SHg)相除,即為該Hg元素的污染指數。

如果選取的是As、Cu、Cr 3個元素,則還要進一步根據表層土壤采樣數據圖層中的「土地利用」欄位值來判斷元素的評價標准值(S)。

如果選取的是DDT和六六六2個指標,則要遍歷表層土壤有機污染物分析數據點,讀取pH、DDT(或六六六)的欄位值,根據其pH值區間范圍確定DDT(或六六六)的標准值,同樣該點的實測值與評價標准值(S)相除,即為該DDT(或六六六)的污染指數。

第四步,根據單元素污染指數值分等定級土壤質量,一般(默認)採用如下標准:

單因子污染指數<1,為非污染區;

單因子污染指數介於1~2之間,為輕污染;

單因子污染指數介於2~3之間,為中度污染;

單因子污染指數大於3,為重度污染。

(3)內梅羅(Nemrow)綜合污染指數評價模塊

第一步,首先連接SQL Server資料庫,載入3個數據圖層,分別是表層土壤有機污染物分析數據圖層、表層土壤地球化學全量分析數據圖層及表層土壤采樣數據圖層。

第二步,遍歷表層土壤有機污染物分析數據點,按照上述的單元素污染指數評價模塊分別計算DDT、六六六的污染指數值。

第三步,遍歷表層土壤地球化學全量分析數據點,按照上述的單元素污染指數評價模塊分別計算Cd、Hg、As、Cu、Pb、Cr、Zn、Ni的污染指數值。同時將表層土壤有機污染物分析數據點所控制的范圍(64km2)與表層土壤地球化學全量分析數據點做布爾運算,計算DDT、六六六、Cd、Hg、As、Cu、Pb、Cr、Zn、Ni的污染指數平均值和最大值。

第四步,根據內梅羅公式,計算每個評價單元(4km2)的綜合污染指數值。

第五步,根據綜合污染指數值分等定級土壤質量,默認可參考農業部農田土壤環境質量監測技術規范(NY/T 395—2000)(表7-4)。

表7-4 農田土壤環境質量分級標准

(二)關鍵代碼

Option Explicit

Option Compare Text

Private tpjstr As String"評價類型

Private Const bzdict ="土壤環境質量標准值"'土壤環境質量標准值

Private m_curpic As PictureBox'當前的顏色框

Public m_map As MapObjects2.map'傳入的地圖控制項

Private m_lyr As MapObjects2.maplayer'評價的圖層

Public m_Is單 As Boolean'是否是單因子評價

'*************評價子過程**********************************************

Private Sub cmd評價_Click()

Dim OldPrj As Object

On Error GoTo ERR

Dim t元素err As Long

Set OldPrj=m_map.CoordinateSystem

GetDefPrj 120.5,m_map'投影到浙江預設投影

Dim Tscale As Double""載入數據單位與評價標准單位之間倍率

Dim tpolycols As Collection

Dim i As Long

Dim t元素污染 As C元素含量

Dim t元素 As String

Dim tlyr As MapObjects2.maplayer

Dim tmrd As MapObjects2.RecordSet

Dim t元素cols As Collection

Dim j As Long

Dim t評價目標 As String

If m_Is單 Then

t評價目標 ="重金屬單因子污染評價"

Else

t評價目標 ="重金屬綜合污染評價"

End If

Dim dirname As String

dirname=m_配置.GetKey配置(m_配置文件,"臨時路徑")'獲得評價輸出路徑

Set tlyr=CreateshpByName(m_map,dirname,t評價目標)'創建評價圖層

If tlyr Is Nothing Then Exit Sub

Set t元素cols=get元素cols

Set tpolycols=Get評價單元(m_map,m_lyr.name,1000)'獲得評價單元集合

Set tmrd=tlyr.Records

tmrd.AutoFlush=False"防止每次修改操作自動引發對數據文件的寫入操作

Dim t污染 As Single"污染指數

Dim tI和 As Single"污染指數的總和

Dim MaxI As Single"污染指數的最大值

Dim newshp As MapObjects2.Polygon

Dim ttdlx As String"土壤質量等級

MaxI=0

Dim tprg As New CProgress

For i=1 To tpolycols.count

tprg.Value=100*i/tpolycols.count'設置進度

Set newshp=UnProjected(m_map,m_lyr,tpolycols(i))

If m_Is單 Then'單因子評價

Tscale=getScale(cmb元素)

Set t元素污染=get單因子污染指數(tpolycols(i),cmb元素,Tscale)

If Not t元素污染 Is Nothing Then

校檢數據,並給出錯原因.

代碼略

tmrd.AddNew

tmrd.Fields("shape").Value=newshp

tmrd.Fields("元素名稱").Value=t元素污染.元素名稱

t污染=t元素污染.污染指數

ttdlx =""

If t污染<T指標(0)Then"根據指標定級定色,T指標()為單因子分級標准值

ttdlx=Labcolor(0).Tag

ElseIf t污染>=T指標(0)And t污染 < T指標(1)Then

ttdlx=Labcolor(1).Tag

ElseIf t污染>=T指標(1)And t污染 < T指標(2)Then

ttdlx=Labcolor(2).Tag

ElseIf t污染>=T指標(2)Then

ttdlx=Labcolor(3).Tag

End If

If ttdlx <>""Then

ttdlx=Mid(ttdlx,2)

End If

tmrd.Fields("土壤質量").Value=ttdlx""評價結果寫入評價圖層文件的屬性表

tmrd.Fields("污染指數").Value=t污染

tmrd.Fields("實測值").Value=t元素污染.實測值

tmrd.Fields("背景值").Value=t元素污染.背景值

tmrd.Update

End If

Else'綜合評價

MaxI=0

tI和=0

For j=1 Tot元素cols.count

Tscale=getScale(t元素cols(j))

Set t元素污染=get單因子污染指數(tpolycols(i),t元素cols(j),Tscale)

If Not t元素污染 Is Nothing Then

tI和=tI和 + t元素污染.污染指數

If t元素污染.污染指數>MaxI Then

MaxI=t元素污染.污染指數""計算所有該點元素污染指數的最大值

End If

End If

Next

t污染 =((tI和/t元素cols.count)^2 + MaxI ^2)/2""內梅羅公式

t污染=Sqr(t污染)"根據內梅羅公式計算綜合污染指數

tmrd.AddNew

tmrd.Fields("shape").Value=newshp

If t污染<T指標(4)Then"根據指標定級定色,T指標()的值為綜合分級標准

tmrd.Fields("土壤質量").Value=Labcolor(4).Tag

ElseIf t污染>=T指標(4)And t污染 < T指標(5)Then

tmrd.Fields("土壤質量").Value=Labcolor(5).Tag

ElseIf t污染>=T指標(5)And t污染 < T指標(6)Then

tmrd.Fields("土壤質量").Value=Labcolor(6).Tag

ElseIf t污染>=T指標(6)And t污染 < T指標(7)Then

tmrd.Fields("土壤質量").Value=Labcolor(7).Tag

ElseIf t污染>=T指標(7)Then

tmrd.Fields("土地類型").Value=Labcolor(8).Tag

End If

tmrd.Fields("污染指數").Value=t污染ˊˊˊ評價結果寫入評價圖層文件的屬性表

tmrd.Update

End If

Next

Set tmrd=Nothing

Set tlyr=Nothing

Dim t評價目標Lyr As MapObjects2.maplayer

'把評價結果加入到當前地圖

Set t評價目標Lyr=addShapeFile(m_map,dirname & t評價目標)

Set m_map.CoordinateSystem=OldPrj

Set GClipPoly_prj=Projected(m_map,GClipPoly_unprj)

If Not t評價目標Lyr Is Nothing Then

m_map.Layers.MoveToBottom GetLyrIndex(m_map,t評價目標Lyr.Tag)

End If

tpjstr=dirname & t評價目標

ERR:

Set tmrd=Nothing

Set tlyr=Nothing

Set t評價目標Lyr=Nothing

End Sub

'*************計算單因子污染指數******************************************

Private Function get單因子污染指數(tpoly As MapObjects2.Polygon,t元素名稱 As String,Tscale As Double)As C元素含量

Dim trd As MapObjects2.RecordSet

Dim tmpoly As MapObjects2.Polygon

Dim t元素 As String

t元素=Get元素化學名稱(t元素名稱)翻譯元素化學名稱

Set tmpoly=UnProjected(m_map,m_lyr,tpoly)""'返回投影前的圖形

Set trd=m_lyr.SearchShape(tmpoly,moAreaIntersect,"")""'返回符合空間查詢條件的記錄集

If returnRdEof(trd)Then""返回查詢集是否建立.如假則表示沒建立,退出

Exit Function

End If

Dim t利用現狀 As String

Dim tpH值 As String

Dim t元素含量 As Single

判斷pH值區間范圍

t元素含量=trd.Fields("PH").Value

If t元素含量 <=6.5 Then

tpH值 ="<6.5"

Else

If t元素含量 <=7.5 Then

tpH值 ="6.5-7.5"

Else

tpH值 =">7.5"

End If

End If

t利用現狀=Get利用現狀(tpoly)""返回土地利用現狀,水田或旱地

Dim t評價標准 As String

Dim thl As String

thl=trd.Fields(t元素).Value

If IsNumeric(thl)= False Then

Exit Function

End If

Set get單因子污染指數=New C元素含量

t評價標准=get評價標准(t元素名稱,tpH值,t利用現狀)"獲取評價標准

Get單因子污染指數.元素名稱=t元素名稱

Get單因子污染指數.背景值=t評價標准

Get單因子污染指數.實測值=thl*Tscale

Get單因子污染指數.污染指數=thl/t評價標准*Tscale

End Function

'***********獲取土地利用狀況**********************************************

Private Function Get利用現狀(tpt As MapObjects2.point)As String

Dim lyr As MapObjects2.maplayer

Dim trd As MapObjects2.RecordSet

Dim tQcstr As String

Dim 采樣Nums As Long,水田Nums As Long

Dim tmppoly As MapObjects2.Polygon

Dim tstr1 As String,tstr2 As String

If C_評價目標=土壤環境質量標准值 Or C_評價目標=綠色農產品產地評價 Then

Set lyr=getlyr評價(m_map,Optlyr(0).Caption)

If lyr.Records.Fields("cw").Type=moString Then

tstr1 ="cw='1"'

Else

tstr1 ="cw=1"

End If

If lyr.Records.Fields("LYXZ").Type=moString Then

tstr2 ="(LYXZ ='11'or LYXZ=13)"

Else

tstr2 ="(LYXZ=11 or LYXZ=13)"

End If

Dim tpoly As MapObjects2.Polygon

Dim tmppt As MapObjects2.point

Set tmppt=Projected(m_map,tpt,lyr)

Set tpoly=GetPolytByCentPt(tmppt,1000)

Set tmppoly=UnProjected(m_map,lyr,tpoly)

Set trd=lyr.SearchShape(tmppoly,moAreaIntersect,tstr1)

采樣Nums=ReturnNums(trd)

Set trd=lyr.SearchShape(tmppoly,moAreaIntersect,tstr1 +"and"+ tstr2)

水田Nums=ReturnNums(trd)

If 采樣Nums=0 Then

Get利用現狀 ="旱地"

Exit Function

End If

If 水田Nums/采樣Nums>=0.5 Then

Get利用現狀="水田"

Else

Get利用現狀 ="旱地"

End If

End If

End Function

(三)實例

選取「浙江省農業地質環境調查」項目中蕭山示範區1:5萬表層土壤單點樣測試分析數據、1:5萬表層土壤有機污染物分析數據圖層及1:5萬表層土壤采樣數據圖層作為示例數據。採用比較成熟的內梅羅綜合污染指數法,對蕭山示範區土壤環境質量現狀進行評價。通過土壤環境質量評價,劃分四級土壤(見圖版12),其中,Ⅰ級(安全區)占總面積的85.91%、Ⅱ級(警戒限區)佔9.73%、Ⅲ級(輕污染區)佔4.03%、Ⅳ級(中污染區)佔0.03%。Ⅰ類土壤集中分布於北塘河以北的廣大區域,這是蕭山最重要的土地資源分布區,在蕭山具舉足輕重的地位;Ⅱ類土壤集中分布於蕭山南部,分布比較零散,主要與人類活動有關;Ⅲ類土壤主要分布於蕭山城郊的新塘、來蘇與杜家一帶,與人為因素有關;Ⅳ類土壤主要分布在樓塔岩上一帶,影響其土壤環境質量的主要因素是礦化作用。

⑵ C#資料庫應用程序的開發流程有哪些

C#資料庫應用程序的開發流程一般包括以下步驟:

在開發過程中,還需要注意以下幾點:

閱讀全文

與程序庫的實現相關的資料

熱點內容
三菱觸摸屏視頻教程 瀏覽:132
建行app怎麼查卡 瀏覽:474
微軟平板開機密碼設置 瀏覽:978
linux刪除一行的快捷鍵 瀏覽:269
win10改hosts文件 瀏覽:354
數據博世怎麼樣 瀏覽:411
用tar解包沒有那個文件或目錄 瀏覽:307
錄歌教程 瀏覽:604
java小數進制轉換 瀏覽:270
80後qq頭像女生 瀏覽:388
word2013頁面顏色 瀏覽:661
linux系統安裝顯卡驅動 瀏覽:243
手機安卓培訓機構 瀏覽:819
英語版本的哈面寶寶 瀏覽:567
手機動態壁紙教學視頻教程 瀏覽:543
網路攝像機sip 瀏覽:757
湘潭編程學校哪裡好 瀏覽:389
win10設置桌面小圖標怎麼去掉嗎 瀏覽:122
網路安全創業 瀏覽:787
修改linux 瀏覽:464

友情鏈接