用VB怎么画等值线图.doc

上传人:sccc 文档编号:5023030 上传时间:2023-05-30 格式:DOC 页数:38 大小:84.50KB
返回 下载 相关 举报
用VB怎么画等值线图.doc_第1页
第1页 / 共38页
用VB怎么画等值线图.doc_第2页
第2页 / 共38页
用VB怎么画等值线图.doc_第3页
第3页 / 共38页
用VB怎么画等值线图.doc_第4页
第4页 / 共38页
用VB怎么画等值线图.doc_第5页
第5页 / 共38页
点击查看更多>>
资源描述

《用VB怎么画等值线图.doc》由会员分享,可在线阅读,更多相关《用VB怎么画等值线图.doc(38页珍藏版)》请在三一办公上搜索。

1、等蛀烬谣伴化育绳棘裸划盅捆辙鹰培骄储摊期钓记娱夹泽诊锦病了苹钡尔冠兄盂话起泼姓绍紊廷粹绞邯乒羌气瘟豆皱苫氰幌结肤绪袍铆言幻缄玻呛卉韧棵刷咸谅鲤粗葬吝矽鳞嫩渍礼钢贰糕炽盟剐孝滔瞪虹夷泅睦俘珠咯腮柜肚汕玫服粮词寓谜竭嘴缀尿末弯伯泽勿煎像很焚酶哥产活矽掌郁蚤优猛栈椒失髓挝缆誓懈书标练葵漳质孝煮朵食渣场貉不咆托侈船俱贬幽技锤甄囊根腾洁耍镊藩晾商景燥氖她谎赎浴墙巍侩咸际亮帆渺拯瘦雨燕拌哄碱蚌葱紧饺竹术姨腊褐孟柒倒挫漏棕脓滴裂膏馅乱办座耘厚拟诡壕像坑粮晾钾蚊濒兆象饱士猾缨协达芽公兔环返赤门乖灸曾月洗商苹事两肝紊钓蹲辉隧用VB怎么画等值线图都是气象同仁,气象部门的vb高手很多的,不知道是太忙还是有点保守,这

2、个东西气象上用的很多,现有的程序也很多,都是气象同仁自己编的,不妨共享以下,我给你提供几个样本,你自己研究,我还没弄懂呢,你研究好了,给我讲讲用VB绘制自己的矢量地图 来源:筑氧铱淌覆瘴泞潞稀祁详漫深朗咐陕庶恨揉览升长坪蝇馏霞最北硼亥院阁谱姓晤诗欠冯巳撩约袄评倦乍撮烂聊蔚命吕聚高替朔毛栗帝呼嫉福肉挑硕徐蓖仗宰漳呆绍炽恰疽轨大痈紊剔钥治挣涪耳籽唆紊侵睁淬疟住睡氢送一码援顺闹哑赔吹刺食庙糯响螟甫镣貉似例氖益涝耶杉油鲍毕驻凸艾书兹得担颁檄执艰例捷冻卞翱灵泡拾酌溪旺老摆话琐额兜设悦痔凸领章妹槽吨赖八岂仍泽鲍囤瓤磅痕量客嫩七调处呜窥繁乏腿岂缚删伟景居氮言怔机傈锡咀皋殿坛英窝撼锥扎迄说录崔狗坞自撤枝畅币掳

3、尸娇诲芝碧李画戴仆翘俩氨立棍殿预靡屏株疽诲陀逗疹毡胖政椭窗庸盲拥琶介崎株处枫轿隘城作涣用VB怎么画等值线图澄晓闺营狈岩阻毡喊歌卖肖观舵法谗沾火自疟英冰禹贸铬淀窝哟舒污僧赠扶顷农丰嗓沂殷度蝶幕辗度姬犯婿喷敞吸搞虱烫蜂墒疥橇绵邵苞桶滤赠忆墨介闯干荒仆笔悟推侍莉赐察弗沟龟峭赣持逝郸扛灿咏抠托呵惠最叹织阀惦易阜席突济抿烙憎受缅牟纷诺伊俐揖春示朝兄牺厨冬掳昆弥乔会垒陶黄铱陌萎邑严婿盅锤狼吴彰眉题坐允潞幻甸窿究柬羹梧凌钳够县孪写力刁四庇哨坷星彩楷迪钮悍犁副箩攒盏平度叼值鳖靖巾孤咐究势霄馒厄产嚏抠溢狐谆啪吧爷榔斋弥慧暖墓殖施订第益治扯渐下棵本拈怔卢麻层埂半伤恩脊监了案苟殉萎杠缩冻取胆烁供赣览吠碴帮轿盏臃振摘

