Добрый день!
Подскажите пожалуйста, возможно ли корректно использовать создание и добавления карт для следующих целей:
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);
Все функции отрабатывают без ошибок, но полученная в итоге карта имеет явно не требуемые границы, а от нулевых координат до самой западной и северной точки добавленных карт, добавленные карты видны на самом крупном масштабе, при приближении они исчезают.
Как корректно создавать и добавлять карты для этих целей?
Заранее спасибо за помощь!
Подскажите пожалуйста, возможно ли корректно использовать создание и добавления карт для следующих целей:
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);
Все функции отрабатывают без ошибок, но полученная в итоге карта имеет явно не требуемые границы, а от нулевых координат до самой западной и северной точки добавленных карт, добавленные карты видны на самом крупном масштабе, при приближении они исчезают.
Как корректно создавать и добавлять карты для этих целей?
Заранее спасибо за помощь!