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