Я думаю о некоторой подходящей модели для хранения меридианов и параллелей. Меридианы и параллели должны быть в виде линий.
Возможные модели:
А) "Топологическая" модель
Каждая точка хранит указатель на север, юг, восток и запад.
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, изменить конечные точки меридиана / параллели ... Это довольно медленно ...
Второй недостаток привел меня к отказу от модели.
Б) Список точек. Меридиан / параллель хранит список точек, топологических связей нет.
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;
};
Плюсы:
- Мы можем пересечь каждый меридиан в направлении север-юг и наоборот. Мы можем пройти каждую параллель в направлении восток-запад и наоборот.
- Нет проблем с конструкторами копирования и оператором =
- Последовательный и прямой доступ к каждой точке.
Минусы:
- Мы не можем определить, принадлежит ли каждая точка какому-либо меридиану / параллели (используя указатели) или нет.
- Большие требования к хранению.
- В любой момент мы не можем найти предыдущую / следующую точку меридиана / параллели, у нас нет указателей ...
Последний недостаток может привести к отказу от модели и побудить меня задуматься об модифицированном варианте топологической модели ....
Я выполняю некоторые пространственные симуляции и представляю результаты в нескольких картографических проекциях, поэтому эффективное хранение данных для меня очень важно.
Может быть, кто-то может предложить лучшую модель :-). Спасибо за ваши ответы ...