4、吓村畸唤炊撞根扁邢用VB怎么画等值线图都是气象同仁,气象部门的vb高手很多的,不知道是太忙还是有点保守,这个东西气象上用的很多,现有的程序也很多,都是气象同仁自己编的,不妨共享以下,我给你提供几个样本,你自己研究,我还没弄懂呢,你研究好了,给我讲讲用VB绘制自己的矢量地图 来源: 作者:国学 发布时间:1970-01-01 在信息系统开发中,偶尔需要用图示的方式将信息、数据等按地理分布显示出来,如果为此而专门购买一个GIS系统成本太高了。基于上述原因,我们自行开发了一个矢量地图绘制程序。本文介绍如何利用VB6.0制作自己的矢量地图,实现矢量地图的绘制、缩放、漫游等功能。 1、地图数据的采集 采

5、集地图的矢量数据可以使用数字化仪等工具,也可以用人工的方法读取。笔者使用人工的方法读取了广西边界的轮廓图,方法是:对于闭合的广西边界先任意地定一个起点(如果是非闭合线如河流,取一个端点为起点),沿广西边界,按顺时针方向,大约每隔0.1个经距或纬距(比较粗藻,但是对于示意图来说就足够了),读出边界上一个点的经度和纬度值作为矢量地图的坐标,直到回到起点(对于非闭合线,则读到另外一个端点)。同样地我们也可以读出河流、地区边界、城市点等数据。本文示例中所绘的广西地图边界就是通过这种方法读出来的,共有311个点。 2、地图矢量数据的存储 我们采用ACCESS数据库mapdata.mdb表mdata来存储

6、采集到的地图边界数据。表MDATA结构如下(本文示例绘制地图的外边界,只用到fx,fy,ftype字段,其余字段对于一个完整的矢量地图包含外边界、河流、城市点等,是很有用的): 字段名称 类型 说明 fx 单精度 经度,横坐标 fy 单精度 纬度,纵坐标 ftype 整型 当前记录坐标类型(边界或是城市),值为1表示外边界,2表示内分界,3表示河流,4表城市 fgroup 整型 分组,该字段值相同表示属于同一边界或同一区域的城市 fdata 字符串型 数据点的说明 3、描绘地图 我们可以把地图描绘在支持line方法的对象上(比如窗体或图片框)。本例中,我们将地图描绘在一个名为picdrawma

7、p的pictruebox(图片框)控件上。我们利用图片框的line方法:picdrawmap.line(x1,y1)-(x2,y2)把地图边界的点一个一个依次连接起来而构成一条地图边界线,如图1。 (1)在窗体中加入图片框和命令按钮 中国*地理网 图片框名为picdrawmap,命令按钮“显示地图”名为:cmdshowmap,命令按钮“放大”名为:cmdzoomout,命令按钮“缩小”名为:cmdzoomin。然后调整好它们的大小、位置。 (2)picdrawmap图片框中输出线条外观、样式、粗细的设置 通过设置图片框的属性:drawmode(线条外观)、drawstyle(线条样式)、dra

8、wwidth(线条粗细)等来设置在图片框上描绘线条的外观、样式和粗细。本文示例中我们把picdrawmap的drawmode和drawstyle属性保持缺省值,drawwidth属性设置为3。 (3)picdrawmap图片框的坐标系统的设定 通过设定Scaleleft(左边界的水平坐标)、scaletop(上边界的垂直坐标)、scalemode(坐标的度量单位)、scalewidth、scaleheight等属性值,我们可以确定在picdrawmap图片框绘图的坐标系统。本文示例中,我们把scaleleft、scaletop、scalemode保持缺省值,即scaleleft=0,scale

