首页> 中国专利> 一种在Google Earth数字地球平台中移动KML几何元素的方法

一种在Google Earth数字地球平台中移动KML几何元素的方法

摘要

本发明公开了一种在GoogleEarth数字地球平台中移动KML几何元素的方法,包括以下步骤:加载KML对象;提取KML几何元素;设置移动距离;调整KML几何元素的空间坐标;在GoogleEarth数字地球平台上显示移动变换后的KML几何元素。本发明能够快速、批量的对多个KML几何要素进行移动变换,并将变换后的KML几何元素显示在GoogleEarth数字地球平台三维视窗中进行可视化及查询、分析操作,从而在一个统一的地球空间框架内灵活、自由、精确的移动多个KML几何元素的空间位置。本发明的操作简便、自动性高,可以很方便的扩展或集成到GoogleEarth应用系统之中,可应用于以KML规范编码的地球空间信息(特别是地下空间信息)的三维可视化与交互分析之中。

著录项

  • 公开/公告号CN103995695A

    专利类型发明专利

  • 公开/公告日2014-08-20

    原文格式PDF

  • 申请/专利权人 华东师范大学;

    申请/专利号CN201410152863.0

  • 发明设计人 朱良峰;

    申请日2014-04-16

  • 分类号G06F9/44;

  • 代理机构上海蓝迪专利事务所;

  • 代理人徐筱梅

  • 地址 200241 上海市闵行区东川路500号

  • 入库时间 2023-12-17 00:45:42

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2020-04-03

    未缴年费专利权终止 IPC(主分类):G06F9/44 授权公告日:20170215 终止日期:20190416 申请日:20140416

    专利权的终止

  • 2017-02-15

    授权

    授权

  • 2014-09-17

    实质审查的生效 IPC(主分类):G06F9/44 申请日:20140416

    实质审查的生效

  • 2014-08-20

    公开

    公开

说明书

技术领域

本发明涉及地球空间信息技术领域中的数字地球技术,具体地说是一种在Google Earth数字地球平台中移动KML(Keyhole Markup Language)几何元素的方法,该方法针对KML几何元素进行处理,能够解决在Google Earth数字地球平台上对KML几何元素进行空间位置移动变换过程中所遇到的各种难题。

背景技术

目前,以Google Earth为代表的数字地球系统已成为在全球范围内集成、共享、显示和分析大规模、多尺度、多时相地球空间信息的可靠平台。Google Earth数字地球平台之所以能被地球科学家、专业技术人员乃至社会公众所广泛接受,主要是由于它具有开放的体系架构,支持基于OpenGIS KML编码标准(OpenGIS Keyhole Markup Language Encoding Standard,简称OGC KML或KML)的地球空间信息描述方式。在Google Earth平台中,用户不需从底层开发可视化环境,只需要使用KML编码规范来描述和保存自己所拥有的地球空间信息,Google Earth就能快速加载并渲染、绘制出这些信息所表示的地球空间对象。

近年来,国内外学术界和工程界开展了在Google Earth平台上基于KML编码规范进行地球空间信息模拟和可视化方面的研究,取得了一些有用的成果,为推动Google Earth数字地球平台的发展与应用发挥了巨大的作用。但是,使用现有的Google Earth数字地球平台及其操作界面进行基于KML的地球空间信息的模拟、可视化与交互分析,仍然面临着很多障碍。其中一个最突出的问题就是Google Earth对地球空间的表达存在着维度缺陷,无法直接显示位于地形面以下的模型或对象。为了模拟和显示地下空间对象,需要使用特定的技术或方法将地下空间对象提升到地形面之上。这可通过两种方法来实现。第一种方法是设定一个抬升高度,将位于地形面以下的空间对象统一抬升到地形面之上,从而使地下空间对象悬浮在实际位置的上方。这是一种静态抬升的方式,实现起来比较简单,但地下空间对象的高程一经抬升即为固定值,无法进行交互式的动态移动。另一种方法是预先生成一系列处于不同高程位置处的空间对象,应用KML<TimeSpan>元素来设定这些空间对象的浮现时间,使用GoogleEarth内置的时间滑动条来交互式的控制地下空间对象在纵向上的位置,从而使其能显示在地形面之上。这种动态抬升的方式具有较强的动画效果,但KML对象数据存储冗余较多,实现起来也比较复杂。另外,Google Earth内置的时间滑动条主要是为控制时间而设计的,使用时间滑动条来抬升地下空间对象时,时间滑动条的双滑块特性和时间显示方式常常会误导用户,难以直观的展现地下空间对象的实际位置。

