当前位置:首页>> >>


VB6.0环境下基于MO的太阳位置参数查询系统的开发.rar

收藏

资源目录
    文档预览:
    编号:20180915222605381    类型:共享资源    大小:372.34KB    格式:RAR    上传时间:2018-09-15
    尺寸:148x200像素    分辨率:72dpi   颜色:RGB    工具:   
    20
    金币
    关 键 词:
    VB6 环境 基于 MO 太阳 位置 参数 查询 系统 开发
    资源描述:
    第 1 页 (共 20 页)VB6.0 环境下基于 MO 的太阳位置参数查询系统的开发作 者:于艳超指导老师:戚鹏程摘要:本文旨在基于 Visual Basic(VB)环境下的 Map Objects(MO)地理信息系统控件,利用 MO 的一系列对象开发嵌入式的地理信息系统。以研究开发的太阳位置参数查询系统为例充分说明 MO 在进行信息系统开发时的优缺点。同时,通过对太阳位置参数查询系统的研究,为太阳能利用、楼层采光等现实问题以及遥感辐射定标、遥感影像的辐射校正、地表辐射能量平衡计算等科研问题提供方便的查询工具。关键词:Visual Basic;Map Objects;太阳位置参数;太阳高度角1 引言1.1 太阳位置参数对于地球上的某个地点,太阳高度是指太阳光的入射方向和地平面之间的夹角,专业上讲太阳高度角是指某地太阳光线与该地作垂直于地心的地表切线的夹角。我们用 h 来表示这个角度,它在数值上等于太阳在天球地平坐标系中的地平高度。房地产产业的迅猛发展,楼层建设得越来越高,随之高层和超高层建筑所导致的室内日照不足的现象也日益突出,因此建筑采光问题也越来越受到更多人的关注。适宜的日照时间,不仅能起到消灭室内细菌和干燥房间的作用,而且在冬季能使房间获得太阳辐射热而提高室温。而日照时间与太阳高度和方位角有十分密切的关系。根据本文提出的查询系统,可以查询太阳高度角,因此该系统具有一定的社会效益和经济效益。在科学研究中,太阳高度角是极为常用的参数,比如进行遥感辐射定标、遥感影像的辐射校正、地表辐射能量平衡计算等。1.2 Map Objects 简介第 2 页 (共 20 页)Map Objects(简称 MO)包括一个 ActiveX 控件(OCX)也就是 Map 控件,还包括 45 个 ActiveX 自动对象。通过这些对象,可以使用任何支持 ActiveX 的程序开发环境 (如 Visual Basic、Delphi、PowerBuilder 等),开发嵌入式 GIS 应用系统。根据功能的不同可将这些 ActiveX 对象分为 9 类:(1)视图窗口控制对象 该类对象定义了控件视图窗口的环境,如当前图层、前景颜色、背景颜色、滚动条、鼠标指针等属性,并定义了视图刷新、视图窗口图形的放大、缩小、漫游等成员函数。(2)视图窗口事件对象 该类对象定义了控件视图窗口的消息响应函数,如各类鼠标事件,利用该类对象可以实现热区查询、坐标显示等软件功能。(3)图层对象 控件视图窗口的空间图形数据是分层组织的,它们可以是 Arc/Info Coverage、SDE、Shape 等图形数据层,也可以是 Erdas、TIFF、BMP 等图像数据层,分层组织的方法使空间数据叠加成为可能。(4)空间数据对象 Map Objects 中提供了点、线、面三类空间数据对象,其中面状对象又分为 Rectangle、Ellipse、Polygon 三类。(5)空间数据库访问对象 提供了对 Arc/ Info、 SDE、 ArcView、 Shape 等空间图形数据以及多种图像数据的访问支持,借助空间数据库访问对象,用户程序可成为客户端的空间数据浏览器。(6)外部数据库连接访问对象 提供了对多种数据库(如Dbase、FoxBase、FoxPro、ODBC 等) 的连接访问, 这使得基于 Map Objects 的应用程序成为关系数据库的前端应用工具。(7)符号对象 定义了空间数据对象的符号、线型、颜色、标注的字体、尺寸等属性, 使得空间数据对象能以规定的属性在控件视图窗口显示出来。(8)制图对象 通过对属性字段的信息提取、统计及简单分类,生成各类专题地图。(9)地址对象 提供了对地址的模糊查找、图形定位、地址匹第 3 页 (共 20 页)配等功能,利用这些对象能创建交通道路管理一类的应用系统。但 MO 不能执行某些高级功能,如高质量地图输出、地图坐标系投影、表面模型或网络分析等高级空间分析、拓扑编辑,应用者可利用 ESRI 的其他产品如 Arc/Info、ArcView 来实现高级功能。2 系统设计2.1 系统设计原则系统设计遵循以下原则:(1)系统实用,可操作性强,界面友好;(2)具有良好的可扩充性,便于更新换代不断发展;(3)系统开发要标准化、规范化,并且安全可靠,在实用的基础上力求以最小的投入获得最大的产出。2.2 系统结构设计太阳位置参数查询系统的设计,一方面是为普通用户,在太阳能安置、楼层采光等现实问题上提供方便的查询相关参数的工具。为用户提供购房、太阳能利用等方面的信息,为决策提供信息支撑。另一方面是为科研工作人员进行遥感辐射定标、遥感影像的辐射校正、地表辐射能量平衡计算等科研问题提供方便的技术参数。因而要求系统能方便灵活的提供所需要的太阳高度角信息,及与之紧密相关的太阳位置,太阳方位等相关信息,能够为用户提供灵活的查询手法。考虑到不同用户对于要查询的地方的信息(如经纬度等)的了解程度不同,以及需要获取的城市的等级的不同(如省级、地市级、县级) 。因此,系统设计了包括输入坐标式和用户交互式(通过 GUI 界面)2 个一级菜单,另外用户交互式一级菜单下又有 3 个不等的二级子菜单,系统结构图 1 所示:2.3 基本算法项目涉及主要公式如下:sinhsicos0.372.56in0.149in20.17sin38cot        ②① - -第 4 页 (共 20 页)式①中:太阳高度角以 h 表示;太阳赤纬(与太阳直射点纬度相等)以 δ 表示;观测地地理纬度用 φ 表示;地方时(时角)以 t 表示;式②中:太阳赤纬(与太阳直射点纬度相等)以 δ 表示;式中 θ 称日角;地方时(时角)以 t 表示。图 1 系统结构图2.4 图层数据设计系统以 GIS 图层来组织数据。以县级为例,采用全国行政区划图作为底图,国家测绘与地理信息局普查结果作为属性数据源,利用 Arcmap 软件进行地图数字化、编辑属性表。数据分为行政区,道路,河流,居民点等 4 个图层。属性数据包括行政区、道路、湖泊、河流、居民点等的名称及名称的拼音,经纬度坐标,面积、周长,类别编码,级别,类别(点、 线、面)等,属性数据与空间数据通过其关键字 ID 相联。用户交互式中省级、市级、县级查询系统的实现,通过在类模块中设置一个公有变量,在点击省级、市级、县级时对此公有变量赋予不同的值(此值是存放省级、市级、县级图层数据的文件夹名) ,并将此值传递到下一级中。省级、市级、县级切换代码如下:Private Sub Command1_Click() '选择省级的按钮代码Dim ZHshengji As StringFindDoc = “ZHshengji“ '将文件夹 ZHshengji 字符串传递给公有变量 FindDocText2.Text = FindDocForm4.Show 1 '显示用户交互式界面Form5.Hide '隐藏查询类别窗体End Sub第 5 页 (共 20 页)Private Sub Command2_Click() '选择市级的按钮代码Dim ZHdishiji As StringFindDoc = “ZHdishiji“ '将文件夹 ZHdishiji 字符串传递给公有变量 FindDocText2.Text = FindDocForm4.Show 1 '显示用户交互式界面Form5.Hide '隐藏查询类别窗体End SubPrivate Sub Command3_Click() '选择县级的按钮代码Dim ZHxianji As StringFindDoc = “ZHxianji“ '将文件夹 ZHxianji 字符串传递给公有变量 FindDocText2.Text = FindDocForm4.Show 1 '显示用户交互式界面Form5.Hide '隐藏查询类别窗体End Sub2.5 系统功能设计针对前述的系统设计的目标,本系统的功能设计为以县级、市级、省级政区划为底图,把县级、市级、省级内的道路、河流、湖泊、居民点等内容在图上表示出来,其空间位置通过地图的位置来表示,各要素(道路、河流、湖泊、居民点)的属性(如名称、级别、经纬度等)通过列表框(ListBox) 、组合框(ComboBox) 、标签(Label)和文本框(TextBox)等控件的组合的形式来实现。与地图控制相关的操作等可以通过图例(Legend) 、指示图(Locator map)等控件相结合的形式向用户提供。因此,系统的功能包括地图显示功能、地图缩放、漫游功能、图层数据控制功能、要素查找功能(从图到属性和从名称到图两种方式)等。2.6 系统界面设计以用户交互界面为例,根据不同行政区域大小不一(特别是县级区划比较多)的特点,本系统改变大多数系统把主窗口放在系统右部,导航图和图层控制器放在左部的做法。本系统把主窗口放在系统左边大部,把导航图和图层控制器放在中右部,右侧部在系统运行过程中,根据不同的运行过程会有不同的情况,如操作提示、选中的要素个数及列表、要素的属性、要素的位置、要素的个数、要素的类型(点、线、面)等。另外,考虑到不同用户的知识水平第 6 页 (共 20 页)及经验不同,为用户提供了方便灵活的查询界面。各主要界面如下所示:图 2 用户交互式-县级 图 3 用户交互式-市级图 4 用户交互式-省级 图 5 欢迎界面第 7 页 (共 20 页)图 6 查询方式的选择 图 7 查询类别的选择3 系统实现本系统利用面向对象编程语言,通过在编程语言中嵌入能完成地图显示功能的组件即可实现,编程语言和功能组件有很大的选择空间,不同的语言和组件在编程时会有一定的差异,下面就本系统所做的基于 VB+MO 的实践作简要介绍。3.1 开发环境的选择Visual Basic 是一种可视化编程语言,它继承了 Basic 语言简单易学的优点,采用面向对象程序设计思想,使编程变得更加方便和快捷,使用它可以方便地开发各种应用软件。Map Objects(简称 MO)是 ESRI 开发的提供制图与空间分析功能的组件,它可以直接插入到许多标准开发环境中进行二次开发。它具有低成本、易开发、不需要其它 GIS 平台、使用环境广、通用性好、易于推广等优点,是目前国际上最通用的地理信息系统开发工具,也是目前国内开发人员的主要选择。基于上述 Visual Basic 和 Map Objects 的优点,根据本系统的应用性要求较强的特点,太阳高度查询系统以这两者的结合作为开发环境进行系统开发。3.2 太阳位置参数查询功能的实现本查询系统从 2 个方面实现了太阳位置参数查询:第一是在主程序中通过单击“输入坐标式”:在弹出的窗体中,选择要查询的日期、时间,并在“输入要查询的纬度”一项输入查询地点的纬度,然后单击“计算” ,即可在下面的标签上显示出太阳高度角;另外,单击返回按钮,可以返回到查询方式的界面;第二是在主程序中单击“用户交互式” ,在弹出的窗体上分“省级” 、 “市级” 、 “县级”三类:如果选择省级,则显示的地图上,城市为各省省会和直辖市,河流为三级河流,行政区划为省级;如果选择市级,则显示的地图上,城市为地级市,河流为四级河流,行政区划为省级;如果选择县级,则显示的地图上:城市为县级,河流为五级河流,行政区划第 8 页 (共 20 页)为县级。用户点击相关项目会弹出装载有相应类别的道路、河流、湖泊、居民点的窗口,用户在该窗口中选中感兴趣的地点后,地图上相应要素会闪烁,同时会在右侧的列表框、组合框和标签上显示相关属性,如上图 2、3、4 所示。然后单击“计算太阳高度角”按钮,在弹出的窗体中, “输入地理纬度”一栏已经自动复制用户点击地点的纬度,并且此栏不可编辑,用户只能选择日期和时间进行交互。2 种方式的查询界面如图 8、图 9 所示:图 8 输入坐标式-查询第 9 页 (共 20 页)图 9 用户交互式-查询4 系统代码限于篇幅,本文仅节选了该系统的主要代码。4.1 查询方式的实现Private Sub Command1_Click() '输入坐标式按钮代码Unload Form2 '卸载查询方式窗体Form3.Show '显示计算太阳高度角窗体End SubPrivate Sub Command2_Click() '用户交互式按钮代码Form2.Hide '卸载查询方式窗体Form5.Show '显示查询类型窗体End SubPrivate Sub Command3_Click() '帮助按钮代码Text1.Left = 1680 '文本框的位置及内容Text1.Top = 1800Text1.Height = 3735Text1.Width = 5175Text1.Visible = TrueText1.Text = “帮助: “ & vbCrLf & vbCrLf & “一、在已知要查询的地理坐标的情况下,请单击输入坐标式;“ & vbCrLf & vbCrLf & “ 二、如果不知道地理坐标,可以单击用户交互式,并用鼠标选择所要查询的地方,同样可以获得所要的结果。“ & vbCrLf & vbCrLf & “南阳师范学院环境科学与旅游学院“ & vbCrLf & “yuyanchao,2012/3/29“Command1.Enabled = FalseCommand2.Enabled = FalseCommand4.Left = Command3.LeftCommand3.Visible = FalseCommand4.Visible = TrueEnd SubPrivate Sub Command4_Click() '返回按钮代码Text1.Visible = FalseCommand4.Visible = FalseCommand3.Visible = TrueCommand1.Enabled = TrueCommand2.Enabled = TrueEnd SubPrivate Sub Form_Load() '加载代码第 10 页 (共 20 页)Text1.Visible = FalseCommand4.Visible = FalseEnd Sub4.2 计算太阳高度角的实现Private Sub Command1_Click() '计算按钮代码Const PI = 3.14159265358979Dim D As DateText5.Text = Year(DTPicker1.Value) '查询日期的年数D = Text5.Text + “/01/01“ '查询的当年的元旦Text8.Text = 79.6764 + 0.2422 * (Year(DTPicker1.Value) - 1985) - Int((Year(DTPicker1.Value) - 1985) / 4) '计算 n1Text9.Text = -DateDiff(“y“, CDate(Format(DTPicker1.Value, “YYYY-MM-DD“)), CDate(Format(D, “yyyy-mm-dd“))) + 1 '计算积日Text10.Text=(2*PI*(Text9.Text-Text8.Text))/365.2422 '计算日角Text11.Text=0.3723+23.2567*Sin(Text10.Text)+0.1149*Sin(2 *(Text10.Text))-0.1712*Sin(3*(Text10.Text))-0.758*Cos(Text10.Text)+0.3656*Cos(2*(Text10.Text))+0.0201*Cos(3*(Text10.Text)) '计算太阳赤纬Dim E As LongText12.Text= CDate(Format(Combo1.Text + “:“ + Combo2.Text + “:“ + Combo3.Text, “h:mm:ss“)) '需要查询的时间E=Abs(Combo1.Text*3600+Combo2.Text*60+Combo3.Text-43200) '相差的时间的秒数Text19.Text=((Int(E/3600))*15+(Int((E-(Int(E/3600))*3600)/60)) +(E-(Int(E/3600))*3600-(Int((E-(Int(E/3600))*3600)/60))*60)/60)*PI/180 '地方时Dim A, B, C As SingleA=Text11.Text*PI/180 '太阳赤纬角If Text2.Text = ““ ThenMsgBox “请输入 1~360 之间的数字“EndElseB=Text2.Text*PI/180 '观测的地理纬度End IfC=Format(Sin(A)*Sin(B)+Cos(A)*Cos(B)*Cos(Text19.Text),“##.######“) '太阳高度角的正弦Label1.Caption=Format(Atn(C/Sqr(-C*C+1))*(180/PI),“##.######“)Select Case C '最后结果的处理Case 1Label26.Caption = 1Case 0 To 1Label26.Caption = “0“ + Str(C)Case -1 To 0Label26.Caption = “-0“ + Str(Abs(C))Case Else
    展开阅读全文
    1
      金牌文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    0条评论

    还可以输入200字符

    暂无评论,赶快抢占沙发吧。

    关于本文
    本文标题:VB6.0环境下基于MO的太阳位置参数查询系统的开发.rar
    链接地址:http://www.gold-doc.com/p-185963.html
    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服客服 - 联系我们
    copyright@ 2014-2018 金牌文库网站版权所有
    经营许可证编号:浙ICP备15046084号-3
    收起
    展开