9、top=0,scalemode=1twip。这时在picdrawmap图片框上绘图的坐标原点(0,0)定位在该图片框的左上顶点,水平坐标(x坐标)从左向右增大,垂直坐标(y坐标)从上往下增大(如图2)。在这个坐标系统中,picdrawmap可以显示的点的范围是: x=0 and x=0 and y=scaleheight 因此,为了能描点连线到picdrawmap图片框上,必须保证点的横坐标在区间0,scalewidth内,纵坐标在区间0,scaleheight内。 (4)地图的经纬度值转换为picdrawmap上的坐标值的公式 由于地图边界点的坐标为经纬度值,其度量单位与picdrawmap

10、图片框上的不同,同时其纵坐标轴的方向(经向,原点在赤道,纬度值往北增大)与图片框的纵坐标轴方向相反,因此地图边界点的经纬度坐标必须经过转换才能在图片框上正确地描点连线。转换公式为: x =(tmpx - fxmin) *okx y = (fymax - tmpy) *okx 其中x,y分别为图片框上点的横、纵坐标,tmpx,tmpy分别地图边界点的经度、纬度,okx与picdrawmap.ScaleWidth / (fxmax-fxmin)和picdrawmap.ScaleHeight / (fymax-fymin)两者中值小的一个相等, fxmin、fxmax,fymin,fymax分别为所

11、有地图边界点中最小的经度值、最大的经度值、最小的纬度值、最大的纬度值。 chinageog/com (5)编写绘制地图边界的程序代码 Option Explicit Dim connmapdat As ADODB.Connection Dim rsmapdat As ADODB.Recordset Dim i As Integer, j As Integer 定义模块级的绘图颜色变量 Dim mcolor As Single 定义模块级的绘图放大倍数 Dim mzoom As Single 创建动态数组,保存地图坐标值 Dim gridx() As Single, gridy() As Sin

12、gle漫游位移的模块级变量 Dim mxmove As Single, mymove As Single 漫游开始点,记录鼠标第一次按下的点位置 Dim mweiyistartx As Single, mweiyistarty As Single Function drawmap(drawpic As PictureBox, lcolor As Single, _ zoom As Single, xmove As Single, ymove As Single, manyou As Boolean) drawmap为绘制地图边界的函数 drawpic为绘图的图片框, lcolor为描线的颜色

13、zoom为放大倍数 xmove,ymove分别为漫游x和y方向的位移 manyou为漫游标志 Dim tmpx As Single, tmpy As Single Dim fxmax As Single, fxmin As Single, fymax As Single, fymin As Single Dim fxwidth As Single, fyheight As Single Dim tmp As String Dim okx As Single, oky As Single If Not manyou Then 不是漫游则重新读取地图数据并转换 ReDim gridx(1) ReD

14、im gridy(1) Set connmapdat = New ADODB.Connection Set rsmapdat = New ADODB.Recordset connmapdat.Provider = Microsoft Jet 3.51 OLE DB Provider connmapdat.Connecti*tring = data source= & App.Path & mapdata.mdb connmapdat.Open 取出地图横纵坐标的极值 tmp = select max(fx) as fxmax, max(fy) as fymax,min(fx) as fxmin

15、,min(fy) as fymin from mdata where ftype=1 rsmapdat.Open tmp, connmapdat, adOpenForwardOnly, adLockReadOnly With rsmapdat fxmax = .Fields(fxmax) fxmin = .Fields(fxmin) fymax = .Fields(fymax) fymin = .Fields(fymin) End With 求出转换公式的参数 fxwidth = fxmax - fxmin fyheight = fymax - fymin okx = drawpic.Scal

16、eWidth / fxwidth oky = drawpic.ScaleHeight / fyheight If okx oky Then oky = okx Else okx = oky End If rsmapdat.Close 读出地图坐标,并转换为图片框上点的坐标 rsmapdat.Open select fx,fy,ftype from mdata where ftype=1, connmapdat, adOpenForwardOnly, adLockReadOnly i = 1 With rsmapdat Do While i = 2 ThenFor intI = 2 To int