要解决在Google Earth中模拟和显示地下空间对象这一难题,一个直观的思路就是用户能够可视化的、交互式的移动地下空间对象,进而改变地下空间对象在三维地球空间中的位置。因此,对用KML几何元素来表示的地球空间对象进行移动操作是一种普遍的需求,用户常常需要移动(包括在地形表面上平移和在竖直方向上升降)地球空间对象的坐标位置。但由于现有的Google Earth客户端程序与地球空间实体的交互能力较弱,用户无法在GoogleEarth中自由、灵活、精确的移动KML几何元素的空间位置。使用标准的Google Earth客户端程序,用户只能选中并移动单个的KML几何元素,不能整体移动多个KML几何元素,也无法精确的控制移动变换的距离。这些技术问题的存在,严重限制了Google Earth在地球科学领域(特别是地质学、地球物理学等研究地下空间实体和现象的学科)中的应用。因此,对KML几何元素进行灵活、自由、精确的移动变换并形成一个通用的技术方案显得极为必要。

发明内容

在Google Earth数字地球平台中,地球空间对象可被抽象为点、线、面(多边形)等空间几何元素。在OGC KML2.2中,通过<Geometry>抽象元素派生出了6种几何元素,包括5种基本几何元素(<Point>、<LineString>、<LinearRing>、<Polygon>和<Model>)和1种复合几何元素(<MultiGeometry>)。对于<Point>、<LineString>、<LinearRing>或<Polygon>,使用坐标元素<coordinates>来定义其在地球空间中的位置。对于<Model>,使用位置元素<Location>来指定三维模型在地球空间的原点位置,每个<Location>元素由一组经度、纬度和高程组成。<MultiGeometry>可视为包含多个几何元素的容器,它可分解为单个的基本几何元素(如<Point>、<LineString>、<LinearRing>、<Polygon>或<Model>),每个基本几何元素用相应的坐标元素<coordinates>或位置元素<Location>来定义其在地球空间内的位置。

本发明的目的是提供一种在Google Earth数字地球平台中移动KML几何元素的方法,用于在一个统一的地球空间框架内灵活、自由、精确的移动多个KML几何元素的空间位置。该方法能够快速、批量的对多个KML几何要素进行移动变换,并将变换后的KML几何元素显示在Google Earth三维视窗中进行可视化及查询、分析。

其要解决的技术问题可分解为三个方面:要解决如何设置并交互式的控制KML几何元素在各个方向上的移动距离问题;要解决KML几何元素移动变换后的地理坐标计算问题;要解决快速、批量的修改多个KML几何元素的空间坐标问题。

本发明所采用的具体技术方案是:一种在Google Earth数字地球平台中移动KML几何元素的方法,该方法首先加载以文件或字符串形式存储的KML对象,然后提取需要进行移动变换的KML几何元素,接着设置并交互式的控制KML几何元素在各个方向上的移动距离,自动调整KML几何元素的空间坐标,最后将变换后的KML几何元素显示在Google Earth三维视窗中进行可视化及查询、分析。

本发明的具体工作步骤如下:

第一步加载KML对象

