Extensible 3D (X3D)
Part 1: Architecture and base components

25 Geospatial component

地理学组件

--- X3D separator bar ---

cube 25.1 介绍

25.1.1 名称

这部分组件的名称是 "Geospatial"。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

25.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Geospatial component(地理学组件)。其中包括如何在真实世界位置和 X3D 场景中元素之间建立关联,以及详细说明协调地理应用用的节点。表 25.1 列出了这一条款的主要主题。

表 25.1 — 本条款的主题

cube 25.2 概念

25.2.1 概述

这一段包含了 Geospatial 组件中的重要概念,提供地理学支持的地理学应用的讨论。地理学支持包括如何在某一 X3D 节点中镶入地理坐标,支持高精度的地理模型,处理大面积多分辨率地形数据集。这些概念将在以下描述。Geospatial 组件遵循 Spatial Reference Model(空间建模参考标准2.[I18026] 中定义的约定。

Geospatial 组件中共包含 9 个节点。以下是定义的节点。

25.2.2 空间参考系

X3D 为建模目的按照 4.3.6 Standard units and coordinate system 中的定义建立了一个隐含的三维笛卡尔右手坐标系。然而,大多的地理相关的数据是以测地学或投影空间参考系的形式提供的。测 地学(或地理学)的空间参考系是和用来建立地球的椭圆体相关的,例如经纬度系统。投影空间参考系使用一个椭圆体的投影到一些诸如圆柱或圆锥简单表面上,例如 Lambert Conformal Conic (LCC - 兰勃特等角圆锥投影)或 Universal Transverse Mercator (UTM - 通用横轴墨卡托投影)投影。为了使用这些地理相关的概念,X3D 提供一些可以使用空间参考系来建模的节点。X3D 支持的空间参考系在 表 25.2 中定义。

表 25.2 — 支持的空间参考系

Code
代码
Name
名称
GD Geodetic spatial reference frame
GC Geocentric spatial reference frame
UTM Universal Transverse Mercator

代码 GDC 和 GD 同义,代码 GCC 和 GC 同义。然后,这两个同义词可能在以后被重新定义。另外,为了建立地球的模型,除了空间参考系,X3D 中还定义了 23 个标准椭圆体,表 25.3 中是标准椭圆体的定义。

表 25.3 — 支持的地球椭圆体

Code
代码
Ellipsoid Name
椭圆体名称
Semi-Major Axis
(metres)
半长轴 (米)
Inv. Flattening
(F-1)
扁率(F-1)
AA Airy 1830 6377563.396 299.3249646
AM Modified Airy 6377340.189 299.3249646
AN Australian National 6378160 298.25
BN Bessel 1841 (Namibia) 6377483.865 299.1528128
BR Bessel 1841 (Ethiopia Indonesia...) 6377397.155 299.1528128
CC Clarke 1866 6378206.4 294.9786982
CD Clarke 1880 6378249.145 293.465
EA Everest (India 1830) 6377276.345 300.8017
EB Everest (Sabah & Sarawak) 6377298.556 300.8017
EC Everest (India 1956) 6377301.243 300.8017
ED Everest (W. Malaysia 1969) 6377295.664 300.8017
EE Everest (W. Malaysia & Singapore 1948) 6377304.063 300.8017
EF Everest (Pakistan) 6377309.613 300.8017
FA Modified Fischer 1960 6378155 298.3
HE Helmert 1906 6378200 298.3
HO Hough 1960 6378270 297
ID Indonesian 1974 6378160 298.247
IN International 1924 6378388 297
KA Krassovsky 1940 6378245 298.3
RF Geodetic Reference System 1980 (GRS 80) 6378137 298.257222101
SA South American 1969 6378160 298.25
WD WGS 72 6378135 298.26
WE WGS 84 6378137 298.257223563

X3D 还支持指定大地水准面(geoid),例如海平面。表 25.4 列出了支持的大地水准面。

表 25.4 — 支持的地球大地水准面

Code
代码
Name
名称
WGS84 WGS84 geoid

X3D 浏览器将内在地把所有的地理坐标转换到以地球为中心的测量坐标,例如,一个相对地心的单位为米的 (x,y,z) 位移值。这是一个最容易和 X3D 隐含坐标系整合的三维笛卡尔坐标。另外如果使用了 GeoOrigin ,则可以给这些地理坐标指定一个偏移值(参见 25.2.5 处理高精度坐标)。结果坐标被转换为单精度,并且 成为渲染用到的最终值。这个方法意味着提供提高兴趣区域的精度的支持,也允许在多个空间参考系中指定的数据可以被融合到单一的环境中。

25.2.3 指定一个空间参考系

允许包含地理坐标的 X3D 节点支持 geoSystem 域。这个域用来指定此节点中地理化坐标使用的特定的空间参考系。这是一个可以包含一系列的 充分指明空间参考系的参数德 MFString 域。每个参数在 MFString 数组中表现单个的字符串。参数匹配是大小写敏感的。可选参数可以以任意顺序出现。以下是支持的值。

如果没有指定 geoSystem 域,缺省值为 [ "GD", "WE" ]。

25.2.4 指定地理坐标

一旦定义了空间参考系,将可以指定一个地理化坐标为 an SFVec3D 值。地理化坐标的列表将被编码为一个 MFVec3D. 每个成分的值 的含义将依赖于同节点中 geoSystem 域定义的特定空间参考系。给定的每个成分的含义将对照以下给定的不同的 geoSystem 定义。

25.2.5 处理高精度坐标

大多数的计算机图形系统,包括 X3D,使用单精度浮点数值来建模和渲染所有的几何体。因为计算机图形一般是处理小屏幕(最大约 1600 x 1280 像素),并且限定在一定范围里,所以这样也是正常的设计。因此不需要使用双精度值,因为任何由此增加的精度也将损失在小于像素的噪声中。

然而,单精度精度对于把地球范围的建模数据精确到相应地面分辨率是不够的。单精度只有 23 比特位尾数,坐标的精度只能达到 8 百万分之一(2^23-1);或大约 6 或 7 位小数尾数的精度 。因为地球的赤道平均半径(已此为行星体的范例)为 6,378,137 米(WGS84 椭球体标准),使用单精度浮点数将不可能达到比约 0.8 米(6,378,137 / 8,388,607 = 0.8)更好的分辨率。低于这个极限的大量的浮点将被舍入或重叠,或会发生摄像机抖动。

建立一个地理学参考的局部坐标系统(LCS)可以避免这个地理化参考相关的问题。一个地理化参考的绝对位置被定义为 LCS 的原点。这点变为和 X3D 场景原点 (0,0,0) 关联的参考点。任何其它的地理化位置将被转换到参照这个 LCS 原点的 X3D 的笛卡尔坐标系中。此外,通过允许用户简便地定义局部参考系,地理 化参考数据的创建者使用单精度浮点值只在局部限定范围内创建 X3D 场景。这就是地理化 X3D 节点中 geoOrigin 域指定的 GeoOrigin 节点的目的。

为介绍这个概念,设想了以下的范例,GeoOrigin 被指定为 UTM 坐标系下的 (310385.0 e, 4361550.0 n, 0 m, zone 13)。这将可以被转换为双精度 的以地球为中心的测量坐标 (-1459877.12, -4715646.92, 4025213.19)。然后提供了一个绝对 UTM 坐标 (310400.0 e, 4361600.0 n, 0 m, zone 13) 其可以内在地转换为以地球为中心的测量坐标 (-1459854.51, -4715620.48, 4025252.11)。最后,通过减去 GeoOrigin 定位,这个绝对的以地球为中心的测量坐标可以被转换到相对 GeoOrigin 的单精度笛卡尔局部坐标系中并定位到 (22.61, 26.44, 38.92),这将位于单精度的范围内。

25.2.6 地理导航问题

浏览巨大的地理范围时,有一系列的导航问题需要解决。这里介绍一个重要的概念:高度比例速度(elevation scaled velocity )。

用户在场景中的导航速度将基于其在地形上的高度变化。例如,在地形上 100 米飞行掠过海岸时,100 米每秒的速度可以认为是相当快的。然而,当从外层空间返回接近地球时,100 米每秒的速度就慢得过分。地理可视化系统的建立者因此研究了如何根据高度变化来按比例来改变用户的导航速度,力求维持流过屏幕像素为常量。对于这个问题,依照速度和用户在 WGS84 之类的椭圆体上高度之间的线性关系是可接受并易于计算的解决方案。这个行为是基于 GeoViewpoint 节点的。

cube 25.3 节点参考

25.3.1 GeoCoordinate (地理坐标)

GeoCoordinate : X3DCoordinateNode {
  SFNode   [] geoOrigin NULL        [GeoOrigin]
  MFString [] geoSystem ["GD","WE"] [see table]  
  MFVec3d  [] point     []
}

GeoCoordinate 节点用来指定某一空间参考系下的坐标表。此节点用于 IndexedFaceSet、IndexedLineSet、PointSet 这类基于顶点的几何节点的 coord 域中。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

point 数组用来包含真实的地理学坐标,其中提供的坐标格式要遵照 geoSystem(参见以上)中指定的参考系。地理学坐标将被透明地转换为以地球为中心测量的曲面地球的描述。举例来说,这个场景允许地理学家建立 X3D 场景,而场景中所有的坐标都是由纬度、精度、海拔高度指定的。

25.3.2 GeoElevationGrid (地理高程网格)

GeoElevationGrid : X3DComposedGeometryNode {
   MFDouble [in]     set_height
   SFFloat  [in]     set_yScale      1           [0,∞)
   SFNode   [in,out] color           NULL        [X3DColorNode]
   SFNode   [in,out] normal          NULL        [X3DNormalNode]
   SFNode   [in,out] texCoord        NULL        [X3DTextureCoordinateNode]
   SFBool   []       ccw             TRUE
   SFBool   []       colorPerVertex  TRUE
   SFDouble []       creaseAngle     0           [0,∞]
   SFVec3d  []       geoGridOrigin   0 0 0       (-∞,∞)
   SFNode   []       geoOrigin       NULL        [GeoOrigin]
   MFString []       geoSystem       ["GD","WE"] [see table]
   MFDouble []       height          [0 0]       (0,∞)
   SFBool   []       normalPerVertex TRUE
   SFBool   []       solid           TRUE
   SFInt32  []       xDimension      0           (0,∞)
   SFDouble []       xSpacing        1.0         [0,∞)
   SFInt32  []       zDimension      0           (0,∞)
   SFDouble []       zSpacing        1.0         [0,∞)
}

GeoElevationGrid 节点在某一空间参考系下指定了一个均匀的由高度值设定的网格。这些 将被透明地转换为以地球为中心测量的曲面地球的描述。举例来说,这个场景允许地理学家建立 X3D 场景,而场景中所有的坐标都是由纬度、精度、海拔高度指定的。

colorcolorPerVertextexCoordnormalnormalPerVertex 的域的定义和 ElevationGrid 中相关域定义完全相同。

ccwsolidcreaseAngle 域的描述见 11.2.3, Common geometry fields.

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

geoGridOrigin 域指定了数据集西南角(左下)的地理坐标。这个域值应按照 25.2.4, 指定地理坐标 中描述的方式来指定。

height 数组包含了 xDimension × zDimension 个描述椭圆体或大地水准面之上高度的浮点值。这些值给定的顺序为从西向东,从南向北。当 geoSystem 为 GD 时,xSpacing 为相邻高度值之间的经度,zSpacing 为相邻高度值之间的经度。当 geoSystem 为 UTM 时,xSpacing 为相邻高度值之间的东进(单位米),zSpacing 为相邻高度值之间的北进(单位米)。例如,如果 xDimension = n 且网格跨 d 个水平单位,则 xSpacing 值应设置为:

d / (n-1).

在显示数据的时候,可以用 yScale 值来产生垂直方向的夸张效果。缺省值为 1.0(不夸张)。如果值设置的比 1.0 大,所有的高度值将看起来比实际的高。

25.3.3 GeoLocation (地理位置)

GeoLocation : X3DGroupingNode {
  MFNode   [in]     addChildren                [X3DChildNode]
  MFNode   [in]     removeChildren             [X3DChildNode]
  MFNode   [in,out] children       []          [X3DChildNode]
  SFVec3d  [in,out] geoCoords      0 0 0       (-∞,∞)
  SFNode   []       geoOrigin      NULL        [GeoOrigin]
  MFString []       geoSystem      ["GD","WE"] [see table]
  SFVec3f  []       bboxCenter     0 0 0       (-∞,∞)
  SFVec3f  []       bboxSize       -1 -1 -1    (0,∞) or -1 -1 -1
}

GeoLocation 节点提供了地理化地引用标准 X3D 模型的能力。即把一个普通的 X3D 模型包含到一个节点的 children 域中,然后为这个节点指定一个地理位置。这个节点是一个可以想作 Transform 节点的组节点。GeoLocation 节点指定的一个绝对位置,而不是一个相对位置,所有内容开发者不应该把一个 GeoLocation 节点镶套到另一个 GeoLocation 节点中。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

children 中节点的几何体应该指定为X3D 坐标且单位为米,其相对的位置由 geoCoords 域指定。geoCoords 域应按照 25.2.3, 指定一个空间参考系 中描述的方式来指定。

geoCoords 域可以动态地更新模型的地理位置;例如可以接受 GeoPositionInterpolator 发送过来的事件。

另外为了把 X3D 模型放置到正确的地理位置上,GeoLocation 节点还将适当地调节模型的方向。标准 X3D 坐标系指定 +Y 轴为上,+Z 为远离屏幕,+X 为向右。GeoLocation 节点按以下方式设置方向:+Y 轴为局部区域的上方向(椭圆体表面切线方向的法线),-Z 点指向北极,+X 指向东方。

25.3.4 GeoLOD (地理细节层次)

GeoLOD : X3DGroupingNode {
  MFNode   [in]  addChildren                [X3DSwitchNode]
  MFNode   [in]  removeChildren             [X3DSwitchNode]
  MFNode   [out] children       []          [X3DSwitchNode]
  SFVec3d  []    center         0 0 0       (-∞,∞)
  MFString []    child1Url      []          [urn]
  MFString []    child2Url      []          [urn]
  MFString []    child3Url      []          [urn]
  MFString []    child4Url      []          [urn]
  SFNode   []    geoOrigin      NULL        [GeoOrigin]
  MFString []    geoSystem      ["GD","WE"] [see table]
  SFFloat  []    range          10          [0,∞)
  MFString []    rootUrl        []          [urn]
  MFNode   []    rootNode       []          [X3DChildNode]
  SFVec3f  []    bboxCenter     0 0 0       (-∞,∞)
  SFVec3f  []    bboxSize       -1 -1 -1    (0,∞) or [-1 -1 -1]
}

GeoLOD 为地形提供专门形式的 LOD 细节层次节点。GeoLOD 是一个组节点 ,其中可以使用树结构为一个对象指定两个不同的细节层次,其中子层次中可以可以指定 0 到 4 个子,GeoLOD 能有效的处理这些细节层次的载入和卸载。

用户和地理坐标 center 的距离接近还是远离 range 值将决定细节层次的转换。center 域应按照 25.2.4, 指定地理坐标 中描述的方式来指定。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

The geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

当用户在指定的范围(range) 之外时,将只显示 rootUrlrootNode 中的几何体。当观测者进入指定范围后,这些几何体将被由 child1Urlchild4Url 定义的四个子文件中的内容替换。只有在用户在指定范围中时,这四个子文件才被载入内存。类似的是当用户离开这个范围时,这些文件也会被从内存中卸载。附图 25.1 介绍了这种方法。注意并不需要子 URL 被安排为和附图一样的顺序,例如不一定要用 child1Url 表示坐下的四叉树子块。注意少于 4 个子 URL 也是可以的,这种情况下当所有的指定的 URL 载入以后,GeoLOD 就转到子层次节点下。这个特性可以使 GeoLOD 不光可以支持四叉树结构,而也可以支持向二叉树这样的树结构。

GeoLOD Figure

附图 25.1 — GeoLOD 层次的载入

rootUrlrootNode 域提供了两种不同的指定根片几何体的方法。可以用两种方法中的一种。rootNode 域可以把根片的几何体直接包括在 X3D 文件中;另外的方法使用 rootUrl 域指定一个包含根片几何体的文件的 URL。如果两个域都指定了值,则结果未定义。

children 域用来暴露当前载入的节点集的场景图。以事件的方式返回的值为一个包含单个 Switch 节点的 MFNode。这个 Switch 节点的 choice 域中的第一个节点包含了 GeoLOD 的根层次节点,所有载入的子层次节点在 choice 域中的第二个节点中。Switch 节点的 whichChoice 域决定了是显示根层次(值为 0)或显示子层次(值为 1)。当场景图改变时(例如任何节点载入或卸载时)GeoLOD 节点应生成新的 children eventOut 事件。

GeoLOD 节点执行时可以可选地支持缓存最近载入的节点。这个缓存将包括场景中所有的 GeoLOD 实例。这样可以避免用户视点小范围移动时过多的载入和卸载操作,从而提高大地形模型导航时的性能。

25.3.5 GeoMetadata (地理元数据)

GeoMetadata : X3DInfoNode {
  MFNode   [in,out] data    [] [urn]
  MFString [in,out] summary []
  MFString [in,out] url     [] [urn]
}

GeoMetadata 节点支持为 GeoX3D 节点指定任意数量的描述性元数据。和 WorldInfo 节点相似,但是这个节点是用来专门描述地理信息的。

此节点中包括地理元数据的标准与描述。GeoMetadata 节点的目的不是收入所有特定的标准,而是提供关于这些完整元数据描述的链接,以及可选地提供简短的可读的概要。

url 域用来指定一个外部的完整元数据描述的超文本链接。可以按顺序指定多个 URL 字符串,以便为相同的元数据信息提供可选的位置。在处理元数据困难时,summary 域可以用来说明元数据的格式。

summary 字符串数组包含了一系列的 keyword/value (关键字/值)对,每个关键字和其后配对的值都包含在单独的字符串中; 也就是说,字符串的个数应该为偶数(或零)。这提供了简化的可扩展的的机制 来包括元数据元素,同时保证元数据元素是可读的并易于解析的。表 25.5 指定了一些关键字和描述其值所用的格式。如果发现未知的关键字 ,这个关键字(和相关的值)将被忽略。

表 25.5 — GeoMetadata 的关键字和值

Keyword

关键字

Value

title
(标题)
用户的用以简便识别数据集的名称。例如 "San Francisco, CA"。
description
(描述)
主要文本描述或数据集内容的摘要,例如 "LANDSAT 7 satellite imagery taken over northern Scotland"。
coordinateSystem
(坐标系)
再现数据使用的空间参考系,比如 GD、UTM、LCC 之类。此域中可使用的代码列表见 2.[I18026] 中的定义。对于 UTM 系统,地区号需同时以 "UTM Zx" 的格式指定,其中地区号的范围为[1,60]。例如, "UTM Z11"。
horizontalDatum
(水平大地基准点)
水平大地基准点的名称。此域中可使用的代码列表见 2.[I18026] 中的定义。例如 "W84"。
verticalDatum
(垂直大地基准点)
垂直大地基准点(大地水准面)的名称。此域中可使用的代码列表见 2.[I18026] 中的定义。例如 "W84"。
ellipsoid
(椭圆体)
地理学椭圆体的名称。此域中可使用的代码列表见 2.[I18026] 中的定义。例如 "WE"。
extent
(范围)
数据集在给定的由 coordinateSystem 关键字指定的空间参考系中的边界坐标。提供的值按以下顺序排列:最东,最南,最西,最北。GD 参考系时的例子为 "-180.0 -90.0 180.0 90.0"。
resolution
(分辨率)
分辨率,或地面采样间距,给定值的单位为米。例如 "30"。
originator
(创作者)
定义诸如作者、代理、组织、出版者之类创作者数据的字符串。例如 "John Doe, Any Corporation, Some Town, Some Country"。
copyright
(版权)
此数据的版权所有声明。例如 "(c) Copyright 2000, Any Corporation. All rights reserved. Freely distributable."
date
(日期)
单一的日期/时间,或一个日期/时间范围,用来定义此数据有效的日期/时间。日期使用格式 "YYYY MM DD [HH:MM]" 指定。现在的年份应由四位数字指定.,例如 "1999" 或 "2001"。年份值也可以不是四位数或负值。由 “-” 字符连接的两个值用来指定日期范围。如果需要某一级别的时间精度,还可以提供可选的值。时间被指定为 24 小时格式的格林尼治标准时间。例如,"1999 01 01 00:00 - 1999 12 31 23:59"。
metadataFormat
(元数据格式)
说明外部元数据描述格式的字符串,这个外部元数据描述由 GeoMetadata 节点 url 域指定。例如,"FGDC"、"ISO TC211"、"CEN TC287"、或 "OGS"。
dataUrl
(数据 URL)
与此元数据相关的,用来创建 X3D 节点的源数据的超文本链接。可以按顺序指定多个 dataUrl 关键字/值(keyword/value)配对,以便为相同的元数据信息提供可选的位置。例如,"http://www.foo.bar/data/sf1"。
dataFormat
(数据格式)
自由文本字符串描述,用来说明与此元数据相关的,用来创建 X3D 节点的源数据的格式。这要参照由 dataUrl 关键字(如果存在)指定的源数据。例如,"USGS 5.5-min DEM"。

 

data 域用来列出执行 GeoMetadata 节点中描述的数据的所有节点。举例来说,如果 GeoMetadata 节点需要描述 height 域网格,可以在此 data 域中包括适当的 GeoElevationGrid 节点。在 data 域中的节点并不渲染,所以可以使用  DEF/USE 以先描述数据而其后再在场景图中引用。这样允许在单一场景中指定多个 GeoMetadata 节点,并关联的多个数据节点到一个 GeoMetadata 节点中。这也提供了一种机制以简化定位特定相关元数据入口的方法。 

如果不指定 data 域,就假定 GeoMetadata 节点适用于整个场景。

25.3.6 GeoOrigin (地理原点)

GeoOrigin : X3DInfoNode {
  SFVec3d  [in,out] geoCoords 0 0 0       (-∞,∞)
  MFString [in,out] geoSystem ["GD","WE"] [see table]
  SFBool   []       rotateYUp FALSE
}

GeoOrigin 节点定义了一个绝对地理学位置和一个几何体需要引用的隐含局部坐标系。这个节点用来转换地理学坐标到 X3D 浏览器可以处理的笛卡尔坐标系。

The geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

rotateYUp 域用来指定是否把使用此 GeoOrigin 的节点的坐标旋转,以保证这些节点的上方向对齐 X3D 的 Y 轴。缺省行为不执行这种操作。这意味局部的上方向将依赖于 GeoOrigin 在行星球体表面的位置。执行这种旋转的主要是为了保证 FLY 或 WALK 这类假定 +Y 为上的标准导航模式能正确的运行。指定 rotateYUp 为 TRUE 可能导致额外的过量的计算,因为这需要执行每个点的旋转。

25.3.7 GeoPositionInterpolator (地理位置插值器)

GeoPositionInterpolator : X3DInterpolatorNode {
  SFFloat  [in]     set_fraction                 (-∞,∞)
  MFFloat  [in,out] key              []          (-∞,∞)
  MFVec3d  [in,out] keyValue         []
  SFVec3d  [out]    geovalue_changed
  SFVec3f  [out]    value_changed
  SFNode   []       geoOrigin        NULL        [GeoOrigin]
  MFString []       geoSystem        ["GD","WE"] [see table]
}

GeoPositionInterpolator 节点提供了一个插值器,其中关键值指定为地理学坐标并且在指定的空间参考系下执行插值。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

The geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

key、set_fraction、value_changed 域的含义和 PositionInterpolator 节点的定义相同。

keyValue 数组用来包含实际的坐标,给定值的格式应与其 geoSystem 指定的特定格式相符。

geovalue_changed 域输出 geoSystem 指定的空间参考系下的插值后的坐标。这可以被传递到其它的支持此类型域的 GeoX3D 节点中(例如 GeoViewpoint 和 GeoLocation 节点)。

25.3.8 GeoTouchSensor (地理接触传感器)

GeoTouchSensor : X3DTouchSensorNode {
  SFBool   [in,out] enabled              TRUE
  SFVec3f  [out]    hitNormal_changed
  SFVec3f  [out]    hitPoint_changed
  SFVec2f  [out]    hitTexCoord_changed
  SFVec3d  [out]    hitGeoCoord_changed
  SFBool   [out]    isActive
  SFBool   [out]    isOver
  SFTime   [out]    touchTime
  SFNode   []       geoOrigin            NULL        [GeoOrigin]
  MFString []       geoSystem            ["GD","WE"] [see Table]
}

GeoTouchSensor 节点追踪指点设备的位置和状态,同时也探测用户何时指向 GeoTouchSensor 的父组所包含的几何体。此节点提供和 TouchSensor 同样的功能,但是提供指点设备返回的地理坐标的能力。

通过向 enabled 域发送 TRUE 值或 FALSE 值的事件,GeoTouchSensor 可以被激活或禁止。被禁止的 GeoTouchSensor 不追踪用户输入,也不发送事件。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

The geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

hitNormal_changed 域、hitPoint_changed 域、hitTexCoord_changed 域、isActive 域、isOver 域、touchTime 域的的含义和 TouchSensor  节点的定义相同。

当指点设备指向 GeoTouchSensor 的相关几何体时,hitGeoCoord_changed 域将产生一个事件,例如 isOver TRUE。hitGeoCoord_changed 事件将包含指点设备的位置和下方几何体之间的交点的地理坐标。geoSystem 字符串的值定义了地理坐标的空间参考系。例如,给定缺省 geoSystem 值 "GD" 时,hitGeoCoord_changed 域将使用格式 (<latitude> <longitude> <elevation>)(纬度、经度、高度)(参见 25.2.4, 指定地理坐标)。

25.3.9 GeoViewpoint (地理视点)

GeoViewpoint : X3DBindableNode {
  SFBool     [in]     set_bind
  SFRotation [in]     set_orientation
  SFVec3d    [in]     set_position
  SFFloat    [in,out] fieldOfView    π/4        (0,π)
  SFBool     [in,out] headlight      TRUE
  SFBool     [in,out] jump           TRUE
  MFString   [in,out] navType        ["EXAMINE","ANY"]
  SFTime     [out]    bindTime
  SFBool     [out]    isBound
  SFString   []       description    ""
  SFNode     []       geoOrigin      NULL            [GeoOrigin]
  MFString   []       geoSystem      ["GD","WE"]     [see table]
  SFRotation []       orientation    0 0 1 0         (-∞,∞) or -1 1
  SFVec3d    []       position       0 0 100000      (-∞,∞)
  SFFloat    []       speedFactor    1.0             [0,∞)
}

GeoViewpoint 节点允许使用地理坐标的形式来指定视点。这个节点可以用在相同场景中任何 Viewpoint 可以使用或被绑定的位置。fieldOfView 域、jump 域、description 域、set_bind 域、bindTime 域、isBound 域和节点事件的行为和标准的 Viewpoint 节点相同。当 GeoViewpoint 节点被绑定的时候,将不考虑当前场景中绑定的 Viewpoint 节点和 NavigationInfo 节点。

geoOrigin 域用来指定一个局部坐标系以支持 25.2.5, 处理高精度坐标 中描述的精度扩展。

The geoSystem 域用来定义 25.2.3, 指定一个空间参考系 中描述的空间参考系。

position 用来定义视点所处的实际坐标。给定值的格式应与其 geoSystem 指定的特定格式相符。也有 set_position 域可以接受 GeoPositionInterpolator 节点 geovalue_changed 域发出的路由以完成 GeoViewpoint 的位移动画。

orientation 字符串定义了一个相对由 position 域定义的局部方位系的方向。缺省情况下,视点的方向将始终按以下方式对齐:+Y 轴为局部区域的上方向(椭圆体表面切线方向的法线),-Z 点指向北极,+X 指向东方。因此,如果创建一个 GeoViewpoint 节点,且如果 orientation 值设为 [ 1 0 0 -1.57 ],则不管在什么方位观察行星球体,都是直接看向下方。set_orientation 域可以路由到 OrientationInterpolator 节点 value_changed 域以完成 GeoViewpoint 的方向转动动画。

navType 域用来指定导航类型,当此 GeoViewpoint 节点被绑定时会绑定到此导航类型。这个域可接受的值和 NavigationInfo 节点 type 域能接受的相同,例如 "EXAMINE", "WALK", "FLY", "ANY"。

headlight 域用来指定浏览器是否应打开一盏顶灯。顶灯是一个方向性灯光,这个灯光一直指向用户观看的方向。

GeoViewpoint 节点执行时,就好像有一个内嵌的 NavigationInfo 节点随此 GeoViewpoint 的被绑定或被取消绑定同时也被绑定或被取消绑定。同时,X3D 浏览器应根据高度值内在的设置适当的 speed 域、avatarSize 域、visibilityLimit 域的值。为了支持高度比例速度(参见 25.2.6, 地理导航问题),X3D 浏览器在用户移动时应能持续地更新应 speed 域。用户交互的速度推荐定义为:

( elevation  / 10.0 ) metres per second

( 高度值  / 10.0 ) 米每秒

其中 elevation 为用户在 WGS84 椭圆体上的高度,单位为米。同时对 avatarSize 向量的缩放也推荐使用同样的比例因素。

GeoViewpoint 节点 speedFactor 域用来倍增节点内部设置的基于高度的速度;这就像 NavigationInfo 中的速度设置,不过这里的速度是一个相对值,而不是一个绝对速度。

cube 25.4 支持级别

Geospatial 组件提供 表 25.6 中规定的一个支持级别。

表 25.6 — Geospatial 组件支持级别

级别Level 必备条件 节点/特性 支持
1 Core 1
Time 1
Networking 1
Grouping 3
Rendering 1
Shape 1
Geometry3D 1
Interpolator 1
Point device sensor 1
Navigation 1

  The GeoCoordinate, GeoElevationGrid, GeoLocation, GeoLOD, GeoMetadata, GeoOrigin, GeoPositionInterpolator, GeoTouchSensor, and GeoViewpoint instantiable node types. 所有域
--- X3D separator bar --- Site Meter