На главную... Продукты | Технологии | Классификаторы | Проекты | Скачать | Цены| Форум | Статьи | Обучение | Контакты

Создание пустой карты всего мира с добавлением к ней карт из sxf

Поиск  Пользователи  Правила  Войти
Форум » Linux » ГИС Панорама для Linux
Страницы: 1 2 След.
RSS
Создание пустой карты всего мира с добавлением к ней карт из sxf
 
Добрый день!

Подскажите пожалуйста, возможно ли корректно использовать создание и добавления карт для следующих целей:
1. Создать пустую карту в проекции меркатора эллипсоида wgs-84 с границами на весь мир (как в google картах).
2. Добавлять к ней карты, загруженные из sxf-файлов в различных форматах(wgs-83, СК-42 и другие). Возможные искажения не сильно страшны.
Чтобы после этого при открытии полученного проекта мы могли видеть на полной карте мира загруженные куски различных районов, на всех масштабах.

Попытался сделать это с помощью следующего кода:

// Создание пустой карты:

   MAPREGISTEREX mapreg;
   LISTREGISTER listreg;
   DATUMPARAM datum;
   ELLIPSOIDPARAM ellipsoid;

   memset((void*)&mapreg, 0, sizeof(mapreg));
   memset((void*)&listreg, 0, sizeof(listreg));

   mapreg.Length = sizeof(MAPREGISTEREX);
   listreg.Length = sizeof(LISTREGISTER);

   int result = mapGetParametersForEPSG(3857, &mapreg, &datum, &ellipsoid);
   if(result == 0)
   {
       int a = 0;
   }
   // Знаменатель масштаба 1 : 100 000
   mapreg.Scale = 100000;

   listreg.XSouthWest = -20037508; // 55.3212;  // B ю-з
   listreg.YSouthWest = -15496570; // 37.48884 // L ю-з
   listreg.XNorthWest = -20037508; // 55.68;  // B с-з
   listreg.YNorthWest = 18764656; // 37.48884;  // L с-з
   listreg.XNorthEast = 20037508; // 55.68;  // B с-в
   listreg.YNorthEast = 18764656; // 37.99;// L с-в
   listreg.XSouthEast = 20037508; // 55.3212;  // B ю-в
   listreg.YSouthEast = -1549657; //37.99;  // L ю-в

   // Проверка корректности паспортных данных и, если надо, то заполнение
   // координат по признаку приоритета 0 - расчет прямоугольных координат
1 - геодезических
   // Структуры MAPREGISTEREX, LISTREGISTER описаны в mapcreat.h
   // При ошибке возвращает ноль

   if (mapCheckAndUpdate(&mapreg, &listreg, 0) == 0)
   {
       qWarning() << Q_FUNC_INFO << "CheckAndUpdate(&mapreg, &listreg, 0) error";
   }

   // Создать новую карту
   HMAP hMap = mapCreateMapEx(mapFilePath, rscPath, &mapreg, &listreg);

   m_mapView->SetMapFileName(mapFilePath);
   m_mapView->SetMapActive(true);
   m_mapView->SetMapVisible(true);

// Добавление к ней карт из sxf-файлов

HMESSAGE handle=(HMESSAGE)loadSxfMessageHandler;

UpdateFromAnySxf(m_mapView->GetMapHandle(), sxfFile1, 0, 0, handle, 0, 2);
UpdateFromAnySxf(m_mapView->GetMapHandle(), sxfFile2, 0, 0, handle, 0, 2);
UpdateFromAnySxf(m_mapView->GetMapHandle(), sxfFile3, 0, 0, handle, 0, 2);

Все функции отрабатывают без ошибок, но полученная в итоге карта имеет явно не требуемые границы, а от нулевых координат до самой западной и северной точки добавленных карт, добавленные карты видны на самом крупном масштабе, при приближении они исчезают.

Как корректно создавать и добавлять карты для этих целей?
Заранее спасибо за помощь!
 
Добрый день!

Карта получается правильная. У пользовательской карты (SIT, SITX) габариты всегда рассчитываются в соответствии с нанесенными на нее объектами. Объекты исчезают, возможно, потому что у них в классификаторе настроены несоответствующие новой карте масштабы видимости.
 
