您好、欢迎来到现金彩票网!
当前位置:满堂彩 > 海区总图 >

探析潜用电子海图应用系统的研究——航线规划与海图改正模块pdf

发布时间:2019-07-07 19:17 来源:未知 编辑:admin

  1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予受理。

  西安电子科技大学 硕士学位论文 潜用电子海图应用系统的研究——航线规划与海图改正模块 姓名:姜湧 申请学位级别:硕士 专业:计算机系统结构 指导教师:高有行 2001.6.1 Y.《1985‘ 摘要 本文研究了潜用型电子海图应用系统的航线规划模块与海图改正模块在 Windows NT平台的软件实现。通过采用了多任务操作系统实现了电子海图应用 系统的多任务。两个软件模块的功能基本满足了海图作业的要求。规划航线模 块利用双向链表法在软件上实现了对规划航线中航路点的快速存储与检索,以 及对航线安全区域内的要素与危险要素进行匹配来完成规划航线的安全检测。 此外对海图作业中的两点距离计算的算法进行了分析与比较。最后本文给出了 电子海图的数据结构,及一些主要程序的流程图。 关键词: 电子海图,航线规划,海图改正 Abstract Inthis softwaremodulesofRoute andElectronic paper,the Design Chart CorrectionofECDIS(Electronicand Chart Information Display System) onthe PlatformofWindowsNT and multi— arestudied implemented.This taskofECI)ISis a multi—task implemented operating byadopting of the NT.Functionsbothsoftwaremodules system._Windows satisfy of use E1ectroniCChart modulemakes requirements Design operation.Route ofdouble-direction 1inked1istmethodinsoftwareto auick implements iS andindexofsearoute1ine ofsearoute storage dots,and safety detected meansof andunsafeelemantsinthe by safe saftey matching distanceofbetweentwo region.In thatcalculate addition,thealgorithins inthe data points Chartare and the event,the compared.In analysied of structures ElectroniCChartandflow ofsome diagrams important arealso . programs presented. Keywords:Electronic Chart,Route Chart Correction. 序言 ——奠—. 序 日 海图是以海洋为描绘对象的地图,它按照一定的数学规则,根据各自的具 体用途,经过选择和概括,并用符号将海洋上的各种自然和社会现象的分布状 况缩小表示在平面上。因此,海图是海洋区域的模型,也是海洋信息的载体。 航海所用的海图是航海图。早期的航海图都是纸制海图,由船员直接在海图上 进行各种海图作业。但是纸质海图有着一些难以克服的缺点。例如纸质海图标 准化后,就难以修改;纸质海图受印刷机械、海图框、海图桌尺寸以及纸张的 大小等限制,给海图的分幅带来了困难;纸质海图修改工作量大,做计划航线 和海图作业时,绘算工作量大等等。此外随着近几个世纪科学技术的飞速发展, 现代船舶上装备了越来越来多的电子航海仪器。其中有计程仪、平台罗经、雷 达、GPS等先进的航海仪器。这些设备都为人类进一步探索海洋作出了巨大贡 献。由于海图作业一直是人工在纸质海图上进行,当驾驶人员离开驾驶室也无 法保证对船舶的连续操纵和避碰;而且,纸质海图不能提供任何报警和全面综 合衡量船舶周围环境的信息。所以它己不能适应现代航海和海上作战的需求。 为了克服纸质海图的不足,人们一直在寻找一条新的出路。近年来随着计算机 辅助制图的发展,海图终于可以用数字形式储存于某种先进的介质上(如光盘), 这就产生了电子海图。电子海图是以数字形式表示的,描写海域地理信息和航 海信息的海图。它的出现,开创了航海史上的新纪元。 现在我们通常所讲的电子海图实际上指的是电子海图应用系统。电子海图 应用系统最初是作为综合导航系统的显示终端出现的,它的功能简单,除了显 示海图外,还可画上航线。进入八十年代以后,各种高速的工作站和微机大容 量存储设备,大屏幕高分辨率的彩色显示器,高速的图形、图象处理技术相继 Hydrographic E1%的nic Chart In鼬m蕊on Display sv讹m,简称ECDlS系统。而把小型的不一 定满足IHO所颁布的规范标准,在海图显示上等效与纸制海图的电子海图应用 Chart 系统称为Electronic System,简称ECS(电子海图系统)。我们可以这样 说ECDIS是由电子海图显示装置和系统电子航海图两大部分组成的。电子海图 应用系统自动化水平高,使用简单,它克服了纸制海图的缺点,它应具有以下 主要功能:进行定位作业、航路检测、综合显示、雷达信息叠加处理、避碰等 多种功能。 进入二十世纪以来,高新技术被广泛用于军事领域。现代战争的胜负取决 与科学技术发展的程度,而不再是依靠人海战术。现代海上战争对导航系统提 出了更高的要求,不但需要非常精确的导航的定位,而且要向各武器系统提供 精确的基准数据,以及向作战指挥系统和C3I系统提供丰富的图形、图象信息 和战事态势信息,以保证舰艇的安全航行和作战指挥的成功。我国的电子海图 系统研制起步较晚,1988年海军航保部测绘研究所研制的皿T一10lENC系统 是我国第一代电子海图应用系统。自HDT.101ENC系统以后国内许多厂所院校 都相继开展了电子海图应用系统的研究工作,电子海图技术逐步成熟。 本文给出了海图上投影变换以及海图上两点之间的距离等算法,阐述了电 序言 2 子海图的数据结构。并对潜用型电子海图应用系统中航线规划模块和海图改正 模块进行了软件实现。 第一章研制潜用型电子海图应用系统的任务要求 第一章研制潜用型电子海图 应用系统的任务要求 第一节潜用型电子海图应用 系统的任务要求 随着现代战争的发展,高科技不断应用到军事领域。电子海图应用系统是 近几十年来发展起来的一门新技术,无论在军用还是民用方面都有广阔的应用 前景。 本文设计的电子海图应用系统(软件)是舰船综合导航系统的重要组成部 分,同时也是作战指挥系统的重要信息源。它主要满足了以下几项任务要求: a.海图模块用于电子海图信息及导航系统主要配套设备导航参数的集中显 示; b.完成导航作业功能,包括拟订计划航线;接受导航信息,在电子海图上 实时标绘船位,实时监测舰船沿计划航线航行情况;根据需要叠加雷达 目标信息;提供语音报警; c.向作战指挥系统提供电子海图背景支持; d.根据航海通告,完成电子海图的改正。 电子海图应用系统完成上述的功能时,调用的是矢量化的数字海图。数字 海图是以数字信息表现海图的一种计算机专用数据产品。它是由国家权威部门 制作和提供的。只有了解了海图文件的数据结构,才能使海图应用系统的设计 更合理。下面简要的介绍一下电子海图的数据结构。 第二节 电子海图的数据结构 电子海图文件是航海图经过矢量化之后形成的矢量数字地图。通常以图幅 单元划分,每个图幅单元形成两类数据文件来表达海图要素的信息: 第一类是矢量数据,表示事物或现象分布在什么位置,矢量数据一般包括 空问位置数据和拓扑数据两项:空间数据指在某一坐标系被标识的地理实体的 坐标数据;地理实体根据空间分布的特点,分为点状、线状和面状三种类型, 它们在海图上分别用点、线、面来表示。例如,海上灯标、陆上孤立建筑物等 地理实体,在海图上以点状要素形式表示;铁路、海岸线等以线状要素形式表 示;海上禁航区、陆上湖泊等则以面状要素形式表示。 第二类是属性数据,说明事物和现象是什么。属性定义的多少见数据字典。 属性实体数据存放在通用关系数据库DBF文件中;属性数据是对图上要素的分 第一章研制潜用型电子海图应用系统的任务要求 一4 类、分级、质量和数量特征做进一步描述的非图形信息,它可以是数字型、逻 辑型或字符型的信息。属性数据一般分为定性和定量数据两种:定性描述地理 事物和现象类型(如海岸线、底质等)的数据、名称(如城市名、河流名等) 数据等属于定性数据的范畴;定量描述地理事物或现象的数量、等级、度量等 (如道路等级、河流长度、船的载重量等)都属于定量数据的范畴。属性数据 与矢量图形数据的联系,则通过海图要素的内部序号来完成。 为了便于对海图信息能按类型、层次、编码、属性进行检索,设计了如下 的数据结构。这种数据结构面向的对象是矢量型数字海图,采用了先进的链表 结构和多级关键字检索技术,可表示空间目标间的全拓扑关系,占用数据空间 少,查询速度快。可满足动态多方式、多层次显示海图的需要,同时还可兼容 显示符合本标准的地图。 一幅海图存放在硬盘上,采用树状目录管理如图1.1所示,即一个目录下, 由存放在多个次级子目录下的物理层(Coverage)要素组成,每个物理层又分 作多个逻辑层(Layer)。海图文件的命名规则如下图结构,首级目录名为图号, Name), 其下存放总体控制文件,后缀为CTL,次级目录为物理层名(Coverage 其下存放矢量图形文件和属性信息文件,属性信息可补充矢量图形信息表示不 了的,描述空间目标的数量,质量的特征信息。矢量图形文件后缀为DHT,属 性信息文件后缀为DBF。它适用于按地理信息编码的数字海图,可方便地对地 理信息按类型,按层次,按特征码,按属性进行检索、查询、分析、运算。各 文件结构简述如下: 首级目录名为图号,其下存放总体控制文件,后缀为CTL,次级目录为物 Name),其下存放矢量图形文件和属性信息文件,矢量图 理层名(Coverage 形文件后缀为DHT,属性信息文件后缀为DBF。各文件结构如下所述。 1)总体控制文件 它是海图文件的总体控制信息,包含下列信息:图号、图名、投影方式、大 地坐标系、地图生成时间、地图比例尺分母、基准纬线或中央经线属性标志、 物理分层数等。控制文件的总长度根据海图的信息最多为2026个word(字)。 牟田文十幸组成 /0001海圈A 形 /0001海田B // /0001海田c { { 第一章研制潜用型电子海图应用系统的任务要求 5 21每层图形文件 每幅图由若干图层组成,在本程序设计中按照海军出版社制订的“数字海 图数据字典”,每幅海图分为29层,各层图形文件结构相同,记载构成矢量地 图的空间坐标信息,其由三部分组成, 它们之间数据关系如图1-2 控制头区 索引区 数据区 图1.2 (1)控制头区 控制头区记录了索引区首地址、数据区首地址、地图文件总长等。 (2)索引区 索引区为检索数据所用,由系统头区中索引区首地址开始。它指出了该幅 海图所有要素(包括海岸线、灯塔、浮标、沉船、港口等)的数据索引。每种 要素可与一条或一条以上的索引相对应,而每种要素的索引条数由其数量所决 定。 (3)数据区 数据区存放要素的几何信息、拓扑信息和文本字符串,自控制头区中数据 区首地址开始。 各数据查找关系: A. s)+(序号.1)*32(字) 每条索引开始地址一索引区首址(index B. 每个要素的实体数据地址一该要素索引中查到的数据地址。 每个要素的实体数据长度一该要素索引中查到的数据长度,点状或 两点线除外。 c. 读取一幅图的数据步骤是,先自总控文件+.CTL文件中读取有关全 图控制信息,如投影、比例尺、控制点等,然后依次打开各个图层。 D. 读取一个图层内有关要素的步骤是先读取控制信息,再自序号l至 最后序号读取索引,并评判是否为所要索引,是则按此序号来找实 体数据或记录此序号以备后面批处理。 E. 读取一个要素的步骤是先按序号找到索引,可按索引找到数据。 3)每层属性文件 属性文件采用DBF表格文件格式,可用关系数据库管理系统Dbase、Foxpro 等进行管理,又易于其他商用数据库系统进行数据交换。 第一章研制潜用型电子海图应用系统的任务要求 空间信息与属性信息的关联十分紧密,要素与属性的连结是通过要素在 图内的唯一表示码一要素序号连结的。每一物理层中几何类型相同的要素共有 一个属性文件。一个属性信息文件分作如下三部分: 属性数据和空间数据分别存储,属性数据由关系数据库直接管理。空间信 息在·.dht文件中有唯一内码,属性信息则隶属于某空间要素,属性和空间信息 间的关系有三种: a)1对1关系:一个要素对应一个属性记录; b)n对l关系:多个要素对应一个属性记录; c)1对n关系:一个要素对应n个属性记录。 即一个要素对应n个属性表中的属性记录,对应的方法是:通过空间信息中的 索引产生第一级属性表的表名和属性记录号,在该条记录中有一long型字段, 其中存放下一级属性表的表名。第二级属性表同样有long型字段,指出下一级 属性表名,通过这种方式构成属性的嵌套结构。若没有下一级属性,则该字段 值为空。属性数据的组织结构独立,各属性表之间的关系描述不直接采用直接 连结(join)的方式操作。而是按照确定表的指针,构成关系表之间的逻辑关系。 这种联系是临时性的。能够支持一对一和一对多的关联关系,通常不采用组合 链。 第二章电子海图应用系统的方案构成 第二章电子海图应用系统 的方案构成 第一节电子海图应用系统的方案构成 为了日后可以适应用途不同的各类舰艇,以及海图应用系统功能的扩充、 改进和维护。本应用系统软件按设计功能要求分为以下四个主要模块(如图2. 1): 1.航线.航行复视模块 本论文设计了其中的航线规划模块与海图改正模块。 第二节电子海图应用系统各模块主要功能 根据海图作业中的实际需要,应用系统中四个模块均设计具备了如下功能: 海图全局图与局部图的同时显示、海图的选取、海图的开窗放大、海图图层的 选取、手动移图、海图要素查询、海图上直接点取海图。 下面依次将潜用型电子海图应用系统各模块的主要功能分别叙述如下: §2.1.航线规划模块 海图航线规划模块是本应用系统重要的功能模块。舰船在出航前,航海人 员应根据任务要求和海区有关资料,用该模块在电子海图上预先拟订计划航线, 或是选取以前制订的经验航线,进行航线安全检测并生成航海计划表,其主要 功能有: 1)从海图数据库中选取所需海图并进行规划航线)对规划航线)生成航线规划文件及航海计划表供导航模块使用; 钔生成碍航物清单。 §2.2.舰船导航模块 舰船导航模块是本应用系统中最重要的功能模块,舰船在航行中需要始终 运行导航模块,导航模块的主要功能有: 1)实时接收来自五路串口的数据。这五路串口传送的数据分别 对应的是:组合导航信息、GPS、ARPA雷达目标、测深仪和气象仪; 2)对实时数据进行显示和标绘; 3)能够方便地完成常用的海图显示、查询、计算、定位等功能; 4)自动报警、当舰船航行方向出现暗礁、危险沉船、浅滩等,或偏离航 第二章 电子海图应用系统的方案构成 8 匦罾}链《章蒜暖毯螺曦暖翅匦嫩m衄剥旺龆l_N匝 第二章电子海图应用系统的方案构成 线时以红色文字和语音两种方式发出报警; 5)自动对航行过程进行记录,以供复视模块重现航海过程; 6)其他辅助功能。(锚位报警、确定身份、记录值班人员等); §2.3.海图改正模块 由于海洋环境是多变的,所以要根据航海通告来对海图进行更正。海图改 正模块的功能包括:海图要素的增加、海图要素移动、海图要素删除、改正要 素查询、改正要素存盘。 §2.4.海图复视模块 复视模块是潜用型电子海图应用系统中的一个辅助模块, 用于重现导航模 块记录的航海数据,必要时帮助航海人员分析过去的航海经过或分析事故原因。 复视模块的主要功能是播放航行记录文件,为了方便使用,可以只选择航海过 程的一部分进行重播,而且重播的速度也可以调节。另外,复视模块还能够重 现航海过程中的报警信息。 第三节电子海图应用系统的软件 平台与开发工具的选取 一个软件的成功与否,与它运行的操作系统与开发工具有着直接的联系, 好的操作系统与软件开发工具可以大大减少开发人员的工作量,提高开发效率。 §3.1电子海图应用系统的软件平台选取 电子海图应用系统是以一台586微机作为主处理机的,它需要并行地处理 多个任务。比如:导航数据接收、海图漫游、海图作业、以及用户请求的其它 各种任务等。由于导航数据的实时性和用户请求的随机性,如果采用单任务操 作系统(比如:DOS系统)作为显示模块的开发平台,则势必使得软件开发的 工作量和难度都非常大,因为软件开发者必须自己来解决多任务的调度和管理; 所以,电子海图应用系统适宜于选用多任务操作系统,这不仅可以简化应用软 件的设计,还能够在很大的程度上提高应用软件的可靠性:本软件设计中的电 NT(New 子海图应用系统采用的软件平台为Windows TechnoIogy)操作系统。 technology)操作系统逐渐脱颖而出。它具有安全性好、32位、抢先型、多任务、 用户界面友好的特点。从系统的可实现性、软件的易维护性和可移植性等几方 面考虑电子海图应用系统软件设计,决定选取Windows NT作为本系统的软件 平台。它的以下几个特点为本系统的软件设计提供了基础。 1.Windows NT的虚拟内存管理 位处理芯片所提供的潜在能力未被充分利用。而Windows NT最终超越了DOS 的局限,成为一个完整的32位保护模式下的操作系统。虚拟内存并不是真正的 物理内存,但它能够成功的完成真实内存的功能,使每一个.windows应用程序 能寻址4GB大小的逻辑地址空间,且不管当前系统安装的物理内存为多大。这 大大提高了海图显示、漫游、开窗放大的速度。 2.Windows NT的多任务技术 第二章电子海圈应用系统的方案构成 10 多任务处理从最终用户的观点来看,多任务指同时运行不同类型的应用程 序。当用户正在一个应用程序上工作是,能够在后台运行另一个应用程序。操 作系统用不同任务之间的快速切换来获得这个效果,而不是安排多个处理器同 NT 时完成一项以上任务,实际上微处理器在任务之间切换非常快。Windows 多任务又可分为两种类型:抢先型和协作型。 multitas 抢先型多任务(preemptiveking)。操作系统在单独会话中管理 应用程序线程的活动,同时不放弃对处理器的控制。 multitasking)。操作系统不管理共享的会话时 协作型多任务(cooperative 间,而以每个16位的Windows应用程序通过释放对处理器的控制来共同协作, 以使其他应用程序能够使用处理器。 &Windows NT中多线程 线程是Windows NT引入的概念。线程与进程密切相关。进程是程序被载 入内存的部分,其中包括分配给该程序的所有资源;线程用来按照程序代码中 的一条路径执行程序指令。每一个进程都有一个初始线程,初始线程(也称初 线程)可以创建其他线程。当一个程序需要同时做多件事情时,它必须决定是 创建线程还是创建进程来共同承担某项工作。应尽可能选择线程。因为系统可 以很快地建立线程,线程之间的相互联系也更容易实现。多线程(muitit删ng) 能够真正同时执行一个应用程序中的多个程序代码(或线程),它使应用程序快 速、顺利被执行(线程是被调度执行的最基本代码单位)。 §3.2电子海图应用系统开发工具的选取 本应用系统是软件的设计,一个好的软件开发工具是非常必要的。面向对 面向对象的程序设计语言很多,C++是其中的佼佼者,它不但实现了面向对象, 而且有利于众多的C程序员和C应用程序,C++与C语言是连续包容的,这也 是其成为最流行的OOP程序设计语言。C+÷有各种工作环境和版本,经过比较 电子海图应用系统的软件开发工具选取了Bodand公司基于Windows95/NT平 windOWS图形用户界面的许多先进特性和设计思想,采用了弹性的、可重用的 和完整的面向对象程序语言。 软件重用代码,具备更好地模拟现实环境的能力,这使它公认为是自上而下编 程的杰出代表。它通过给c语言中加入扩展语句,把函数“封装”进Windows 编程所必需的“对象”中。面向对象的编程语言使得复杂的工作条理清晰、编 写容易。它的特点不是对对象本身而言,而是对它们处理工作的能力而言的。 对象并不与传统程序设计和编程方法相兼容,部分面向对象的方式往往使情况 更糟。除非整个开发环境都是面向对象的,否则对象产生的好处还没有带来的 重用的开发工具。一些早期的具有OOP性能的程序语言,虽然具有面向对象的 特征,但不能轻松地刻画可视化对象,与用户交互能力较差,程序员仍然要编 写大量的代码。C++Builder的推出大大改变了这种现状。我们不必自己建立对 象,只要在提供的程序框架中加入完成功能的代码,其余都交给C++Builder去 作。如想生成漂亮的界面和结构良好的程序,C++Builder将帮助我们完成。 C++Builder使得可视化编程与面向对象的开发框架紧密地结合在一起,提高了 第二章电子海图应用系统的方案构成 我们开发程序的效率。 第三章航线规划模块设计 第三章航线规划模块设计 第一节 航线规划模块程序流程 舰船执行任务前,应由航海负责人员根据受领的任务、海区的航海条件和 海区的气象情况,拟定出符合任务要求、又能确保航行安全和省时、经济的航 行计划。这时需调用此模块来制订航行线路,然后进行航线安全检测并生成航 海计划表。其主要功能为两个,一是航线规划(编辑航路点),另一是航线检测 及安全判定。航线规划模块的程序流程图如图3.1。 l 韧始化 l l l ——m———一取韧始海圈.—一m一 r—No—● ◇◇ /佘, 肇改航路点 丫 l 安全拴测计划航蛀 l 叠-齄略占 l ’”“ l l l l 生成航线计划表 安全拴铡计划航线 l I (!竺!) 】生成航线航线规划流程图 第三章航线规划模块设计 第二节 航线规划模块设计软件实现的功能 航线规划模块的用户界面见图3-2。相对应的功能如下 §2.1选取旧航线 此功能使用户可在已规划的航线及经验航线列表框中选取或删除所需的航 线规划新航线 此功能可创建新航线。规划模式主要完成航路点的创建、移动、插入、删 除、嵌入航线等功能,它又分为以下几个功能 (1)创建新航路点:在原航线最后一个航路点之后添加一个航路点。创建航 路点有三种方法。 a.光标点取法:直接用光标在海图上点取一点,从上一航路点到光标位置 之间将出现一条连线,这条连线表示将要添加的航线。当前光标的经纬 度显示在窗口的右上角,光标与上一航路点间的方位距离显示在窗口的 右下角。当光标位置符合要求时,这时光标所在的地理位置即为新的航 路点。 b.方位距离法:此功能可通过输入尾航路点到下一航路点的距离方位确定 下一航路点的经纬度,并可进行安全测试。 c.物标定位法:此功能可通过输入尾航路点到下一航路点来看某一物标的 方位来确定下一航路点的经纬度,并可进行安全测试。其中物标的经纬 度可在海图上由光标直接点取。 (2)移动航路点 把原航线上的航路点移至一新位置,将光标移动到欲移动的航路点的附近 (近可能的靠近),移动光标时,如果所选航路点相关航线能够被拖动,则说明 该航路点已经被选中;反之,说明该航路点未被选中,这时,应该调整光标位 置,使之距离航路点更近。选中航路点之后,即可将航路点拖至期望位置,光 标与上一航路点及下一航路点间的方位距离显示在窗口的右下角,这时的光标 所在的地理位置即是航路点的新位置。 (3)插入航路点 在原航线的相临两航路点间插入一新航路点。移动光标至欲插入航路点的 航段的航线上,如果能够拖动该段航线,则说明该航段已经被选中:反之调整 光标位置重新选取,选中航段之后,即可将插入的航路点拖至期望位置,光标 与上一航路点及下一航路点的方位距离显示在窗口的右下角,这时的光标所在 的地理位置即是插入航路点的位置。 (4)嵌入航线 在原航线的相临两航路点间嵌入一段经验航线或已有航线。此功能可在经 验航线及已有航线列表中选取要嵌入的航线。将光标移动到欲嵌入航线的航路 点附近(尽可能地靠近),所选航线即可插入到该航线的航路点及下一航路点之 间。逵壶立皇垣厶航堕盛功篚丕圃廷王室适△鳆垦二基魈缛:鱼堑西仝盛逝仝 丝土的航堕直。 (5)删除航路点 旧呔足暖卷辎贷堰骚爨N-£匝 第三章航线规划模块设计 将光标移动到欲删除的航路点附近(尽可能地靠近),若选中,则此航路点被 删除;反之,调整光标位置重新操作。 §2.3航线安全检测 另外因为各海区情况复杂,在航线制订与修改以后要对航线进行安全检测, 检测的方法是在海图数据库中截取离计划航线海里(此距离可按需 求在软件中设置)的海区,由计算机搜索此区域内有关的特征码,若有暗礁, 特殊海区或低于安全水深的情况则提示用户修改航线生成航海计划表 规划航线结束后生成一个航海计划表,它根据给出的航路点,按照船速自 动计算出航行时间、转向时间等参数,见表3.1。 编号 经纬度 真航向 航速 航行 转向 航程 余航程 图号 备注 时间 时间 00 00 未定义 00l 00:00 0l 38。40’49”.1N 18 00l28 00;28 5001 17.2 8.525.2 水上 120。34’39”.3E 航行 02 38‘48,55”.3N 00:4001:08 61.7 15 10.115.15001 水上 120’34’50”.4E 航行 03 38‘5842”.3N 00:3401:42 0.00 13 7.47.7 5001 水下 120。34’50”.4E 航行 表3—1 第三节规划航线软件设计中所用 的双向链表算法 在计算机中,数据存储和读取的方式有队列法、堆栈法、链表法和二叉树 法等。实际应用中,队列法和堆栈法都有严格的限制,即不可以随机存取,又 要求有一个连续的存取区,特别是堆栈法当数据取走后,在原存取区中就不再 存在该数据了。链表法则没有上述限制,它可以随机存取链表中的任意一项信 息,链表不要求将数据放在一片连续的存储区内等。链表是一个动态的、较为 复杂的数据结构。通常数据结构的复杂程度与数据检索相应时间、数据存储空 间有关。数据结构越复杂,则数据检索时间约短。链表的主要用途是用于数据 在数据文件中的存储、查询、插入、排序等。 在本海图应用软件的程序设计中选用了链表结构主要是因为它以逻辑顺 第三章航线 序,而不是物理顺序(链表不要求存储在一片连续的物理顺序内)。同时,链表 能以随机形式访问它的存储单元,而不破坏链表的信息。在航线规划模块中, 以航路点来表示舰船在海图中的位置。由几个航路点组成了航线,如要对航线 进行修改就要对航路点进行添加、删除、移动等操作。在此把每个航路点当作 链表中的一个结点,由几个航路点来建立一个链表。在数据结构中可知链表又 有单向链表、循环链表和双向链表等。在单向、循环链表中结点只有一个指示 直接后继的指针,因此,从某个结点出发只能顺指针向后寻查其它结点。此时 如要查寻结点的直接前趋,则需从表头指针出发,这样所需的时间就大大增加。 因此在设计中我们选用了双向链表法。双向链表克服了这个缺点,在双向链表 的结点中除了数据域以外,还有两个指针域,一个指向直接后继,另一指向直 接前趋。这样在双向链表中操作中,求链表长度、取元素、元素定位等计算时 只需一个指针既可,而在插入、删除时则需要同时修改两个方向上的指针。现 将双向链表的插入与删除算法程序与把航路点作为链表进行操作的程序描述如 下: §3.1.插入算法 Status ListInsert—Dul(DuLinkList { ?f在带头结点的双向链表L中第t个位置z前福入元素e? ///的合法值为1《=i-表长H return ERROR;lIP=NULL 鼹第1个元素不存在 if(!(s=(DuLinkList)malloe(size of(Dul3、Iode)))) return ERROR; s-data=e; s-prior=p—。)prior;p-prior—‘next=s; s-next=p;P一prior=s: return ok; InsertDul ) //List §3.2.删除算法 Statue List Delete_Dul(DuLinkList&L,inti,ElemType&e) t:i(=表长 \,/翻除带头结点的双向链表L的第i个元素.1韵合法值为1 return ERROR; /,P=№乙L.朝第1个元素不存在 e=p一data; p-prior—‘next=p——next; free(P); return ok; ) //ListDelete_Dul §3.3.航路点作为链表进行操作 下面列出了在海图应用程序设计中所设计链表的结构及相应的函数功能: 链表头指针pNodeHead, 链表尾指针pNodeTail, 链表结点数CurrentNodeNum 第三章航线 .以及如下参数: 当前结点CurNode; 文件名szFileName; stmctnode { double Lat;//筋/Z double Lon:∥经度 asLat;f纬麦字符 AnsiString AnsiStringasLon;lf经发字符 intbk叫,幺%点素弓≈ AnsiStringMapName-f接点碾在海图名 int x,llLargeBitrap图上x坐标 int y;I/I_argeBitmp图上Y坐标 char flag; struet node+pNodeNext;∥厅存赭铲 struct node*pNodePre;lf茕点指针 ); ff扶文件名为s面讹N弧e的文锋中读取数据。并以这些数据建立双向链表, ff如果文俘不空。蚋返画tI讹:否燹lj返回砸娉. bool G-etChainFromFile(ehar+szFileName); //-.…~……一~~………~一—.~……….. f,将捂定的双囱链表中数据存入文件名为嘲;i:12N弧他的文件中, bool SaveChainToFile(ehar+szFileName); ?f瀵除指定的双向链表, void ClearChain(void); f?将结点c渊0de作为指定的双囱链表的新头缝氛, void node AddNodeToChainHead(struct CurNode); ≠?将结点C渊ode作为指定的双囱链表的新尾结点, void node AddNodeToChainTail(struct CurNode); ?/将结点Ct醐ode插在插入点pNodelT嫩n的螽萄。 . void node InsertNodeToChain(struct node+pNodelnsert,struct CurNode) ff从指定的双囱链表中熟除斟odeDet结点, void DeleteNodeInChain(stmct node+pNodeDel); ,,修改由修该指针曲。如Ch∽铲指向的结赢.撇#fffidCurNode结点, void node ChangeNodelnChain(stmct node+pNodeChange,struct CurNode); 第三章航线 第四节航线安全性检测方法的软件实现 计划航线设计结束之后,在计划航线海里的范围内形成一个 图3.3 新的搜索区域,见图3-3。计算机在海图数据中搜索,并判断在此范围内是否 有陆地、岛屿、暗礁、浅滩或其它存在危险情况的海滩。若有则用语音告警。 程序流程图见图3-4,程序具体描述见下: 报警文件的分类 通过与危险要素进行比较分别对应16种报警语音,按等级高低排序如下: 1)有碰撞危险1.wav 2)危险水深2.WftV 3)偏离锚位3.WSV 4)接近航路点4.wav 5)偏离计划航线.WSV 8)进入换图区8.way 9)前方有陆地9.WaV 下面这些要素码对应的不同的海岸线 石岸)551112(加固岸)551113 551125(丛 垄2)551118(护堤岸)551121(树木岸)3(芦苇岸)551124 草岸)551126 10)前方有岸滩10.wav 下面这些要素码对应不同的岸滩 木、芦苇、丛草边线.Way, 下面这些要素码对应的不同的军事训练区 第三章航线.wav 下面这些要索码对应的不同的礁石 (明礁边线.WaV 下面这些要素码对应的不同的障碍物 581010(碍航物)581011 (水下柱、桩)583004(位置准确柱、桩) 14)前方有沉船14way 下面这些要素码对应的不同的沉船 第三章航线.wav 下面这些要素码对应的不同的限制区 602101(禁区、限制区边缘)3(消磁观测场边线.WSV 下面这些要素码对应的不同的浅水区 测到底水深)561017(特殊水深)1(干出水深)561022(不准确的干出 (加密等深线) /f定义报警文件结构 typedefstruetalarm_attr { int fe_cotmt; char alⅡm_str[128]; char almm_wav[128]; hatalarm_fei256]; m: }ALARM ALARM_n)alarm[128]; §4.1航线安全检测区域检测 根据图3—5所示海岸线或其它危险区域的曲线与检测区域相交,判断函数如下: 图3.5 ,,函数功能:查询所有进入区域的危险要素 //void Map_FindRiskFcInRgn( // int xl,yl,x2,y2, //区域四个点 // short+lpRiskSeq, // short+lpRiskCounL // short+lpRiskLevel, // int /,安全水深 boat_safedeep, // intflag) //-一…一......…一—...…………~… void Map_FindRiskFeInRgn( 1atl,lonl,lat2,bn2, kSoq, short+IpRiskCount, short’lpRiskLovel, int boat_safodecp, intfag) { ff根据靛段生成四个象素点.垂直距离为2海里 n根据航线四个点ee建区域 hrgn=CmamPolygonRgn(pt,4,ALTERNATE); ’IpRiskCount=0; while(1)//循环搜索所有要素 { ,,判断是否搜索到海图尾部 //每次取一个要素 map_indcxffi(stract seamap index+)lplndex; lpIndox+=sizoof(stamotindexl: soamap if(map_index-seq0)continue; // 倒断要素的最大最小值是否 rc.1efl=map_index-w6+scalcx; rc.top=BigMap_BmpHeight[flag]-mapindcx-w7*scaloy; rc.righ卢map_index-wg*scalex; rc bottom=BigMap BmpHeight[flag]-mapindex-w10*sealcy; 倒断矩形是否在区域内部 { continue; 第三章航线规划模块设计 ),,若矩形和区域不相交,则返回 else域!RectlnRegion(hrgn,&rc)) continue; //若矩形和区域相交,则判断要素是否和四个边界相交 ptrflpData_pU:; switch(map_index-type) { //仅判断类型1和5 castl: esse5: //point use number--2,not mapindex-data_.plr 偶要素的折点 if(map_index-w5=2) { +ptr=map_index-w12; +(ptr+1)=妇aap_index-w13; +(ptr+2)--map_index-w15; +(ptr+3)=mapjnd腻-w16; ) else memcpy((char+)p枉,(char+)(IpAddress[flag]+mapindex-data.pt), map_index-length); x1《‘@曲)+scalcx; yl=BigN[ap_BmpHeight[flag]一(’Oh+1))*scalcy; for(i2I;imap indcx-wS//线要素的折点数目;i十卜) { x2=(+0灯+2+i))+scalex; re;.1efl=xl; rc.top--yl; rc.right=x2; rc.bottom=y2; 删断折点RECT是否位于预警区 if(RectlnRegion(hrgn,&rc)) { //Rect范围在5个象素之内,则认定同区域相交 if(abs(rc.1e最-rc.right)5&&absfrc.top-re.bosom)5) { break; 第三章航线规划模块设计 } ,,判断折线是否同预警区相交 To if(Line Line(xl,yl,x2,y2,pt【01.x,pt[e1.y’pt[11.x,pt[1].y) To 『[Line Line(x1,yl,x2,y2,pt[11.x,pt[1].y,ptf2】.x,pt【2】.y) IILineTo_Line(x1,yl,x2,y2,pt[21.墨pt【2】.y,ptp】.x,pt[31.y) T0 I[Line ) { ,/与报警文件作比较 break; } ofif }//end xl--x2; yl=y2; ‘ offor }//end break; ofswitch }//end ofwhile }//end ,厥消所做的矩形 DeleteObjeot(hrgn); §4+2航线安全检测的线所示线段与检测区域相交,判断函数如下: 图3-6 //函数功能:计算线与线是否相交 HBOOL //定义两点连一条直线 Line_To_LimOntxl,intyl, // intx2,inty2, // int pxl,intpyl,//另定义两点连一条直线) boolLineTo Line(intxl,int yl intx2,inty2, int pxl,intpyl, int px2,intpy2) { double al,bl,cl,a2,b2,e2; int x,y; al=yl-y2; bl--x2-xl; cl=yl+(xl-x2)-xl+0l-y2); a2=pyl-py2; b2--px2-pxl; c2=pyl’(pxl-px2)-pxl+(pyl-py2); if(at*b2--a2+b1) { if(el+a2鼍2*a1) murn(he); else return(false); x=(mO((doublO(e2*bl-cl+b2)/(double)(al*b2.a2协1)); y=(int)((double)(cl+a2·c2+a1)/(double)(al+b2-a2+b1)); 诹(x2min(xl,x2))bAt(x--max(xl,x2)) &&(x=min(pxI,px2))&&(x--max(pxl,px2)) &&6,=millol,y2))&&(ymax(yl,y2)) &&(y--min(pyl,py2))&&(y--max(pyl,py2))) retum(false); §4.3航线安全检测的点状物体检测 ——. 苎三兰堕丝望型塑塞堡盐 一25 根据图3-7所示某些点状危险物体(例如沉船、暗礁)在检测区域内,判断函 数如下: 图3-7 ^二~一…一~一~一~一~…………………. ,,函数功能:比较进入区域的要素是否为报警要素 //void CompareAlarm(struct seamap__index+map_indox) //-~一…………一~…~ void ComparcAlarm( slruct seamap_h&x‘map_index, short+lpRiskSeq, short+lpRiskCount, short+lpRiskLevel, int boat__safedeep) { int幻; /,循环 for(i=O;ialarm_count;i++) { fora=Ojalarm【i】.fc_countj++) { if(map_index-fc—alarm[i]alarm_fc[j]) { 腰素特征码匹配成功(对水深点、水深线判断 if(map_index-fc一561001) { if((int)(map_index-w14/10)boat_safedeep) { lpRiskSeq[+lpRiskCo-nt]--map__iadex-seq; lpRiskLvvel[i]=l; ifr+lpRiskCount255) plpRiskCount)=(+lpRiskCount)+l; ),/继续进行要素码匹配 else if(map_index-fc一5610130map_index-fc一561017) { if((int)(map_index-w14)boat safodocp) { lpRiskSeq[+lpRiskCount]=map_index-seq; lpRiskLevel[i]=l; if(+lpRiskCount255) (+IpRiskCount):(+lpRiskCount)+l; else ) else { lpRiskSeq[+lpRiskCount]qnap_index-seq, lpRiskLevel[i]=1; if(+lpRiskCount255) (.1pRiskCount)=(+lpRiskCount)+l; else } break; ofif }//end 、end offor offor }//end 第四章海图改正模块设计 第四章海图改正模块设计 第一节海图改正模块的需求 标准的电子海图的由国家授权的专业职能部门生成。但是,电子海图的局 部修改却是电子海图应用系统所应具有的功能。由于海图表示的是海洋地理模 型,它是无时无刻都在变化着的,经过一段时间,海图的信息与实际会越来越 不相符,因而需要适时地加以更新。对航海图来说,不论制图区域与比例尺如 何,其更新工作应该经常进行,因为航海图是用于航海定位、保证航行安全的。 为了保证航行安全,航海图上表示的内容,特别是航海要素,应随客观的变化 即使修改和补充。例如航道上增加了一条沉船,发现了一个礁石。以及根据某 种需要设立的禁航区。否则就有可能造成航行事故。 §1.1电子海图的修改方式 1.改版 在已版电子海图基础上,根据新测资料和多期航海通告,进 行数字海图的修编,制作新版电子海图; 2.大改正 将电子海图某一变化甚大的矩形区域的数据内容换以新的内 容: ’ 3.小改正 在当前用图上,添加各期有关本图的航海通告改正内容。 4.临时性改正 标注即时收到的无线电航行警告内容。 上面所述的改版和大改正由电子海图出版部门完成。而后两种则在电子海 图应用系统上进行,它以不破坏原版电子海图为原则。海图改正是电子海图应 用系统的重要组成部分,只有定期按照航海通告的内容对正在使用的海图进行 修改,才能使用户用到最新最完善的航海图,从而为舰船的海上航行提供安全 保障。 §1.2电子海图修改原则 由于目前电子海图的修改在国际上还没有统一的方式,各个国家都根据自 己的国情采取相应的修改措施。在我国由于电子海图研制处于起步阶段,现在 海图改正基本上是采用发布纸制海图改正通告。结合海图矢量文件的特点,修 改必须以航海通告为依据,修改方法有以下几个指导原则: L手工输入的修改数据绝不能替换显示器上正式的数据,可采用在一特 定要素上加一横线(或叉号)的方法表示删除。表示所增加要素的符 号与删除符号的形状相同,但颜色不同。注塞i丕能篮邀鎏图数据痊: 只篚添加,丕篚挂除; 2.正式的数据应能自动显示,但它不应重写或擦除; 3.系统应记录全部修改数据,并能核查修改数据。 §1.3海图改正分类 需进行海图改正的航行环境永久性变化包括以下的几个方面的内容: 1.暗礁、浅滩、石油平台等障碍物的发现或者位置变动; 2.大面积渔珊、沉没遇难船只、浮码头、大块浮冰等漂流物的发现或变 化: 3.助航标志的改变: 第四章海图改正模块设计 4.航道、锚地和港区的水深变化; 5.与船只系泊有关的港湾设备的设置和变动; 6.海图上其他与航行有关内容与实际情况不符等。 概括来说海图改正可分为二类:点状目标改正和线、面状目标改正。 点状目标改正:点状目标改正包括插入点状目标,删除点状目标,改正点状目 标的位置、属性及图符。点状目标改正必须解决如下问题: (1)重复插入问题:为了提高显示和查询速度,海图数据是以纸质海图为单位 进行组织的。并且以海图的空间坐标建立所有依附于它的信息索引。对于纸质 海图间重叠部分的所有信息仅存储的一份,以便保证信息的一致性以及改后的 点状实体落入重叠区域内,就有可能

  “原创力文档”前称为“文档投稿赚钱网”,本网站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有【成交的100%(原创)】

http://warfaremma.com/haiquzongtu/115.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有