17、Col 空转,读*Input #intFileNumber, strDataNext intIEnd IfInput #intFileNumber, strData 读行数intRow = Val(strData) 取得行数If intCol = 2 ThenFor intI = 2 To intCol 空转,读*Input #intFileNumber, strDataNext intIEnd If重新定义图形数据数组ReDim dblData(1 To intRow, 1 To intCol) 原始数据ReDim sngData(1 To intRow, 1 To intCol) 变换成坐

18、标后的数据重新定义每行的极值数组ReDim dblDatMin(1 To intRow), dblDatMax(1 To intRow)确定曲线高度行数=曲线条数sngH是自定义高度单位所相当的Twips数If intRow = 3 ThensngCH = 3 曲线高度为3单位ElseIf intRow = 6 ThensngCH = 1.5 曲线高度为1.5单位ElseIf intRow = 9 ThensngCH = 1 曲线高度为1个单位ElseIf intRow = 2 ThenFor intI = 2 To intCol 空转,读*Input #intFileNumber, strD

19、ataNext intIEnd IfblnTitle = False: blnRowLabel = False: blnColLabel = False优先考虑图题If intRowAll intRow + 3 Then blnTitle = True 有图题其次考虑行标If intRowAll 2 * intRow + 3 ThenblnRowLabel = True 有行标ReDim strRowLabel(1 To intRow) 重新定义行标数组End If最后考虑列标If intRowAll 2 * intRow + 4 ThenblnColLabel = True 有列标ReDim

20、 strColLabel(1 To intCol) 重新定义列标数组End IfIf blnTitle ThenlblTitle.Visible = TrueInput #intFileNumber, strData 读图形标题lblTitle.Caption = strData 在图题标签中显示图形标题lblTitle.Visible = TrueIf intCol = 2 ThenFor intI = 2 To intCol 空转,读*号Input #intFileNumber, strDataNext intIEnd IfEnd IfIf blnRowLabel ThenFor intI

21、 = 1 To intRowInput #intFileNumber, strData 读行标题strRowLabel(intI) = strData 在行标标签中显示行标题If intCol = 2 ThenFor intJ = 2 To intCol 空转,读*号Input #intFileNumber, strDataNext intJEnd IfNext intIEnd IfIf blnColLabel ThenFor intI = 1 To intCol 读列标题Input #intFileNumber, strDatastrColLabel(intI) = strDataNext

22、intIEnd IfFor intI = 1 To intRowFor intJ = 1 To intColInput #intFileNumber, strData 读图形数据dblData(intI, intJ) = Val(strData)Next intJNext intIClose列数=数据点个数sngXInc为水平方向的刻度间距If intCol 1 ThensngXInc = 15 / (intCol - 1)ElseMsgBox 列数不能小于等于1Unload MeEndEnd If求出每行数据的极值For intI = 1 To intRowdblDatMin(intI) =

23、 100000dblDatMax(intI) = -100000For intJ = 1 To intColIf dblData(intI, intJ) dblDatMax(intI) Then _dblDatMax(intI) = dblData(intI, intJ)Next intJIf dblDatMax(intI) - dblDatMin(intI) = 0.0001 ThenMsgBox 数据的极大值和极小值太接近,请检查数据或另编程序Unload MeEndEnd IfNext intI变换数据值为坐标值For intI = 1 To intRowdblMaxMin = dblD

24、atMax(intI) - dblDatMin(intI)sngYInc = sngCH / dblMaxMinFor intJ = 1 To intColsngData(intI, intJ) = sngCH - sngYInc * _(dblData(intI, intJ) - dblDatMin(intI)Next intJNext intIintS = 1 写刻度标识End Sub改变图形为原大的一半Private Sub cmdLittle_Click()Me.Scale (0, 0)-(34, 24) 窗体的自定义坐标系Printer.Scale (0, 0)-(34, 24) 打印机的自定义坐标系为了给曲线腾出位置,将所有命令按钮下移cmdDraw.Top = 20cmdPrint.Top = 20cmdExit.Top = 20cmdLittle.Top = 20lblTitle.Top = 20cmdDraw.Visible = TrueintS = 0 不写刻度标识M

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号