Спасибо за ответ, нанес по краям карты мира пользовательские объекты(как границы), стало похоже на требуемый результат.

Проблемы с видимостью некоторых загруженных областей, а так же с границами отображаемой карты, были из-за того, что по умолчанию, при создании дефолтной карты вышеописанным образом флаг в структуре MAPREGISTEREX - FlagRealPlace стоял по умолчанию в 0, выставил в 1, как у загруженной из sxf-карты - стало все в норме.
Изменено: Андрей Лаптев - 27.03.2016 14:17:52
 
Обнаружилась проблема с отображением векторных объектов карт в СК-42, добавленных к карте по умолчанию в меркаторе на шаре WGS-84:
если добавить на дефолтную карту кодом в первом посте карту Подольска в СК-42, то можно увидеть, что мост в координатах Широта 55°26′10″N (55.436122), Долгота 37°33′8″E (37.552183) отображается в меньшем размере и не над рекой, а рядом на берегу.

Если же эту карту просто загрузить методом ImportFromAnySxf, то все отображается корректно, мост рисуется в границах реки вдоль дороги.

Вследствие чего может происходить такое, и как можно это исправить?
 
Цитата
Андрей Лаптев пишет:
Обнаружилась проблема с отображением векторных объектов карт в СК-42, добавленных к карте по умолчанию в меркаторе на шаре WGS-84:
если добавить на дефолтную карту кодом в первом посте карту Подольска в СК-42, то можно увидеть, что мост в координатах Широта 55°26′10″N (55.436122), Долгота 37°33′8″E (37.552183) отображается в меньшем размере и не над рекой, а рядом на берегу.

Если же эту карту просто загрузить методом ImportFromAnySxf, то все отображается корректно, мост рисуется в границах реки вдоль дороги.

Вследствие чего может происходить такое, и как можно это исправить?

В проекции Меркатора искажение масштаба изображения на широте Подольска около 1:2.
Метрика знака в СК-42 составляет около 0,96 мм., а в проекции Меркатора 1,7 мм. Знак рисуется от крайней точки и оказывается смещенным (1,7-Меркатора, 0,96-СК-42).
Для исключения такого эффекта целесообразно применять линейные знаки или устанавливать в знаке признак "Центрировать по метрике".
 
Спасибо за ответ!

А что можно сделать с уже существующим файлом классификатора? Можно ли при открытии карты проходиться по всем знакам и менять у них признак?
Просто классификаторы предоставляются заказчиком и неизвестно, какой будет использован для отображения карт.
 
Цитата
Андрей Лаптев пишет:
А что можно сделать с уже существующим файлом классификатора? Можно ли при открытии карты проходиться по всем знакам и менять у них признак?
Просто классификаторы предоставляются заказчиком и неизвестно, какой будет использован для отображения карт.

Программно в автоматическом режиме ничего менять нельзя. Классификаторы обычно имеют свойство "только чтение".
Настройку нужно выполнять оператору, проверяя результат на карте.
 
Понятно, тогда остался последний вопрос: есть ли какая-то проекция вместо меркатора, в которой более-менее адекватно будут отображаться на всех широтах одновременно карты в СК-42 и в WGS-84?
 
Разные типы проекций сохраняют на изображении какие-то отдельные измерительные свойства - площади, расстояния, углы.
И применимы в пределах определенной территории.

Топографические карты (СК-42, в частности) сохраняют все свойства на всех широтах, но в пределах ограниченной территории по долготе (зона).
Советовать проекцию на все случаи жизни нельзя.

Нужно вникать в конкретную задачу и подбирать оптимальную проекцию.
В любом случае, на расчеты по карте проекция не влияет. Расчеты выполняются по геодезическим координатам на эллипсоиде.
 
Понятно, спасибо за помощь.
Страницы: 1 2 След.
Читают тему (гостей: 1)



© КБ Панорама, 1991-2024

Регистрируясь или авторизуясь на форуме, Вы соглашаетесь с Политикой конфиденциальности