本发明首先需要将KML对象加载到Google Earth数字地球平台中,作为移动变换的初始数据。KML对象一般以文件(扩展名为kml或kmz,托管在某个公开网址上)或字符串的形式存储。对于以文件形式存储的KML对象,可使用Google Earth API中的KmlNetworkLink方法或者fetchKml方法进行导入;对于以字符串形式存储的KML对象,可使用parseKml方法进行导入。

使用KmlNetworkLink方法载入KML文件的代码如下:

使用fetchKml方法载入KML文件的代码如下:

使用parseKml方法导入KML字符串的代码如下:

var kmlString='…';//待导入的KML字符串,略

var kmlObject=ge.parseKml(kmlString);

ge.getFeatures().appendChild(kmlObject);

第二步提取KML几何元素

本发明的第二步,是从已加载到Google Earth平台的KML对象中提取需要进行移动操作的KML几何元素。

提取一个或多个KML对象,可使用Google Earth API中的getElementById或getElementByUrl函数,通过KML对象的ID或URL来提取特定的KML几何元素,如:

var kmlElements=ge.getElementById(string ID);//通过对象的ID来获取指定的几何元素

var kmlElements=ge.getElementByUrl(string url);//通过对象的URL来获取指定的几何元素

如果需要提取某一类型的KML几何元素列表,可使用getElementsByType函数,如:

var points=ge.getElementsByType('KmlPoint');//获取所有的Point元素

var linestrings=ge.getElementsByType('KmlLineString');//获取所有的LineString元素

var linearrings=ge.getElementsByType('KmlLinearRing');//获取所有的LinearRing元素

var polygons=ge.getElementsByType('KmlPolygon');//获取所有的Polygon元素

var models=ge.getElementsByType('KmlModel');//获取所有的Model元素

var MultiGeometries=ge.getElementsByType('KmlMultiGeometry');//获取所有的MultiGeometry元素

第三步设置移动距离

本发明的第三步,需要设置并交互式的控制KML几何元素在各个方向上的移动距离。在Google Earth数字地球平台中,KML几何元素的移动包括三种情况:沿着纵向(竖直方向)的移动;沿着经线方向(东西向)的移动;沿着纬线方向(南北向)的移动。因此,需要分别设定KML几何元素在这三个方向上的移动距离。在Google Earth数字地球平台中设置KML几何元素的移动距离,可通过两类图形用户界面来实现:

第一类是使用现有的通用滑动条控件,在Google Earth插件容器外来设定移动变换的距离。现有的通用滑动条控件一般由一个滑道和一个滑块组成,滑块可在滑道上自由拖动,以控制移动变换的距离。

另一类是使用基于屏幕叠加层定制的滑动条,在Google Earth插件容器内调整移动变换的距离。屏幕叠加层是指固定在Google Earth三维视窗屏幕上特定位置的图片。将两个屏幕叠加层组合起来,其中一个屏幕叠加层当作静止不动的滑道,另一个屏幕叠加层当作可拖动的滑块,就形成了一个具备滑动条功能的交互式屏幕叠加层。使用这种基于屏幕叠加层定制的滑动条,既可实现沿竖直方向(即垂向)上的移动距离设定,也可实现沿水平方向(东西方向或南北方向)的移动距离设定。

第四步调整KML几何元素的空间坐标

按照第三步设定的移动距离,计算KML几何元素移动后的坐标位置并逐个调整KML对象的坐标,实现KML几何元素的移动变换。

对KML几何元素的任何移动变换最终都归结为对组成KML几何元素的控制点位坐标的变换。本发明通过以下公式计算一个点位经过移动变换后的地理坐标(包括经度、纬度和高程):

h′=h0+Δh

式中:为移动变换前的地理经度、纬度和高程,为移动变换后的地理经度、纬度和高程,Δλ为该点沿经线方向(东西向)移动的距离(单位:米),为该点沿纬线方向(南北向)移动的距离(单位:米),Δh为沿纵向(竖直方向)移动的距离(单位:米),r为地球平均半径,r=6371004m,π为圆周率。

