我正在考虑一些合适的模型来存储经络和平行线。经线和纬线应保持为线。
可能的型号:
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;
};
优点:
- 我们可以沿南北方向遍历每条子午线,反之亦然。我们可以沿东西方向遍历每个平行线,反之亦然。
- 我们确定每个点是在子午线内还是平行(使用指针)。
- 小存储需求...
缺点:
- 仅顺序访问每个子午线/平行点
- 复制构造函数和运算符 = 的问题。一组点的副本应该分几个阶段完成:创建一个新的点实例,使用 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;
};
优点:
- 我们可以沿南北方向遍历每条子午线,反之亦然。我们可以沿东西方向遍历每个平行线,反之亦然。
- 复制构造函数和运算符 = 没有问题
- 顺序和直接访问每个点。
缺点:
- 我们无法确定每个点是否属于任何经线/平行线(使用指针)。
- 更大的存储需求。
- 在任何时候我们都无法找到子午线/平行线的上一个/下一个点,我们没有指针......
最后一个缺点可能导致模型的放弃,并导致我考虑拓扑模型的修改变体......
我正在执行一些空间模拟并在几个地图投影中表示结果,因此高效的数据存储对我来说非常重要。
也许有人可以提出一个更好的模型:-)。谢谢你的回答...