用于水文气象监测的海图坐标转换方法与流程

文档序号:15888793发布日期:2018-11-09 19:56阅读:759来源:国知局
用于水文气象监测的海图坐标转换方法与流程

本发明属于海洋数据分析的图像算法方面的应用,主要是使面板的像素点和大地坐标、经纬度之间的转换方法应用到海图的显示中,可以在海图上对数据进行操作,达到图像操作连接数据的目的。

背景技术

地理坐标系是利用三维球面来定位地球的表面位置,以实现通过经纬度对地球表面点位引用的坐标系。地理坐标系事实上早已应用于天文地理中,如今随着卫星定位航天遥感等定位技术的进步,因此也引发了对地理坐标系的精确定位。目前地理坐标系已经广泛应用于地理信息、航海导航、大地测量、地图制图等方向。在经济、社会、科学的发展和国防建设上都发挥着越来越多的作用。



技术实现要素:

本发明的目的是给出一种用于水文气象监测的海图坐标转换方法。本发明按照地理坐标系的理论,将坐标系和海图之间进行转换,使得像素点和坐标系联系起来,绘制海图,并操作数据,达到直观精确的目的。技术方案如下:

一种用于水文气象监测的海图坐标转换方法,将像素和大地坐标经纬度融合,同时实现在图像上操作数据,包括:

(1)将像素坐标转换成经纬线坐标

①设定画布原点,计算当前像素坐标点与画布坐标原点的距离;

②由当前像素坐标的缩放比例zoomfraction获得对应的经纬线的图上比例;

③该点的纬度则等于x坐标的距离除以图上比例因子;

④该点的经度则等于y坐标的距离除以图上比例因子;

(2)根据经纬度坐标求出像素坐标

①首先定义一个点,默认为(0,0);

②由当前像素坐标的缩放比例zoomfraction获得对应的经纬线的图上比例;

③像素点的x坐标等于纬度坐标乘以图上比例因子加上原点坐标x;

④像素点的x坐标等于纬度坐标乘以图上比例因子减去原点坐标y;

(2)在实现绘制世界地图之前,首先采用utf-8方式读取数据文件,数据文件包括海陆边界线上点的经纬坐标,根据坐标个数的多少,地图有粗糙和详细之分,默认为大数据地图,每一闭环分为一组,每一闭环的开始位置标出了该组中的数据个数;

(3)绘制世界地图,步骤如下:

①通过坐标转换函数,得出画布左上角坐标(0,0)和右下坐标(width,height)来确定所要显示的最大、最小经纬度范围;

②取出文件字符串中满足该范围的数据点;

③把满足要求的数据点转化成像素坐标;

④当满足闭环条件时,即起始坐标和终止坐标为同一个点时,连接数据点,应用选定颜色填充该封闭区域;

绘制经纬线时,根据当前缩放比确定线间的增量值nincrement,根据该缩放比例范围内的度分秒增值,画出经纬线;

(4)海图模块主要功能是在经纬度地图上直观的显示测量船的测量轨迹,采用cgp控件得到鼠标产生拖拽时的起始点_dragstartpt,而拖拽的终止点实际上是鼠标的当前位置,通过起始点和终止点求出偏移坐标,将画布原点设置为同样的偏移,即可实现整个控件的平移;

缩放功能设计为鼠标滚轮向前滚动时控件放大,向后滚动时控件缩小,且以鼠标位置为缩放的中心点,当控件放大时可以观察到详细的数据点,缩小时则整体上观察测量船的航线轨迹,方法如下:首先建立一数组latlonginsspd,该数组规定在一定缩放比例范围内,鼠标滚轮滚动一格,当前的缩放比例增加或者减小多少,数组前两列表示范围,最后一位表示该范围内的递增递减速度,当对鼠标当前点进行缩放动作时,该经纬点的像素坐标不变,即可实现以鼠标位置为中心进行缩放,设画布原点坐标为(x,y),鼠标当前点坐标为(x0,y0),鼠标当前点对应的经纬度坐标为(long,lat),缩放动作完成后图上比例因子为n,则通过下列公式重新计算并重置画布原点坐标:

x=x0-long*n

y=y0+lat*n

当将图像缩小到一定范围内,能够观察到数据点且经纬度线的跨度变小;

(5)添加选中区域放大的功能,即通过鼠标左键拉出一矩形框,便以该框内的图线作为控件要显示的区域,由像素跨度求出对应的经度跨度latpixel,则选定区域的缩放比例n等于控件的高度与经度跨度的比值,将像素缩放比例转换为图上比例因子;将选定区域的中心点作为画布原点坐标,重新计算并根据图上比例因子重置原点坐标,即可得到放大选中区域;