在Google Earth数字地球平台中,往往同时加载有大量的、类型各异的KML几何元素。在移动变换时,常常需要同时调整这些数目众多、结构复杂的KML几何元素的空间坐标。要快速、批量的移动这些KML几何元素,需要首先使用Google Earth API获取这些几何元素的初始坐标,然后计算各点位的坐标变化量,最后将KML几何元素的空间位置修改为移动变换后的新坐标。

以下JavaScript代码示范了在Google Earth中移动多个KML几何元素的方法:

在上面的代码中,使用同一段代码来一并处理<LineString>、<LinearRing>和<Polygon>元素。这是由于<Polygon>元素的内外边界是用<LinearRing>来定义的,而在Google Earth API中,KmlLinearRing又派生自KmlLineString。因此,对<Polygon>和<LinearRing>的移动变换最终可归结到对<LineString>的移动。只需对移动全部<LineString>,即可实现对<Polygon>或<LinearRing>元素的移动。

另外,由于<MultiGeometry>是与同一KML地图项关联的0个或多个基本几何元素(<Point>、<LineString>、<LinearRing>、<Polygon>或<Model>)的集合,只需要移动组成<MultiGeometry>的各个基本几何元素,就可对相应的<MultiGeometry>元素生效。因此,不需要另外写专门的代码来处理<MultiGeometry>元素。

第五步在Google Earth数字地球平台上显示移动变换后的KML几何元素

将移动变换后的KML几何元素显示在Google Earth数字地球平台中。基于Google Earth内置的、功能强大的三维可视化环境,通过鼠标和键盘交互设备,能够灵活方便的观察KML几何元素移动变换后的空间位置,查询与这些空间对象相关联的属性信息。

本发明能够快速、批量的对多个KML几何要素进行移动变换,并将变换后的KML几何元素显示在Google Earth数字地球平台三维视窗中进行可视化及查询、分析操作,从而在一个统一的地球空间框架内灵活、自由、精确的移动多个KML几何元素的空间位置。与背景技术相比,本发明的有益效果是:本发明的操作简便、自动性高,能够帮助用户在Google Earth数字地球平台中灵活、自由、精确的移动多个KML几何元素的空间位置。本发明可以很方便的扩展或集成到Google Earth应用系统之中,可广泛应用于以KML规范编码的地球空间信息(特别是地下空间信息)的三维可视化与交互分析之中。

附图说明

图1是本发明流程示意图;

图2是本发明实施例实现的KML几何元素移动网页(MovingKML)在计算机上展示的效果截图;

图3是本发明实施例实现的加载并显示地下空间KML几何元素的效果截图;

图4是本发明实施例实现的在竖直方向上移动KML几何元素的效果截图;

图5是本发明实施例实现的在东西方向上移动KML几何元素的效果截图。

具体实施方式

下面结合附图和具体实施方式对本发明作进一步详细的说明。

参阅图1所示,本发明首先加载以文件或字符串形式存储的KML对象,然后提取需要进行移动变换的KML几何元素,接着设置并交互式的控制KML几何元素在各个方向上的移动距离,自动调整KML几何元素的空间坐标,最后将变换后的KML几何元素显示在GoogleEarth三维视窗中进行可视化及查询、分析。本发明可在微机平台下采用Google Earth插件及其JavaScript API(Application Program Interface)开发实现,具体实施方式如下:

第一步加载KML对象

本发明首先需要将KML对象加载到Google Earth数字地球平台中,作为移动变换的初始数据。KML对象一般以文件(扩展名为kml或kmz,需要托管在某个公开网址上)或字符串的形式存储。对于以文件形式存储的KML对象,可使用Google Earth API中的KmlNetworkLink方法或者fetchKml方法进行导入;对于以字符串形式存储的KML对象,可使用parseKml方法进行导入。

