经络和平行线的数据模型

时间:2011-02-14 12:50:51

标签: c++ data-structures cartography

我正在考虑一些适合存储经络和平行的模型。经络和平行线应该保持一致。

可能的型号:

A)“拓扑”模型 每个点存储指向北,南,东和西点的指针。

class Point
{
    private:
            double lat;
            double lon;
            Point *north;
            Point *south;
            Point *east;
            Point *west;
            ...
};

class Meridian
{
    private:
            double longitude;
            Point *start;
            Point  *end;
            unsigned int points_total;
};

class Parallel
{
    private:
            double latitude;
            Point *start;
            Point  *end;
            unsigned int points_total;
};

优点:

  • 我们可以在南北方向上穿过每个子午线,反之亦然。我们可以在东西方向上遍历每个平行线,反之亦然。
  • 我们确定每个点是在子午线内还是平行(使用指针)。
  • 小存储要求......

缺点:

  • 仅对每个子午线/平行点进行顺序访问
  • 复制构造函数和operator =的问题。应该分几个阶段完成一组点的副本:创建一个新的点实例,使用std :: map添加点之间的拓扑关系,改变子午线/并行的端点......这是相当慢的......

第二个缺点导致我放弃了这个模型。

B)积分清单。经络/并行存储点列表,没有拓扑关系。

class Point
{
    private:
            double lat;
            double lon;
};

class Meridian
{
    private:
            double longitude;
            std::vector <Point> points;
};

class Parallel
{
    private:
            double latitude;
            std::vector <Point> points;
};

优点:

  • 我们可以在南北方向上穿过每个子午线,反之亦然。我们可以在东西方向上遍历每个平行线,反之亦然。
  • 复制构造函数和operator =
  • 没有问题
  • 对每个点进行顺序和直接访问。

缺点:

  • 我们无法确定每个点是否属于任何子午线/并行(使用指针)。
  • 更大的存储要求。
  • 在任何时候我们都无法找到子午线/平行线的上一个/下一个点,我们没有指针......

最后一个缺点可能会导致放弃模型并导致我考虑修改的拓扑模型变体....

我正在进行一些空间模拟,并在几个cartografic投影中表示结果,因此高效的数据存储对我来说非常重要。

也许有人可以提出更好的模型:-)。谢谢你的回答...

1 个答案:

答案 0 :(得分:1)

如果您在地球的曲面上存储经线和平行线,您可能会对计算几何中用于表示闭合二维流形的一些数据结构感兴趣。像quad-edgewinged-edge这样的结构专门设计用于快速查找靠近给定边,点或扇区的边,点或扇区,其方式可以通过添加或删除新边缘。我不确定这在你的特定应用中会有多大用处,但我认为它们可能是一个很好的起点。在C ++中,这些结构肯定有很好的实现,但我不知道有什么不在我的脑海中。