亚洲AV日韩AⅤ综合手机在线观看,激情婷婷久久综合色,欧美色五月婷婷久久,久久国产精品99久久人人澡

  • <abbr id="uk6uq"><abbr id="uk6uq"></abbr></abbr>
  • <tbody id="uk6uq"></tbody>
  • 基于HTML5技術(shù)的大壩安全監(jiān)測圖像繪制技術(shù)

    時(shí)間:2024-09-26 14:21:26 計(jì)算機(jī)畢業(yè)論文 我要投稿
    • 相關(guān)推薦

    基于HTML5技術(shù)的大壩安全監(jiān)測圖像繪制技術(shù)

      摘要:本文介紹了在大壩安全監(jiān)測的圖形化展示領(lǐng)域中,HTML5技術(shù)對比其他技術(shù)所具有的優(yōu)點(diǎn),并以水情態(tài)勢圖為例,詳細(xì)介紹了利用HTML5技術(shù)在網(wǎng)頁上動(dòng)態(tài)繪制相關(guān)圖形的方法和步驟。文中通過具體的代碼示例和圖形界面,展示了圖像繪制技術(shù)、顏色識別技術(shù)、碰撞檢測技術(shù)在工程實(shí)踐中的具體應(yīng)用。文章結(jié)尾總結(jié)了HTML5的技術(shù)特點(diǎn)以及在當(dāng)前環(huán)境下的發(fā)展前景。

      關(guān)鍵詞:大壩安全 HTML5 計(jì)算機(jī)繪圖

      在大壩安全管理中,大壩安全監(jiān)測數(shù)據(jù)的圖形化展示一直是一個(gè)關(guān)注熱點(diǎn),借助圖形化展示技術(shù),廣大大壩安全管理人員可以快速直觀的評估大壩目前的安全狀況,并能夠根據(jù)大壩安全監(jiān)測數(shù)據(jù)的變化趨勢,對大壩安全狀況未來的變化態(tài)勢做出預(yù)測,提前做好相關(guān)的準(zhǔn)備方案。

      當(dāng)前,基于B/S平臺的圖形展示技術(shù)主要有Flash、Sliverlight以及HTML5等。相比較與前兩種技術(shù)方案,HTML5技術(shù)具有如下優(yōu)點(diǎn):

      (1)低技術(shù)風(fēng)險(xiǎn)。HTML5是HTML的一個(gè)新版本。HTML5草案的前身名為Web Applications 1.0。它于2004年被WHATWG提出,于2007年被W3C接納,并成立了新的HTML工作團(tuán)隊(duì)。2012年12月17日,萬維網(wǎng)聯(lián)盟(W3C)正式宣布凝結(jié)了大量網(wǎng)絡(luò)工作者心血的HTML5規(guī)范已經(jīng)正式定稿。而flash技術(shù)由Adobe公司所有、Sliverlight技術(shù)由Microsoft公司所有,選用這些技術(shù),均會存在一定的技術(shù)風(fēng)險(xiǎn)。

      (2)免插件安裝。由于瀏覽器本身并不支持flash和Sliverlight,因此要使用flash和Sliverlight,必須要先在瀏覽器上安裝安裝相關(guān)的插件,由于瀏覽器安全方面的限制,在瀏覽器上安裝插件往往會出現(xiàn)各種各樣的問題,這已經(jīng)成為影響用戶體驗(yàn)的一個(gè)重要因素。而現(xiàn)代主流的瀏覽器均可原生支持HTML5,不用安裝插件即可直接使用HTML5技術(shù),這就為廣大用戶提供了更好的用戶體驗(yàn)。

      (3)跨平臺使用。隨著移動(dòng)技術(shù)的發(fā)展,現(xiàn)在的B/S系統(tǒng)不僅在普通的PC端上使用,也越來越多的在移動(dòng)端平臺(如手機(jī)、平板電腦)上使用。HTML5技術(shù)在這些移動(dòng)平臺時(shí)擁有良好的兼容性。開發(fā)者利用HTML5開發(fā)出一套系統(tǒng)后,即可以在Windows平臺、iOS平臺、Android平臺上運(yùn)行,大大減少了開發(fā)成本和移植費(fèi)用。

      (4)開發(fā)學(xué)習(xí)成本較低。HTML5由現(xiàn)有的HTML4發(fā)展而來,對于廣大的Web開發(fā)人員來說,其學(xué)習(xí)成本較低,能夠很快的掌握相關(guān)的開發(fā)技術(shù)。而反觀flash和Sliverlight,都要重新學(xué)習(xí)專門的開發(fā)語言,開發(fā)與學(xué)習(xí)的成本都較高。

      本文將以水情態(tài)勢圖的繪制方法為例,詳細(xì)介紹HTML5技術(shù)在網(wǎng)頁繪圖方面的具體應(yīng)用。

      水情態(tài)勢圖主要用于實(shí)時(shí)反映大壩的上下游水位,以及與正常蓄水位以及死水位之間的對比關(guān)系,用戶可以通過水情態(tài)勢圖,直觀準(zhǔn)確的了解大壩的水位情況。繪制水情態(tài)勢圖主要經(jīng)過了五個(gè)主要步驟。(1)加載背景圖。(2)確定邊界特征顏色值。(3)確定壩頂壩底位置,確定水位與坐標(biāo)之間的對應(yīng)關(guān)系。(4)繪制上下游水位。(5)標(biāo)注出正常蓄水位、汛限水位以及死水位。各個(gè)步驟的具體介紹如下:

      1)水情態(tài)勢圖的繪制必須以大壩的剖面圖作為背景,因此,加載剖面圖是繪制工作的基礎(chǔ)。我們必須首先在html頁面中定義一個(gè)canvas。

      然后我們在javascript中取得這個(gè)canvas對象,并在canvas上加載背景圖。加載完成后的圖形如圖1。

      2)背景圖加載完成后,我們必須識別出背景圖中表示大壩邊界的特征顏色值,確定該顏色值后,才能確定大壩圖形的具體范圍。在獲取大壩邊界的顏色值之前,必要先了解HTML5中圖像的存儲方式。HTML5使用ImageData對象來保存圖像像素值,它有 width、height和 data 三個(gè)屬性,其中 data 屬性就是一個(gè)連續(xù)數(shù)組,圖像的所有像素點(diǎn)的信息其實(shí)是保存在 data 里面的。每個(gè)像素點(diǎn)的信息由四個(gè)字節(jié)組成。第一個(gè)字節(jié)決定像素的紅色值(r),第二個(gè)字節(jié)決定像素的綠色值(g),第三個(gè)字節(jié)決定像素的藍(lán)色值(b),第四個(gè)字節(jié)決定像素的透明度值(a)。每一種顏色值的大小是從 0 到 255,而對于透明度來說:0 代表完全透明,255代表完全不透明。

      因此,我們到取得圖片里一個(gè)[x,y]坐標(biāo)像素點(diǎn)的紅色值可以用以下公式:

      var redValueForPixel = (y * width + x) * 4;

      具體到大壩的剖面圖上,我們將剖面圖放大并打上網(wǎng)格線(如圖2),圖中的每一個(gè)方格即表示一個(gè)像素點(diǎn),我們可以看到大壩的弧形邊框放大后實(shí)際上是由鋸齒形的像素點(diǎn)組成了,這些像素點(diǎn)顏色深淺不一,每四行像素點(diǎn)可分為一組。我們通過研究一組像素點(diǎn)的data 屬性,找出顏色最淺的像素點(diǎn),并以此點(diǎn)的顏色作為大壩邊界的特征顏色值。

      我們以圖片的中線作為起點(diǎn),向下取得四行像素點(diǎn)的data屬性,然后篩選出所有非空白點(diǎn)的data值。數(shù)據(jù)如表1。

      分析上述表格,我們以218作為大壩邊界的特征顏色值。

      3)我們從頂部開始,從上往下對圖像進(jìn)行逐行掃描,當(dāng)遇到顏色比特征顏色深的像素點(diǎn),即可視為碰到了圖像的上邊界,這個(gè)位置即是圖像中大壩的壩頂位置。反之,我們從底部開始,從下往上對圖像進(jìn)行逐行掃描,遇到顏色比特征顏色深的像素點(diǎn),即可視為碰到了圖像的下邊界,這個(gè)位置即是圖像中大壩的壩底位置。

      我們通過已有的資料可以得知大壩的壩高和壩頂高程,設(shè)大壩的壩高為damHeight,大壩的壩頂高程為damTopElevation,根據(jù)大壩高度與其坐標(biāo)范圍之間的線形關(guān)系,我們可以得到水位與坐標(biāo)值之間的轉(zhuǎn)換關(guān)系,代碼如下:

      //根據(jù)水位值計(jì)算得到坐標(biāo)位置

      //@param level 水位值

      //@return 水位值所對應(yīng)的X坐標(biāo)

      function getPosition(level){

      var val = ((damBottomPosition-damTopPosition)*(damTopElevation-level)/damHeight)+damTopPosition;

      return parseInt(val);

      }

      4)我們?nèi)匀徊捎弥鹦袙呙杓宇伾葘Φ姆绞絹砝L制上下游水位,我們從水位位置開始一直掃描到壩底位置,如果檢測到了大壩邊界,則繪制一條從該行起點(diǎn)到邊界點(diǎn)的線條。繪制上游水位與繪制下游水位的不同之處在于,上游水位是從左往右進(jìn)行檢測,下游水位是從右往左進(jìn)行檢測。繪制上游水位的代碼如下:

      //開始繪制

      ctx.beginPath();

      //取得canvas上圖像的像素點(diǎn)信息數(shù)組

      var imagedata=ctx.getImageData(leftPoint,0,image.width,image.height);

      //從水位位置到壩底位置進(jìn)行逐行掃描

      for(var j=upWaterLevel;j

      for(var i=0;i

      //計(jì)算像素點(diǎn)信息數(shù)組中存放當(dāng)前像素點(diǎn)r顏色值的位置

      k=4*(image.width*j+i);

      //取得當(dāng)前像素點(diǎn)r顏色值

      var rcolor = imagedata.data[k];

      //當(dāng)r顏色值比特征顏色值深時(shí)

      if(rcolor  //選定線條的起點(diǎn)

      ctx.moveTo(0, j);

      //畫一條從起點(diǎn)到邊界點(diǎn)的直線

      ctx.lineTo(leftPoint+i, j);

      //跳出當(dāng)前的循環(huán)

      break;

      }

      }

      //設(shè)置填充顏色

      ctx.strokeStyle = "#C4E1F7";

      //結(jié)束繪制

      ctx.closePath();

      //填充顏色

      ctx.stroke();

      繪制完水面后,我們還需要在水位處繪制一條水位線。

      //開始繪制

      ctx.beginPath();

      //在上游水位處從左向右掃描

      for(var i=0;i  //計(jì)算像素點(diǎn)信息數(shù)組中存放當(dāng)前像素點(diǎn)r顏色值的位置

      k=4*(image.width*upWaterLevel+i);

      //取得當(dāng)前像素點(diǎn)r顏色值

      var rcolor = imagedata.data[k];

      //當(dāng)r顏色值比特征顏色值深時(shí)

      if(rcolor  //選定線條的起點(diǎn)

      ctx.moveTo(0, upWaterLevel);

      //畫一條從起點(diǎn)到邊界點(diǎn)的直線

      ctx.lineTo(leftPoint+i, upWaterLevel);

      //跳出當(dāng)前的循環(huán)

      break;

      //設(shè)置填充顏色

      ctx.strokeStyle = "blue";

      //結(jié)束繪制

      ctx.closePath();

      //填充顏色

      ctx.stroke();

      我們還需要在水位線上用文字和符號對水位情況進(jìn)行說明。

      //開始繪制

      ctx.beginPath();

      //繪制一個(gè)倒三角符號來指示當(dāng)前水位,signMargin表示符號到邊框的距離,signSize表示符號的大小,即倒三角的邊長

      ctx.moveTo(signMargin,upWaterLevel);

      ctx.lineTo(signMargin-signSize*0.5,upWaterLevel-signSize*0.866);

      ctx.lineTo(signMargin+signSize*0.5,upWaterLevel-signSize*0.866);

      //設(shè)置填充顏色

      ctx.strokeStyle = "blue";

      //結(jié)束繪制

      ctx.closePath();

      //填充顏色

      ctx.stroke();

      //設(shè)置當(dāng)前文本基線

      ctx.textBaseline = "top";

      //設(shè)置文字顏色

      ctx.fillStyle = "blue";

      //設(shè)置文字對齊方式

      ctx.textAlign = "left";

      //設(shè)置文字字體

      ctx.font = "14px Microsoft YaHei";

      //繪制文字

      ctx.fillText(up+"m", signMargin+signSize,upWaterLevel-signSize);

      繪制后的圖形如圖3。

      5)最后,我們在畫圖上標(biāo)注出正常蓄水位、汛限水位以及死水位。這樣,用戶在查看水情態(tài)勢時(shí)可以進(jìn)行對比分析。正常蓄水位、汛限水位以及死水位的標(biāo)注方法與上下游水位線的繪制方法類似,只是對線條的長度以及文字符號的位置做了改動(dòng),以便達(dá)到畫面更加美觀的目的。

      最后完成的圖形如圖4。

      以上介紹了HTML5在繪制水情態(tài)勢圖時(shí)的應(yīng)用,實(shí)際上,HTML5也可用于在大壩安全管理相關(guān)的很多其他圖形表示上,如分布圖,過程線等,借助HTML5技術(shù)的特性,我們可以真正實(shí)現(xiàn)“One Web,Any Device”,即我們編寫出一套網(wǎng)頁程序就可以運(yùn)行在各種終端之上。這在移動(dòng)設(shè)備越來越發(fā)揮重要作用的今天無疑具有重要意義。

      參考文獻(xiàn):

      [1] 蔣海洲,吳中如.ADO技術(shù)在大壩安全監(jiān)測中的應(yīng)用[J].水電能源科學(xué),2002(02).

      [2] 崔玉蘭,郭治清.全國水文自動(dòng)測報(bào)系統(tǒng)建設(shè)評價(jià)[J].水文,2002(01).

    【基于HTML5技術(shù)的大壩安全監(jiān)測圖像繪制技術(shù)】相關(guān)文章:

    基于圖像的OMR技術(shù)的實(shí)現(xiàn)03-07

    水庫大壩安全監(jiān)測自動(dòng)化技術(shù)探究論文11-14

    基于內(nèi)容的模糊圖像檢索技術(shù)研究03-18

    基于圖像處理技術(shù)的織物組織自動(dòng)識別03-07

    基于Zigbee的無線傳感器網(wǎng)絡(luò)在大壩安全監(jiān)測系統(tǒng)中的應(yīng)用03-07

    基于FPGA/CPLD和USB技術(shù)的無損圖像采集卡03-18

    基于BSTR1011碼流收發(fā)卡的監(jiān)測技術(shù)11-22

    基于探針與NetFlow的高速網(wǎng)絡(luò)流量監(jiān)測技術(shù)的研究與實(shí)現(xiàn)03-07

    探討水庫大壩防滲加固技術(shù)11-25