使用KmlNetworkLink方法载入KML文件的代码如下:

var link=ge.createLink('');

var kmlUrl='http://www.sirrs.org/movekml/testpoint.kml';//待加载的KML文件的URL

link.setHref(kmlUrl);

var networkLink=ge.createNetworkLink('');

networkLink.set(link,true,true);

ge.getFeatures().appendChild(networkLink);

使用fetchKml方法载入KML文件的代码如下:

使用parseKml方法导入KML字符串的代码如下:

var kmlString='…';//待导入的KML字符串,略

var kmlObject=ge.parseKml(kmlString);

ge.getFeatures().appendChild(kmlObject);

第二步提取KML几何元素

本发明的第二步,是从已加载到Google Earth平台的KML对象中提取需要进行移动操作的KML几何元素。

提取一个或多个KML对象,可使用Google Earth API中的getElementById或getElementByUrl函数,通过KML对象的ID或URL来提取特定的KML几何元素,如:

var kmlElements=ge.getElementById(string ID);//通过对象的ID来获取指定的几何元素

var kmlElements=ge.getElementByUrl(string url);//通过对象的URL来获取指定的几何元素

如果需要提取某一类型的KML几何元素列表,可使用getElementsByType函数,如:

var points=ge.getElementsByType('KmlPoint');//获取所有的Point元素

var linestrings=ge.getElementsByType('KmlLineString');//获取所有的LineString元素

var linearrings=ge.getElementsByType('KmlLinearRing');//获取所有的LinearRing元素

var polygons=ge.getElementsByType('KmlPolygon');//获取所有的Polygon元素

var models=ge.getElementsByType('KmlModel');//获取所有的Model元素

var MultiGeometries=ge.getElementsByType('KmlMultiGeometry');//获取所有的MultiGeometry元素

第三步设置移动距离

本发明的第三步,需要设置并交互式的控制KML几何元素在各个方向上的移动距离。在Google Earth数字地球平台中,KML几何元素的移动包括三种情况:沿着纵向(竖直方向)的移动;沿着经线方向(东西向)的移动;沿着纬线方向(南北向)的移动。因此,需要分别设定KML几何元素在这三个方向上的移动距离。

在Google Earth数字地球平台中设置KML几何元素的移动距离,可通过两类图形用户界面来实现:

第一类是使用现有的通用滑动条控件,在Google Earth插件容器外来设定移动变换的距离。现有的通用滑动条控件一般由一个滑道和一个滑块组成,滑块可在滑道上自由拖动,以控制移动变换的距离。

另一类是使用基于屏幕叠加层定制的滑动条,在Google Earth插件容器内调整移动变换的距离。屏幕叠加层是指固定在Google Earth三维视窗屏幕上特定位置的图片。将两个屏幕叠加层组合起来,其中一个屏幕叠加层当作静止不动的滑道,另一个屏幕叠加层当作可拖动的滑块,就形成了一个具备滑动条功能的交互式屏幕叠加层。使用这种基于屏幕叠加层定制的滑动条,既可实现沿竖直方向(即垂向)上的移动距离设定,也可实现沿水平方向(东西方向或南北方向)的移动距离设定。

第四步调整KML几何元素的空间坐标

按照第三步设定的移动距离,计算KML几何元素移动后的坐标位置并逐个调整KML对象的坐标,实现KML几何元素的移动变换。

对KML几何元素的任何移动变换最终都归结为对组成KML几何元素的控制点位坐标的变换。本发明通过以下公式计算一个点位经过移动变换后的地理坐标(包括经度、纬度和高程):

h′=h0+Δh

式中:为移动变换前的地理经度、纬度和高程,为移动变换后的地理经度、纬度和高程,Δλ为该点沿经线方向(东西向)移动的距离(单位为米),Δφ为该点沿纬线方向(南北向)移动的距离(单位为米),Δh为沿纵向(竖直方向)移动的距离(单位为米),r为地球平均半径,r=6371004m,π为圆周率。