寻找目标点的方法为:以鼠标点击点为中心,在鼠标点击点周围加、减10像素计算出一正方形区域,遍历数据点,将在该正方形区域的点取出,找出离鼠标距离最小的点,即为要高亮的点。

本发明将大地坐标和经纬度坐标融合,使其在海图上能充分体现空间直角坐标系和大地坐标的关系,不仅可以显著提高工作效率而且其程序化的设置可以保证公式的准确性,提高计算精度,可以提高地理投影变换的计算效率,满足计算机处理海量数据的变换需要。

附图说明

图1坐标系说明

图2根据指定点的位置和缩放比获取经纬度坐标

图3小环数据

图4大环数据

图5测线图成果图

图6平移前位置

图7平移后位置

图8鼠标滚轮递增递减速度

图9缩放前图像

图10缩放后图像

图11选中框区域

图12放大选中区域

具体实施方式

目前gdi+(graphicdeviceinterface+)是gdi的后继者,它是.net框架为操作图形提供的应用程序编程接口(api)。使用gdi+可以用相同的方式在屏幕上或者打印机上显示信息,且不用考虑特定设备的显示细节。gdi+主要用于在窗体上绘制各种图像,可以实现绘制各种数据图形、数学仿真等。下面简要介绍gdi+的三种主要元素:坐标系、像素、graphics类。图形的位置信息是图形设计的基础,要想掌握图形的位置信息,可以通过使用坐标来实现。gdi+使用3个坐标空间,分别是:世界、设备、页面。其中名为世界的坐标系是用于建立特殊图形世界模型的坐标系统,也是在.net框架中传递给方法的媒介;名为页面的坐标系统是指程序中使用的窗口或者控件所使用的坐标系;名为设备的坐标系应用在一些特定的物理设备中,当我们在这些物理设备中进行绘制操作时,就会产生坐标,这些设备或机器包括电脑屏幕或纸张。坐标轴总是以左上角为原点(0,0),除了原点之外,也包括横坐标轴(x轴)和纵坐标轴(y轴),如图1就是一个标准坐标系。

像素实际上是图像元素,是图像的元素构成了图形的基本单位,分辨率的大小就是靠像素的多少来说明、衡量,即以像素每英寸(pixelsperinch)为单位。例如,2048*768分辨率表示水平方向上每英寸长度上的像素数是2048、垂直方向上每英寸长度上的像素数是768。一个像素所能表达的不同颜色数取决于比特每像素,该值通过取2的色彩深度次幂获得。

作为gdi+的重要类之一,graphics类的一个变量表示的是即将要进行图形绘制的画布,也称为表面,这个变量可以通过调用其中的方法来画出的图形以显示到相应的器材上,这个类与固定规定的物理设备紧密联系、上下联系,可应用于建立图形图像的变量。graphics类中有很多元方法元函数,这些函数可以通过被对象调用,在相应的设备中绘制出相应的图形,比如点、线、圆、图形、文本等信息,它属于一个绘制功能的根柢类,使用的过程即是在指定的媒介上创建一个对象,之后通过这个对象调用类中含有的相应的函数进行图形的绘制。

本发明将像素和大地坐标经纬度融合,提高测量的精度使得测量精确,同时在图像上操作数据更加直观显著增强数据的操作性。

机器设备的坐标,是专门面向机械设备的坐标,这种坐标的单位是像素或者设备能表示的最小长度,x向右增长,y向下增长,但是(0,0)坐标(即设备坐标的原点位置)不一定在设备的左上角位置。本实施例采用的世界地图的数据是经纬线类型,这与屏幕坐标不相符,因此,要实现世界地图与经纬线图和屏幕坐标相吻合,实现两类坐标的转换并且增加进去缩放和平移,是本发明的目的。

其操作过程为:

(1)首先介绍本发明中,根据该转换函数,将像素坐标转换成经纬线坐标的方法。

①计算出当前像素坐标点(一般为鼠标点击位置,由e.x、e.y获取)与画布坐标原点(即显示区域的中点,设置为经度为零、纬度为零的位置)的距离。

②由当前像素坐标的缩放比例zoomfraction获得对应的经纬线的图上比例。

③该点的纬度则等于x坐标的距离除以图上比例因子。

④该点的经度则等于y坐标的距离除以图上比例因子。

如图2所示。

根据经纬度坐标求出像素坐标与此类似,步骤如下:

①首先定义一个点,默认为(0,0),即程序中的result。

②由当前像素坐标的缩放比例zoomfraction获得对应的经纬线的图上比例。

③像素点的x坐标等于纬度坐标乘以图上比例因子加上原点坐标x。

④像素点的x坐标等于纬度坐标乘以图上比例因子减去原点坐标y。

