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

Обновление существующей карты из SXF происходит со смещением

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1
RSS
Обновление существующей карты из SXF происходит со смещением
 
Приветствую!
Используем ГИС Конструктор для Qt Designer x64 (версия 12.6.1), ОС Astra Linux

Появилась необходимость объединить несколько sxf-файлов в один sitx. Однако, если сначала импортировать карту с помощью ImportFromAnySxfEx, а затем добавить ее с помощью UpdateFromAnySxf, то импортированные знаки не совпадают.



Код для воспроизведения:
Код
#include <QString> 
#include <QDebug> 
#include <QImage> 
#include "mapapi.h" 
#include "sitapi.h" 
#include "rscapi.h" 
#include "mapcreat.h" 
#include "maptype.h" 
#include "vecexapi.h"

long int msgHangler(long int hwnd, long int code, long int p1, long int p2,
                    long int typemsg){
    return 0;
}

void saveMap(HMAP hsite, QString filename) {
    XIMAGEDESC desc;
    DFRAME frame;
    mapGetTotalBorder(hsite, &frame, PP_PICTURE);
    RECT rect;
    rect.left = frame.X1 + 1300 ;
    rect.right = frame.X2/10;
    rect.top = frame.Y1 + 2000;
    rect.bottom = frame.Y2/10;

    memset((void*) &desc, 0, sizeof(desc));
    desc.Width = rect.right - rect.left;
    desc.Height = rect.bottom - rect.top;
    desc.Depth = mapGetMapScreenDepth();
    desc.CellSize = desc.Depth / 8;
    desc.RowSize = desc.Width * desc.CellSize;
    desc.Point = (char*) malloc(desc.Height * desc.RowSize);

    mapPaintToXImage(hsite, &desc, 0,0, &rect);
    QImage im2((const uchar*) desc.Point, desc.Width,
               desc.Height, desc.RowSize,
               QImage::Format_RGB32);
    if (!im2.save("/tmp/" + filename, "PNG")) {
        qDebug() << "file 2 save error";
    }
    free(desc.Point);
} 

int main() { 
    QString sxfName("/tmp/sxf/G-44-12.SXF");
    QString mapName("/tmp/sxf/G-44-12.sitx");
    QString rscName("/tmp/sxf/200t05g.rsc");
    long rc = ImportFromAnySxfEx(0, sxfName.toLatin1().constData(), rscName.toLatin1().constData(),
                       mapName.toLatin1().data(), mapName.length()-2,&msgHangler,0, 0);
    if(rc == 0) {
        qDebug() << " ==== Import Error";
        return 0;
    }
    HSITE hsite = mapOpenAnyData((const WCHAR*) mapName.constData());
    mapSetRealShowScale(hsite, 10000);
    saveMap(hsite, "1.png");
    rc = UpdateFromAnySxf(hsite, sxfName.toLatin1().constData(), mapName.toLatin1().data(), mapName.length(), &msgHangler, 0,2);
    if(rc == 0 ) {
        qDebug() << " ==== Update Sxf Error";
        return 0;
    }
    saveMap(hsite, "2.png");
    mapCloseData(hsite);
} 


С уважением,
Александр Попов
 
В дополнение ссылки на файлы в лучшем разрешении UpdateFromAnySxf ImportFromAnySxfEx
 
Цитата
Александр Попов написал:
   QString sxfName("/tmp/sxf/G-44-12.SXF");
   QString rscName("/tmp/sxf/200t05g.rsc");
Здравствуйте!

Пришлите, пожалуйста, указанные файлы на нашу почту технической поддержки - panorama@gisinfo.ru
Спасибо!
С уважением, Демиденко Р.А.
 
Здравствуйте!

 Файлы отправил.

С уважением, Александр Попов.
 
Здравствуйте!

В исходном SXF отсутствовала информация о датуме. Необходимо открыть исходный файл и пересохранить его в SXF.
Информация о датуме запишется и при обновлении не будет смещения.
С уважением, Демиденко Р.А.
 
В новой версии ГИС Конструктор 13 будет добавлена компенсация отсутствия датума при обновлении карты.
Формально - это ошибка исходных данных.
 
Здравствуйте!

Данные sxf файлы ко мне приходят из внешних систем и я не могу их пересохранить.
Прошу подсказать как с помощью API текущей сертифицированной версии:
1. Определить, что sxf файл является "валидным" по составу данных, чтобы перезапросить данные из внешней системы.
2. Как обойти данную проблему без исходного файла?

С уважением, Попов Александр.
 
Вы можете их пересохранить функциями из mapvecex.h.
Добавить объекты из одного SXF на карту из другого SXF можно через импорт на временную карту и перенос объектов с карты на карту.
В этом случае компенсация отсутствия datum уже реализована.

Проанализировать любой SXF можно в соответствии с его описанием. Для хранения параметров геодезической системы применяются служебные семантики.
Страницы: 1
Читают тему (гостей: 1)



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

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