该包提供了在椭球体上离散化地理区域的工具。
地球观测任务通常需要在地理区域上全局评估一些属性。
一个典型的用途是将感兴趣的区域进行离散化,以定义一组不同的瓦片,这些瓦片将在不同的时间进行观测。使用事件检测,确定每个瓦片可以观测的精确日期,并可以上传到航天器。一旦所有瓦片都被观测完毕,它们将被拼接在一起,形成完整的复合图像。
另一个用途是对感兴趣的区域进行采样,以创建一个网格,然后在每个网格点上计算导航应用程序的精度稀释。
使用Hipparchus的SphericalPolygonsSet
类来定义感兴趣区域。该类可以处理任意复杂的区域。可以使用非连通区域(例如具有分离的岛屿的群岛)。可以使用带有孔洞的区域(例如定义仅限于沿海水域并忽略内部陆地的区域)。
感兴趣区域不应太大。这个离散化功能只适用于椭球体的部分。限制的原因是瓦片/网格是从种子点(自动确定)开始逐步计算的,沿着瓦片/网格单元的垂直弧线移动。这在局部给出准确的结果,但在全局范围内失败。在半球上使用此功能容易严重失败。在使用此功能之前,应将大区域分割成较小的部分。
由于SphericalPolygonsSet
类基于单位2球体,因此必须使用某种约定将椭球体映射到它上面。采用的约定是保留大地纬度和经度,因为它们是地理地图中使用的纬度和经度。这意味着为了将GeodeticPoint
转换为SphericalPolygonsSet
使用的S2Point
,应使用以下语句:
S2Point s2 = new S2Point(geodeticPoint.getLongitude(),
0.5 * FastMath.PI - geodeticPoint.getLatitude())
EllipsoidTessellator
类提供了一些静态辅助方法,用于从定义感兴趣区域边界的大地点构建SphericalPolygonsSet
,在简单情况下,该区域是连通的且没有孔洞。在使用这些点时,应注意点的顺序,因为它们应该按逆时针方向围绕区域(即当我们从一个点移动到下一个点时,内部在左手边)。错误的方向意味着定义的是所需区域的补集,它要大得多,并且肯定无法按照上述限制正确地进行离散化。
可以使用Hipparchus RegionFactory
类中提供的集合操作(并集、交集、差集、对称差集、补集)从简单区域构建更复杂的区域。
根据调用应用程序的需求,可以使用不同的主要方向进行瓦片对准。预定义了两种经典的方向:
沿轨迹对准:当用户希望瓦片沿卫星轨迹对齐时使用此模式。
恒定方位角对准:当用户希望瓦片相对于地面点地理北方的某个固定方位角对齐时使用此模式。
除了这两个预定义方向外,用户还可以提供自己的TileAiming
接口实现。
对感兴趣区域可以执行两种主要操作:细分和采样。
细分产生瓦片,用于需要与表面相关的元素。创建的瓦片完全覆盖感兴趣区域。
采样产生点网格,用于需要与点相关的元素。创建的点完全位于感兴趣区域内。
在这两种情况下,使用两个维度,瓦片/网格单元沿方向的长度和横向的宽度。这些尺寸以米为单位,并对应于沿椭球体的路径。使用椭球体的局部曲率从一个点移动到下一个点。由于椭球体和球体都不是可展曲面,我们离初始点越远,经历的变形就越大。这解释了上面对区域大小的限制。
在瓦片的情况下,还可以指定相邻瓦片之间的重叠(或间隙),无论是沿着方向还是横向。还可以使用具有相同尺寸的瓦片进行细分(大致平衡在感兴趣区域周围),或者更紧密地细分,将第一列(或行)放置在靠近区域边界的位置,并且最后一列(或行)的宽度(或长度)减小。
下面的类图显示了包的整体设计。