亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        利用VB編程實現(xiàn)氣象數(shù)據(jù)可視化

        2017-05-09 16:06:06周長志茅海祥晏理華陳方遠
        關(guān)鍵詞:銅仁市雨量漫游

        周長志 茅海祥 晏理華 陳方遠

        (貴州省銅仁市氣象局, 銅仁 554300)

        ?

        利用VB編程實現(xiàn)氣象數(shù)據(jù)可視化

        周長志 茅海祥 晏理華 陳方遠

        (貴州省銅仁市氣象局, 銅仁 554300)

        為使氣象數(shù)據(jù)能夠以直觀可視的圖形方式進行顯示,利用VB可視化編程方法進行程序設(shè)計,實現(xiàn)了地圖繪制、氣象數(shù)據(jù)顯示、圖形縮放及漫游等功能。

        VB編程語言;氣象數(shù)據(jù);可視化

        在氣象工作中,經(jīng)常用到以地圖為背景實現(xiàn)降水、氣溫等氣象要素的可視化分析方法。常見的方法是基于地理信息系統(tǒng)(GIS,Geographic Information System)環(huán)境進行可視化編程,實現(xiàn)數(shù)據(jù)與地圖的有效結(jié)合。運用VB和Surfer聯(lián)合編程技術(shù)也可以實現(xiàn)雨量等氣象資料的圖形可視化。李強等人研究開發(fā)了基于GIS的小區(qū)域氣象災(zāi)害精細化預(yù)警系統(tǒng)[1]。 柳錦寶等人運用WebGIS技術(shù)開發(fā)了四川省氣象服務(wù)信息系統(tǒng)[2]。林伙海運用VB6.0語言并結(jié)合Surfer 8.0實現(xiàn)了雨量圖形可視化[3]。但他們均是運用相關(guān)編程軟件聯(lián)合第三方平臺的地圖功能來實現(xiàn)氣象信息的可視化,需要軟件開發(fā)者熟練掌握第三方。本次研究運用VB6.0語言開發(fā)一套矢量地圖繪制程序,將銅仁市區(qū)域內(nèi)氣象站的要素資料(雨量、溫度等)實時地顯示在地圖上,實現(xiàn)氣象要素隨矢量地圖縮放、漫游等功能。

        1 資料來源及處理

        1.1 地圖數(shù)據(jù)的采集

        處理地圖矢量數(shù)據(jù)時,一般應(yīng)用矢量化處理軟件(如MapInfo)將紙質(zhì)地圖的柵格數(shù)據(jù)轉(zhuǎn)換成矢量數(shù)據(jù),也可以利用MICAPS系統(tǒng)獲取縣級以上邊界地圖數(shù)據(jù)。但對于質(zhì)量要求不高的示意類地圖可以采用人工的方式進行讀?。涸诘貓D邊界上先任意取一個起點,沿邊界按順時針或逆時針方向,每隔0.1個緯距或經(jīng)距,讀出相應(yīng)的坐標值(即經(jīng)度和緯度值),直到回到終點。按照該方法讀出河流、公路、城市站點等數(shù)據(jù)。

        1.2 地圖矢量數(shù)據(jù)的存儲

        將采集到的地圖數(shù)據(jù)存儲到Access數(shù)據(jù)庫中,根據(jù)實際情況建立相關(guān)數(shù)據(jù)表,如縣邊界、鄉(xiāng)鎮(zhèn)邊界、河流、公路、城市站點等不同的數(shù)據(jù)表,在數(shù)據(jù)庫表中第1列為經(jīng)度數(shù)據(jù)、第2列為緯度數(shù)據(jù)。

        1.3 氣象資料的獲取

        銅仁市區(qū)域氣象站的要素資料(雨量、溫度等)主要通過內(nèi)網(wǎng)專線或VPN 連接到銅仁市氣象局區(qū)域站SQL服務(wù)器。應(yīng)用VB6.0中的ADO對象模型,通過定義對象和編寫相關(guān)代碼來實現(xiàn)對SQL數(shù)據(jù)庫的訪問和查詢。

        2 實現(xiàn)技術(shù)和方法

        2.1 地圖繪制方法

        地圖邊界曲線實際上是由無數(shù)條線段首尾相連組合而成,在VB6.0中實現(xiàn)曲線的繪制需要利用PictureBox(圖片框)控件和畫線函數(shù)line(x1,y1)-(x2,y2)。在Form設(shè)計時,加入一個PictureBox控件,該控件作為OLE容器,繪圖區(qū)域的大小及比例可通過圖片框的Scale方法設(shè)定,再利用line方法可以將地圖邊界的點依次連接起來,從而構(gòu)成一條地圖邊界線。另外在地圖數(shù)據(jù)中,其邊界點的坐標為經(jīng)緯度值,需要將其轉(zhuǎn)換為圖片框上的坐標,轉(zhuǎn)換公式為:

        x=(tempx-xmin)*kx

        y=(ymax-tempy)*kx

        式中:x、y分別為PictureBox圖片框上點的橫、縱坐標;tempx、tempy分別為地圖上邊界點的經(jīng)度、緯度;kx為ScaleWidth(xmax-xmin)和ScaleHeight(ymax-ymin)兩者中的最小值;xmin、xmax、ymin、ymax分別是所有地圖邊界點中最小經(jīng)度值、最大經(jīng)度值、最小緯度值、最大緯度值。

        繪制地圖邊界的函數(shù)為:Function drawmap(drawpic as PictureBox, lcolor as Single,zoom as Single, xmove as Single,ymove as Single, manyou as Boolean)。其中:drawmap為所繪制地圖邊界的函數(shù);drawpic為繪圖的圖片框;lcolor為線條的顏色;zoom為放大倍數(shù);xmove、ymove分別為拖動漫游x和y方向的位移;manyou為漫游標志。

        2.1.1 轉(zhuǎn)換地圖坐標為圖片框上點的坐標

        代碼如下:

        fxwidth = xmax - xmin

        fyheight = ymax - ymin

        if kx < ky then

        ky = kx

        else

        kx = ky

        end if

        rsmap.open "select fx,fy,ftype from mapdata ",connmap,adOpenForwardOnly,adLockReadOnly

        i = 1

        with rsmap

        do while i < 504 ′在本實例中共504個坐標點

        tmpy = .fields("fy")

        redim preserve gridx(UBound(gridx) + 1) ′重新定義數(shù)組維數(shù)

        redim preserve gridy(UBound(gridy) + 1)

        gridx(i) = zoom * ((tempx - xmin) * kx)

        gridy(i) = zoom * ((ymax - tempy) * ky)

        i = i + 1

        .movenext

        loop

        end with

        rsmap.close

        else

        2.1.2 繪制地圖邊界

        代碼如下:

        drawpic.cls

        drawpic.DrawWidth = 3

        for j = 1 To i - 2

        drawpic.Line (gridx(j), gridy(j))-(gridx(j + 1), gridy(j + 1)), lcolor

        next

        private sub cmdshowmap_Click()′顯示地圖

        call drawmap(picdrawmap, RGB(255, 255, 0), 1, 0, 0, False)

        end sub

        2.1.3 實現(xiàn)地圖放大與縮小

        有時候在地圖中因氣象站點資料較密集,難以看清具體數(shù)值,此時需要對圖形進行放大和縮小,如在圖形上左鍵雙擊放大地圖、右鍵雙擊縮小地圖。實現(xiàn)此功能的代碼如下:

        private sub picdrawmap_dblClick()

        if lastbutton = 1 then

        call drawmap(picdrawmap, mcolor, mzoom * 1.5, 0, 0, False)′鼠標左鍵雙擊,每次放大0.5 倍

        end if

        if lastbutton = 2 then

        call drawmap(picdrawmap, mcolor, mzoom * 0.5, 0, 0, false)′鼠標右鍵雙擊,每次縮小0.5倍

        end if

        end sub

        2.1.4 設(shè)計地圖的漫游功能

        將地圖放大或縮小后,因顯示器屏幕的局限性,地圖及相關(guān)資料可能在屏幕上僅顯示部分內(nèi)容,或者位置有所偏移,此時需要對地圖進行拖動,移到適合的位置。即按住鼠標鍵并移動鼠標時,地圖將沿鼠標移動方向進行移動,實現(xiàn)地圖的漫游功能。其代碼如下:

        private sub picdrawmap_mousedown(button as integer, shift as integer, x as single, y as single)

        startx = x

        starty = y

        end sub

        private sub picdrawmap_MouseUp(button as integer, shift as integer, x as single, y as single)

        nxmove = nzoom * (x - startx)

        nymove = nzoom * (y - starty)

        call drawmap(Picdrawmap, ncolor, nzoom, nxmove, nymove, true)

        startx = x

        starty = y

        end sub

        2.2 氣象資料在地圖上顯示方法

        為實現(xiàn)氣象資料在地圖上的正確顯示,在手動操縱鼠標實現(xiàn)地圖放大、縮小、漫游時,氣象資料能實時跟隨地圖進行相應(yīng)的變化和移動。如在本實例中,通過select語句查詢時間段內(nèi)的小時雨量數(shù)據(jù),并在地圖上進行可視化操作。其關(guān)鍵代碼如下:

        txtSQL = "select trlysz.StationID,trlysz.jd,trlysz.wd,tabHourData,R1H,tabHourData,tabHourData.ObservTime from trlysz,tabHourData where trlysz.StationID = tabHourData.StationID and ObservTime= '" + datetime1 + "'" '根據(jù)設(shè)定時間對區(qū)域站數(shù)據(jù)庫中的小時雨量資料進行查詢

        rszdzdata.CursorLocation = adUseClient

        rszdzdata.Open txtSQL, connzdzdata, adOpenDynamic, adLockBatchOptimistic

        if rszdzdata.RecordCount > 0 then′判斷是否有數(shù)據(jù)記錄

        i= 1

        with rszdzdata

        do while i < jls′ jls為滿足查詢條件的記錄數(shù)

        tempx1= .fields("jd")′獲取站點經(jīng)度數(shù)據(jù)

        tempy1= .fields("wd")′獲取站點緯度數(shù)據(jù)

        tepR1H = .fields("R1H")′獲取小時雨量數(shù)據(jù)

        tepObservTime = .fields("ObservTime")′獲取所查詢的時間

        redim preserve gridx1(UBound(gridx1) + 1)′重新定義數(shù)組維數(shù)

        redim preserve gridy1(UBound(gridy1) + 1)

        redim preserve R1H(UBound(R1H) + 1)

        redim preserve ObservTime(UBound(ObservTime) + 1)

        gridx1(i) = zoom * ((tempx1 - xmin) * kx)′站點氣象資料隨地圖漫游

        gridy1(i) = zoom * ((ymax - tempy1) *ky)

        R1H(i) = tepR1H

        if R1H(i) = 0 then R1H(i) = ""

        if R1H(i) = "" then R1H(i) = ""else R1H(i) = Format(R1H(i)10, "0.0")

        ObservTime(i) = tepObservTime

        i = i + 1

        .MoveNext

        loop

        end with

        rszdzdata.close

        for j = 1 To i - 1

        picdrawmap.print R1H(j)

        next

        基于以上編程方法,可以根據(jù)不同的業(yè)務(wù)需求增加其他功能,如實時動態(tài)顯示最高氣溫、最低氣溫、不同時段累計降水量等。運用VB編程開發(fā)的銅仁市防汛氣象服務(wù)平臺,運用上述方法嵌入了區(qū)域自動站雨量、溫度的地圖化顯示,通過人機對話實現(xiàn)放大、縮小、漫游、刷新等功能,同時能夠?qū)A(chǔ)地理信息(縣界、縣名、鄉(xiāng)鎮(zhèn)名)進行顯示和消隱,并實現(xiàn)了統(tǒng)計查詢、語音報警等功能。圖1所示為銅仁市防汛氣象服務(wù)平臺界面。

        圖1 銅仁市防汛氣象服務(wù)平臺界面

        3 結(jié) 語

        運用VB語言,結(jié)合地圖資料及區(qū)域自動氣象站數(shù)據(jù)庫編程,實現(xiàn)氣象數(shù)據(jù)的可視化。充分發(fā)揮VB人機交互界面及可編譯功能的優(yōu)勢,實現(xiàn)了氣象資料在地圖上的自動標注和填充,并具有圖形縮放、漫游功能,基本實現(xiàn)了氣象信息的可視化、形象化和實時化。單獨應(yīng)用VB編程實現(xiàn)氣象要素在地圖上的可視化顯示是可行的,這為今后開發(fā)具有繪圖功能的業(yè)務(wù)系統(tǒng)提供了新的思路。

        [1] 李強,何遂,吉莉,等.基于GIS的小區(qū)域氣象災(zāi)害精細化預(yù)警系統(tǒng)[J].氣象科技,2014,42(1):89-93.

        [2] 柳錦寶,何政偉,王增武,等. 四川省氣象服務(wù)信息系統(tǒng)的設(shè)計與實現(xiàn)[J].氣象科技,2010,38(4):484-487.

        [3] 林伙海,吳陳鋒.基于Surfer8.0實現(xiàn)雨量圖形可視化[J].氣象,2006,32(7):115-118.

        [4] 葛小東.VB編程實例與技巧集粹[M].北京:中國科學(xué)技術(shù)出版社,2003:20-21.

        Meteorological Data Visualization by Based on VB Program

        ZHOUChangzhiMAOHaixiangYANLihuaCHENFangyuan

        (Meteorological Bureau of Tongren City, Guizhou Province, Tongren Guizhou 554300, China)

        In order to display the meteorological data more intuitively and visually, this paper introduces a design by visual programming method of VB to realize techniques and methods of mapping, meteorological data display, graphics zoom and roaming.

        VB programming language; meteorological data; visualization

        2016-09-30

        貴州省氣象局氣象科技開放研究基金項目“銅仁市氣象信息共享及氣象災(zāi)害聯(lián)動防御決策指揮系統(tǒng)研究”(黔氣科合KF〔2014〕01號);銅仁市氣象局氣象科技基金項目“銅仁市氣象臺預(yù)報業(yè)務(wù)服務(wù)平臺升級改造”(銅氣科合〔2015〕05號)

        周長志(1982 — ),男,工程師,研究方向為短期天氣預(yù)報及系統(tǒng)開發(fā)。

        TP319

        A

        1673-1980(2017)02-0088-04

        猜你喜歡
        銅仁市雨量漫游
        寧夏紅柳溝流域水沙變化及產(chǎn)沙分析
        貴州銅仁市石阡縣第二小學(xué)
        貴州銅仁市石阡縣第二小學(xué)
        基于小波去噪的稱重雨量數(shù)據(jù)分析
        貴州銅仁市逸群小學(xué)
        貴州銅仁市思南縣第三小學(xué)
        霹靂漫游堂
        NASA漫游記
        SL—1 型雨量傳感器故障分析排除和維護
        西藏科技(2016年5期)2016-09-26 12:16:40
        流域平均雨量
        日韩极品视频在线观看| 亚洲av永久无码精品网址| 国产一区二区波多野结衣| 国内精品久久久久久无码不卡| 91精品国产91久久综合桃花| 久久精品国产亚洲av蜜臀久久| 成人免费av色资源日日| 久久精品国产亚洲av久| 亚洲国产精品久久久久婷婷老年 | 毛片在线视频成人亚洲| 国产精品偷窥熟女精品视频| a级毛片100部免费观看| 亚洲精品无码高潮喷水在线| 久久久久国产精品四虎| 亚洲性av少妇中文字幕| 国产欧美高清在线观看| 99久久免费国产精品| 人人妻人人澡人人爽人人精品电影| 久久综合一本中文字幕| 日韩精品中文字幕第二页| 免费无遮挡无码永久在线观看视频 | 色狠狠一区二区三区香蕉| 成人无码激情视频在线观看| 国产亚洲精品视频网站| 欧美又大又硬又粗bbbbb| 极品新婚夜少妇真紧| 久久水蜜桃亚洲av无码精品麻豆 | 亚洲a∨好看av高清在线观看| 日韩av中文字幕波多野九色| 国产精品久久久久久妇女| 鲁鲁鲁爽爽爽在线视频观看| 91精品啪在线观看国产色| 亚洲最大视频一区二区三区| 亚洲偷自拍国综合第一页| 十八18禁国产精品www| 亚洲午夜福利精品久久| 日韩精品一区二区三区含羞含羞草| 国产免费人成视频网站在线18| av鲁丝一区鲁丝二区鲁丝三区| 人人做人人妻人人精| 在线观看黄片在线播放视频 |