• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      SQL在森林資源二類調(diào)查數(shù)據(jù)整理中的應(yīng)用
      ——以廣西賀州市八步區(qū)項(xiàng)目為例

      2010-11-21 08:21:05劉建聰石軍南
      湖南林業(yè)科技 2010年5期
      關(guān)鍵詞:蓄積命令森林資源

      劉建聰,石軍南,徐 強(qiáng)

      (中南林業(yè)科技大學(xué), 湖南 長沙 410004)

      SQL在森林資源二類調(diào)查數(shù)據(jù)整理中的應(yīng)用
      ——以廣西賀州市八步區(qū)項(xiàng)目為例

      劉建聰,石軍南,徐 強(qiáng)

      (中南林業(yè)科技大學(xué), 湖南 長沙 410004)

      森林資源二類調(diào)查數(shù)據(jù)的錄入和整理是一項(xiàng)繁瑣而又費(fèi)時的工作,數(shù)據(jù)的完整性、準(zhǔn)確性等影響到數(shù)據(jù)庫的質(zhì)量。利用數(shù)據(jù)庫中簡單易學(xué)的標(biāo)準(zhǔn)SQL小程序?qū)崿F(xiàn)森林資源二類調(diào)查數(shù)據(jù)庫快速整理,如批量修改表結(jié)構(gòu),檢查調(diào)查數(shù)據(jù)邏輯、重復(fù)小班號處理、多個關(guān)聯(lián)表合成一個表、分類統(tǒng)計,數(shù)學(xué)模型擬合時剔除異常小班等。實(shí)驗(yàn)表明,利用SQL進(jìn)行森林資源二類調(diào)查數(shù)據(jù)整理,節(jié)省了人力、物力、工作時間,提高了數(shù)據(jù)規(guī)范性和數(shù)據(jù)庫質(zhì)量。

      SQL; 二類調(diào)查; 小班; Foxpro; 數(shù)據(jù)錄入

      1 引言

      廣西省林業(yè)廳2009年組織進(jìn)行了全省森林資源二類調(diào)查。要求以國有林場、自然保護(hù)區(qū)、森林公園、營造林公司等森林經(jīng)營單位或縣級行政區(qū)域?yàn)檎{(diào)查總體,以小班為調(diào)查單元,以摸清森林、林地和林木資源種類、數(shù)量、質(zhì)量與分布,客觀反映調(diào)查區(qū)域自然、社會經(jīng)濟(jì)條件,綜合分析與評價森林資源與經(jīng)營管理現(xiàn)狀,提出森林資源培育、保護(hù)與利用意見為主要任務(wù)的森林資源調(diào)查。本次調(diào)查主要工作包括, 以遙感圖和地形圖為底圖,參考2003年生態(tài)公益林的區(qū)劃界定數(shù)據(jù)和退耕還林工程檢查驗(yàn)收數(shù)據(jù), 進(jìn)行小班區(qū)劃與小班因子調(diào)查,并采用總體蓄積抽樣控制調(diào)查方法控制森林蓄積調(diào)查質(zhì)量,要求2009年底完成內(nèi)業(yè)。由于森林資源二類調(diào)查數(shù)據(jù)的整理時間緊、工作任務(wù)重,多個管理系統(tǒng)數(shù)據(jù)庫中表的數(shù)據(jù)結(jié)構(gòu)不同,及多人的獨(dú)自操作,數(shù)據(jù)比較分散,給數(shù)據(jù)庫后期整理帶來許多不便。本文主要采用在 Foxpro交互環(huán)境下SQL命令的應(yīng)用來處理數(shù)據(jù)庫, 以提高數(shù)據(jù)的處理質(zhì)量,并進(jìn)行不同數(shù)據(jù)源的快速合并,起到了節(jié)省工作時間,提高工作效率的作用[1]。以下以廣西賀州市八步區(qū)森林資源二類調(diào)查數(shù)據(jù)整理為例,介紹在 Foxpro SQL交互環(huán)境下數(shù)據(jù)整理的方法與技巧。

      2 SQL 簡介

      SQL全稱是“結(jié)構(gòu)化查詢語言(Structured Query Language)”,SQL是高級的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,使得具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng)可以使用相同的SQL語言作為數(shù)據(jù)輸入與管理的接口。它以記錄集合作為操作對象,所有SQL語句接受集合作為輸入,返回集合作為輸出,這種集合特性允許一條SQL語句的輸出作為另一條SQL語句的輸入,所以SQL語句可以嵌套,這使他具有極大的靈活性和強(qiáng)大的功能,在多數(shù)情況下,在其他語言中需要一大段程序?qū)崿F(xiàn)的功能只需要一個SQL語句就可以達(dá)到目的,這也意味著用SQL語言可以寫出非常復(fù)雜的語句,SQL語言結(jié)構(gòu)簡潔,功能強(qiáng)大,簡單易學(xué),所以SQL語言得到了廣泛的應(yīng)用。如今無論是像Oracle,Sybase,Informix,SQL server這些大型的數(shù)據(jù)庫管理系統(tǒng),還是像Visual Foxpro,PowerBuilder這些微機(jī)上常用的數(shù)據(jù)庫開發(fā)系統(tǒng),都支持SQL語言作為查詢語言[2]。

      Visual Foxpro除了支持傳統(tǒng)的SQL語言命令之外,還提供了對程序語言的支持[3]。本文主要使用了Foxpro SQL中select(或sele 縮寫)查詢語句,用TXT文檔寫好程序(也可用Foxpro提供的編輯器),再點(diǎn)擊“程序——運(yùn)行” 選擇程序文件確認(rèn),即完成程序的操作(或直接在命令行中運(yùn)行‘do *.txt’),由于SQL利用程序代碼少,易操作,能完成較復(fù)雜的數(shù)據(jù)整理,為非專業(yè)程序員提供很好的平臺。

      3 數(shù)據(jù)庫表的合并

      數(shù)據(jù)庫表的合并是指把分散的小班調(diào)查表以統(tǒng)一數(shù)據(jù)結(jié)構(gòu)合并到一起,便于后期的數(shù)據(jù)邏輯檢查、匯總與分析。

      以下是在數(shù)據(jù)整理中用到的部分?jǐn)?shù)據(jù)庫結(jié)構(gòu)表:

      列注譯列標(biāo)識類型列注譯列標(biāo)識類型鄉(xiāng)(分場)號xhC土地所有權(quán)ssxjbhN村(工區(qū))號chC土地種類tdzlC林班號lbhC出材率等級ccldjC經(jīng)營班號jybhC林種lzC小班號xbhN采運(yùn)可及度kjdC土地所有權(quán)ssxjbhN………………

      3.1生成小班ID號

      小班ID號(xbid)生成用于以后數(shù)據(jù)庫與viewGIS生成的小班圖層連庫,以及表合并時起關(guān)鍵字索引作用,小班ID號要求為字符型9位(鄉(xiāng)[2]村[2]林班[2]小班[3])才能與viewGIS小班圖層對接,最高位沒有數(shù)字時要用“0”填充。以下是用到的主要命令:

      replace xbid with substr(str(1000000000+xh*10000000+ch*100000+lbh1000+xbh),2,9) all

      例如xh=2,ch=3,lbh=2,xbh=1,經(jīng)處理可得‘020302001’字符串。

      3.2批量修改表結(jié)構(gòu)及表的合并

      由于不同森林二類調(diào)查數(shù)據(jù)管理軟件,不同數(shù)據(jù)錄入系統(tǒng)表結(jié)構(gòu)名和數(shù)據(jù)類型不同,進(jìn)行聯(lián)接時會出錯,所以必須統(tǒng)一格式,而近百個表結(jié)構(gòu)如果手工逐個改正,且多個表要重復(fù)操作,非常繁瑣,改過以后,也無法保證完全正確。如此一來,工作效率便非常低下。

      由于命令重復(fù)率比較高,為了提高數(shù)據(jù)庫表結(jié)構(gòu)轉(zhuǎn)換的效率,使用alter命令進(jìn)行修改(* 為注譯符)。

      統(tǒng)一所有的表結(jié)構(gòu)后用append 命令依次追加合并,最后得到統(tǒng)一的表。

      settalkoffcopytoxbdc *將原始文件復(fù)制到新文件xbdc.dbf中。use*開閉當(dāng)前表usexbdc*打開新表altertablexbdcrenamecolumnatoxh *改變表結(jié)構(gòu)名鄉(xiāng)鎮(zhèn)號'a'為統(tǒng)一編號'xh'altertablexbdcalter xhfloat(10,1)*然后接改變表結(jié)構(gòu)名‘xh’的數(shù)據(jù)類型為 float(10,1)…… *此處有近百條類似命令行因篇幅所限,未一一列出。settalkonreturn

      4 小班不完全相同重復(fù)處理

      由于輸入調(diào)查卡任務(wù)量大、人比較多會出現(xiàn)一些不完全相同的重復(fù)數(shù)據(jù),而用distinct命令只能刪除完全相同的重復(fù)數(shù)據(jù),在二類數(shù)據(jù)整理中由于表結(jié)構(gòu)字符數(shù)據(jù)不統(tǒng)一,如填多個調(diào)查員時名字順序不同、字符型日期格式不一樣等情況。而出現(xiàn)不完全相同重復(fù)用編程來實(shí)現(xiàn)比用手動有效率,且不易出錯。

      以下程序是以‘小班ID號’(xbid)不重復(fù)為標(biāo)準(zhǔn)刪除重復(fù)小班。

      select distinct*from tmpp into table tmp1 *首先去除完全重復(fù)

      drop table tmpp

      alter table tmp1 add autoID num(10) *表中增加‘a(chǎn)utoID’列用于標(biāo)識

      use tmp1 *使用tmp1表

      k=0

      scan *在表‘a(chǎn)utoID’列中為每行數(shù)據(jù)符一個唯一編號

      k=k+1

      repl autoID with k

      endscan

      *選取xbid列中相同的編號最小的autoID表,去除小班號重復(fù)數(shù)據(jù)

      select min(autoID) as autoID from tmp1 into table tmp2 group by xbid

      *用autoID列表選取數(shù)據(jù)

      select*into table 去重復(fù) from tmp1 where autoID in(select autoID from tmp2)

      drop table tmp1 *刪除tmp1.dbf 臨時表

      drop table tmp2 *刪除tmp2.dbf 臨時表

      use去重復(fù) *打開‘去重復(fù).dbf ’

      以下是程序運(yùn)行后的效果:

      xbidautoIDauthor處理之前1020300323……張三、李四1020300324……李四、張三1020300425……王二、小劉處理之后1020300323……張三、李四1020300425……王二、小劉

      5 檢查調(diào)查數(shù)據(jù)邏輯

      數(shù)據(jù)邏輯檢查是整個調(diào)查數(shù)據(jù)好壞的關(guān)鍵步驟,需要認(rèn)真把關(guān)。因?yàn)楹笃诘臄?shù)據(jù)處理都是以這個數(shù)據(jù)庫為標(biāo)準(zhǔn),對異常數(shù)據(jù)要及時找原數(shù)據(jù)進(jìn)行修改,某些選項(xiàng)有邏輯關(guān)系的可通過邏輯判斷修正。

      數(shù)據(jù)邏輯檢查首先是通過對樹木生長規(guī)律及規(guī)劃設(shè)計的要求進(jìn)行條件判斷,得到一個條件判斷總表,然后查找列出要修改的行。

      5.1顯示邏輯錯誤

      顯示邏輯錯誤可用select、browse命令,為了便于修改用browse命令比較方便,可直接在列出表格中修改。使用示例: browse for 樹高>50。

      使用Select 可能要繁瑣一些,不是特別情況邏輯檢查不用它,主要用于查詢表的導(dǎo)出。

      5.2邏輯判斷修正

      在檢查數(shù)據(jù)邏輯時,部分選項(xiàng)有邏輯關(guān)系的可通過邏輯判斷修正,常會出現(xiàn)有些選項(xiàng)要輸入時漏輸或輸錯的,通過邏輯判斷進(jìn)行糾正,在Foxpro中主要用到‘replace(repl)列名稱 with 新值for 條件 ’ 命令,也可用SQL中標(biāo)準(zhǔn)的更新語句:‘UPDATE 表名稱 SET 列名稱 = 新值 WHERE 條件’。

      例如根據(jù)林學(xué)知識及廣西森林資源規(guī)劃設(shè)計的要求,對‘不是用材近成過熟林(或者是竹林),出材率等級>0’(即是竹林或者不是用材近成過熟林的小班要求出材率等級不填),下面通過查找代碼表列出判斷條件進(jìn)行修正:

      Repl ccldj with"for not(subs(lz,1,1)="3"and tdzl<>"13" and val(nlz)>2) and val(ccldj)>0

      *條件定義:林種(lz="3")為用材林、土地種類(tdzl="13")為竹林、年齡組(nlz>2)為近成熟林,出材率等級(ccldj>0)為有出材率等級。

      6 統(tǒng)計分析表的生成

      統(tǒng)計分析表的生成,在統(tǒng)計分析表時,了解林業(yè)資源狀況,有可能出現(xiàn)原有的管理系統(tǒng)報表不能滿足需求,或者不同時期的報表不一樣,但是短時間需要且不急于程序開發(fā)時,用Foxpro處理是一個很好的替代品。這里主要用到Select查詢中g(shù)roup多元分組、聚類函數(shù)及JOIN連接命令使列排列變換為橫排列。

      下面假如要對小班數(shù)據(jù)表進(jìn)行分類統(tǒng)計,要求得到分鄉(xiāng)鎮(zhèn)各樹種的總面積。

      sele 鄉(xiāng)鎮(zhèn),樹種,sum(面積) as 總面積 from 總表 group by鄉(xiāng)鎮(zhèn),樹種into table temp1

      *由聚類函數(shù)(sum)生成分鄉(xiāng)鎮(zhèn)各樹種的總面積表temp1.dbf

      sele鄉(xiāng)鎮(zhèn) from總表group by鄉(xiāng)鎮(zhèn)into table temp2

      *生成鄉(xiāng)鎮(zhèn)表temp2.dbf

      sele temp2.*,temp1.總面積 as總面積from temp2 left join temp1 on temp2. 鄉(xiāng)鎮(zhèn)= temp1. 鄉(xiāng)鎮(zhèn)and 樹種=‘杉木’into table temp3

      * JOIN連接命令使第一類列排列變換為橫排列

      sele temp3.*,temp1.總面積 as總面積from temp3 left join temp1 on temp3. 鄉(xiāng)鎮(zhèn)= temp1. 鄉(xiāng)鎮(zhèn)and 樹種=‘馬尾松’into table temp3

      下面是上面命令一個示例

      總表.dbfxbid鄉(xiāng)鎮(zhèn)樹種面積20202001鋪門馬尾松1220202002鋪門杉木221202003靈峰杉木521202004靈峰馬尾松821202005靈峰馬尾松16

      temp3.dbf馬尾松杉木鋪門122靈峰245

      7 異常數(shù)據(jù)的剔除

      數(shù)據(jù)準(zhǔn)備,以小班數(shù)據(jù)庫為基礎(chǔ),分別優(yōu)勢樹種(組)計算各年齡小班每公頃蓄積量的平均值和標(biāo)準(zhǔn)差,以0.5~1.0倍標(biāo)準(zhǔn)差剔除數(shù)據(jù)異常的小班后,得到模型擬合基礎(chǔ)數(shù)據(jù)。

      主要代碼如下(&&為注譯符):

      && lbxj(xi):xj/mj 小班平均蓄積 pjxj(_x):sum(xj)/sum(mj) 各年齡平均蓄積

      && count: n 各年齡小班總數(shù) xb_xj:(xi-_x)*(xi-_x) 小班蓄積的平方差

      && bjxj:all(xb_xj) 各年齡總體平方差 slxj:小班面積 yxmj:小班蓄積

      sele 樹種,年齡,sum(slxj)/sum(yxmj) as pjxj,count(nl1) as count from ccc group by 樹種,年齡 into table ccc2

      && 由總表ccc.dbf生成各年齡小班總數(shù)與平均蓄積的表ccc2.dbf

      && 由 ccc.dbf,ccc2.dbf生成各小班蓄積的平方差及增加各年齡小班總數(shù)與平均蓄積列的表ccc3.dbf

      sele.樹種,年齡,sum(xb_xj)/count as bjxj from ccc3 group by 樹種,年齡 into table ccc4&&由ccc3.dbf生成各小班平均蓄積ccc4.dbf

      &&合并兩個表ccc3.dbf,ccc4.dbf 為 ccc5.dbf

      sele 樹種,年齡,sum(slxj)/sum(yxmj),sum(slxj),sum(yxmj) where xb_xj<=bjxj from ccc5 group by 樹種,年齡 into table ccc6

      &&從ccc5.dbf中剔除‘小班平方差’少于‘總體平方差’異常數(shù)據(jù)后的表ccc6.dbf

      8 結(jié)語

      賀州市八步區(qū)森林資源二類調(diào)查數(shù)據(jù)庫小班有 5萬多個, 多人操作,多數(shù)據(jù)系統(tǒng)錄入,如果采用手工操作把表合并到統(tǒng)一的數(shù)據(jù)庫中, 工作量大、任務(wù)重、差錯多。當(dāng)管理系統(tǒng)功能還不完善時新增報表,或缺少程序員維護(hù)時,問題更為突出。而采用 SQL命令來處理數(shù)據(jù)庫有以下優(yōu)點(diǎn): (1) 適應(yīng)于各種數(shù)據(jù)庫平臺,省力、省時。 1名技術(shù)人員用編好的小程序直接運(yùn)行就可把各種森林資源二類調(diào)查數(shù)據(jù)庫統(tǒng)一起來, 能大大節(jié)省人力和工作時間, 工作效率明顯提升。 (2) 數(shù)據(jù)處理靈活。專題信息管理系統(tǒng)都是針對某一方面固定功能而設(shè)計的,當(dāng)出現(xiàn)急需解決的新情況時,SQL可以很好的處理[4-6]。采用 Foxpro SQL還可以對內(nèi)外業(yè)數(shù)據(jù)進(jìn)行有效性檢查, 更好地把好數(shù)據(jù)檢查關(guān),能節(jié)省系統(tǒng)開發(fā)維護(hù)費(fèi)用與工程完成的時間。

      [1] 鮑永剛,張英福,王德高.SQL語言及其在關(guān)系數(shù)據(jù)庫中的應(yīng)用[M].北京:科學(xué)出版社,2007.

      [2] Faroult,Robson. SQL語言藝術(shù)[M]. 北京:電子工業(yè)出版社,2008.3.

      [3] 周亦民,熊躍進(jìn).Visual FoxPro 6.0實(shí)用教程[M].北京:科學(xué)出版社,2002.

      [4] 儲開江. Foxpro在嵊州市森林資源二類調(diào)查數(shù)據(jù)更新中的應(yīng)用[J]. 林業(yè)勘查設(shè)計,2007(1).72-75.

      [5] 李新平,梁志強(qiáng). 森林資源二類調(diào)查數(shù)據(jù)管理系統(tǒng)[J]. 林業(yè)科技情報,2009,41(1):41-42.

      [6] 劉佳升,闞喜忠,朱洪坤. 森林資源二類調(diào)查數(shù)據(jù)處理系統(tǒng)介紹[J]. 林業(yè)勘查設(shè)計,2006(3):21-22.

      (責(zé)任編輯:譚著明)

      2010 — 06 — 21

      2010 — 09 — 08

      S 757.2+2

      B

      1003 — 5710(2010)05 — 0067 — 04

      10. 3969/j. issn. 1003 — 5710. 2010. 05. 021

      猜你喜歡
      蓄積命令森林資源
      只聽主人的命令
      樟子松人工林林分蓄積量計算方法的對比分析
      保護(hù)好森林資源 讓林區(qū)青山常在
      紅土地(2018年8期)2018-09-26 03:19:16
      移防命令下達(dá)后
      藏藥佐太中汞在小鼠體內(nèi)的蓄積
      中成藥(2017年7期)2017-11-22 07:32:46
      新形勢下北方森林資源保護(hù)探討
      新形勢下加強(qiáng)森林資源檔案管理工作的構(gòu)想
      淺談藏醫(yī)“疾病蓄積”與健康養(yǎng)生
      這是人民的命令
      堅持創(chuàng)新 蓄積行業(yè)永續(xù)發(fā)展動能
      绥江县| 翁源县| 平乐县| 德昌县| 厦门市| 丽江市| 项城市| 蕉岭县| 株洲县| 龙口市| 乾安县| 婺源县| 永胜县| 榆林市| 福清市| 旺苍县| 鄂托克旗| 忻城县| 会昌县| 攀枝花市| 安新县| 政和县| 新和县| 昌江| 松原市| 文水县| 临泉县| 焦作市| 玛多县| 大名县| 潞城市| 赣榆县| 罗源县| 泊头市| 喜德县| 蓝田县| 西昌市| 竹山县| 常德市| 沅陵县| 钟祥市|