在Google Earth数字地球平台中,往往同时加载有大量的、类型各异的KML几何元素。在移动变换时,常常需要同时调整这些数目众多、结构复杂的KML几何元素的空间坐标。要快速、批量的移动这些KML几何元素,需要首先使用Google Earth API获取这些几何元素的初始坐标,然后计算各点位的坐标变化量,最后将KML几何元素的空间位置修改为移动变换后的新坐标。

以下JavaScript代码示范了在Google Earth中移动多个KML几何元素的方法:

在上面的代码中,使用同一段代码来一并处理<LineString>、<LinearRing>和<Polygon>元素。这是由于<Polygon>元素的内外边界是用<LinearRing>来定义的,而在Google Earth API中,KmlLinearRing又派生自KmlLineString。因此,对<Polygon>和<LinearRing>的移动变换最终可归结到对<LineString>的移动。只需对移动全部<LineString>,即可实现对<Polygon>或<LinearRing>元素的移动。

另外,由于<MultiGeometry>是与同一KML地图项关联的0个或多个基本几何元素(<Point>、<LineString>、<LinearRing>、<Polygon>或<Model>)的集合,只需要移动组成<MultiGeometry>的各个基本几何元素,就可对相应的<MultiGeometry>元素生效。因此,不需要另外写专门的代码来处理<MultiGeometry>元素。

第五步在Google Earth数字地球平台上显示移动变换后的KML几何元素

将移动变换后的KML几何元素显示在Google Earth数字地球平台中。基于Google Earth内置的、功能强大的三维可视化环境,通过鼠标和键盘交互设备,能够灵活方便的观察KML几何元素移动变换后的空间位置,查询与这些空间对象相关联的属性信息。

下面介绍本发明的具体实施例:

按照本发明的技术流程图各步骤,在微机平台环境下采用Google Earth插件及其JavaScript API开发实现了一个网页MovingKML。图2是MovingKML网页在计算机上展示的效果截图。如图2所示,MovingKML网页由三部分组成:位于屏幕上部的KML/KMZ文件托管网址输入区;位于屏幕左侧的Google Earth插件容器区(包括三组具备滑动条功能的交互式屏幕叠加层);位于屏幕右侧的通用滑动条控件放置区。任何安装了Google Earth插件的计算机都可以通过国际互联网访问这个网页,在这个网页中自由的加载KML对象、提取KML几何元素并对其进行移动变换。

使用MovingKML时,用户首先需要输入KML/KMZ文件的托管网址,然后单击“加载KML/KMZ”按钮,Google Earth插件会自动导入KML对象并提取KML几何元素;用户可使用位于Google Earth插件右侧的滑动条控件来控制KML几何元素在各个方向上的移动距离,也可在Google Earth三维视窗区域内,使用基于屏幕叠加层定制的滑动条,来自由地调整移动变换的距离;网页程序会根据设定的移动距离,自动调整KML几何元素的空间坐标,并将变换后的KML几何元素近实时的显示在Google Earth三维视窗中。通过这些操作,辅以灵活、直观的图形用户界面,用户能够方便的实现KML几何元素的快速、批量移动。

图3、图4和图5是在MovingKML网页中移动KML几何元素的具体实例。如图3所示,使用MovingKML加载一个KML文件。这个KML文件存储的是位于地形面以下的地下空间对象(包括用KML编码的地质钻孔信息和用COLLADA文件描述的地下三维模型),因此KML几何元素无法直接在Google Earth中显现出来。使用滑动条,将地下空间KML几何元素在竖直方向上抬升210米,地下空间对象就会浮现出来(图4)。类似地,也可在水平方向上调整KML几何元素的地理坐标,设置地下空间对象的浮现位置,如:图5就是在图4的基础上向西移动275米后的效果截图。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号