(2)在实现绘制世界地图之前,首先要读取数据文件。该数据文件包括了海陆边界线上点的经纬坐标,根据坐标个数的多少,地图有粗糙和详细之分,在程序中可以人为控制,默认为大数据地图。每一闭环分为一组,每一闭环的开始位置标出了该组中的数据个数,图3和图4列举了其中的一个小环数据和一大环数据为例。

本发明为了便于维护,采用了utf-8方式来读取该地图数据文件。

在读取完数据后开始进行绘制,步骤如下:

①通过坐标转换函数,得出画布左上角坐标(0,0)和右下坐标(width,height)来确定所要显示的最大、最小经纬度范围。

②取出文件字符串中满足该范围的数据点。

③把满足要求的数据点转化成像素坐标。

④当满足闭环条件时(起始坐标和终止坐标为同一个点时),连接数据点,应用选定颜色填充该封闭区域。

绘制经纬线时,根据当前缩放比确定线间的增量值nincrement:

nincrement=(latlongdrawspd[i][2]*m_nscale)(1)

由此确定起始度数对应的像素坐标startxbl:

startxbl=(int)math.floor(-1*m_ptcanvas.x/nincrement)(2)

终止位置的像素坐标stepxbl:

stepxbl=(int)math.ceiling((_width)/nincrement)(3)

由此可在该范围内,根据该缩放比例范围内的度分秒增值,画出经纬线。

(4)海图模块主要功能是在经纬度地图上直观的显示测量船的测量轨迹,本实施例采用了我国测量船在南海区域的数据,成果图如图5。

本系统采用的cgp控件可以得到鼠标产生拖拽时的起始点_dragstartpt,而拖拽的终止点实际上是鼠标的当前位置(e.x,e.y)。这样就可以通过起始点和终止点求出偏移坐标,将画布原点设置为同样的偏移,即可实现整个控件的平移。注意在产生平移动作时随时将拖拽的起始点重新设置为鼠标的位置,以保证控件的平移是随着鼠标的位置持续运动。平移前位置如图6。

按住鼠标滚轮,将控件向右平移,如图7。

缩放功能设计为鼠标滚轮向前滚动时控件放大,向后滚动时控件缩小,且以鼠标位置为缩放的中心点。当控件放大时可以观察到详细的数据点,缩小时则整体上观察测量船的航线轨迹。

首先建立一数组latlonginsspd,该数组规定了在一定缩放比例范围内,鼠标滚轮滚动一格,当前的缩放比例增加或者减小多少。数组前两列表示范围,最后一位表示该范围内的递增递减速度,如图8所示。

当对鼠标当前点进行缩放动作时,该经纬点的像素坐标不变,即可实现以鼠标位置为中心进行缩放。设画布原点坐标为(x,y),鼠标当前点坐标为(x0,y0),鼠标当前点对应的经纬度坐标为(long,lat),缩放动作完成后图上比例因子为n,则通过下列公式重新计算并重置画布原点坐标:

x=x0-long*n(4)

y=y0+lat*n(5)

缩放前系统图像如图9。

当将图像缩小到一定范围内,可以观察到数据点且经纬度线的跨度变小,如图10所示。

(5)一直应用鼠标滚轮进行缩放比较繁琐,考虑到用户的使用感,添加了选中区域放大的功能,即通过鼠标左键拉出一矩形框,便以该框内的图线作为控件要显示的区域。设计思路如下:

1、与平移相同,首找到鼠标拖拽的起点(x0,y0)和终点(x,y),这两个点就是放大框的左上角点坐标和右下角点坐标。由此可以求出放大框的中心点坐标

2、设放大框的x,y方向的跨度分别为δx=x-x0,δy=y0-y。之后分别求出δx与控件宽度的比值xpixel,δy与控件高度的比值ypixel,用来确定以哪种方向为准进行等比例缩放。若xpixel≥ypixel,则以经度跨度为准,否则以纬度跨度为准。

3、以以经度跨度为准为例。由像素跨度求出对应的经度跨度latpixel,则选定区域的缩放比例n等于控件的高度与经度跨度的比值,按照前面介绍的缩放比例转化的方法,将像素缩放比例转换为图上比例因子。将选定区域的中心点作为画布原点坐标,重新计算并根据图上比例因子重置原点坐标,即可得到放大选中区域。如图11和图12所示。

寻找目标点的方法为:以鼠标点击点为中心,在鼠标点击点周围加、减10像素计算出一正方形区域,遍历数据点,将在该正方形区域的点取出,找出离鼠标距离最小的点,即为要高亮的点。这样的好处是不用求出每个点到鼠标点的距离,加快了程序的运行速度。

另外,还可以将测量船的测量起始点与终止点分别设置为绿色和红色,便于观测。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1