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

Добавление GeoTIFF в .map карту

Поиск  Пользователи  Правила  Войти
Форум » Linux » Средства разработки ГИС-приложений для Linux
Страницы: 1 2 След.
RSS
Добавление GeoTIFF в .map карту
 
Добрый день! Возникла задача добавить GeoTIFF в map карту, но не совсем понятна правильная последовательность действий. Насколько я понял, сначала нужно импортировать GeoTIFF в RSW, а потом уже добавить RSW в map. Растровые данные в map можно добавить с помощью mapOpenRstForMapUn, а как создать сам RSW?
 
Здравствуйте.

Для импорта GeoTIFF в RSW можно воспользоваться, например функцией picexLoadRasterToRswUn (mappicex.h):    
Код
//========================================================================
// Импорт растровых данных в файл RSW
// handle - диалог визуального сопровождения процесса обработки
// srcname        - имя входного файла (TIF, IMG, PNG, GIF, JPG, BMP, PCX)
// rstname        - имя выходного файла (*.rsw)
// retcode        - код возврата
// Приоритет изъятия параметров привязки:
//   1. Содержимое соответствующих тегов файлов TIF, IMG
//   2. Файл привязки world.file
//   3. Файл привязки TAB (MapInfo)
// Функция ищет файл привязки рядом с исходным файлом srcname,
// перебирая по приоритету типы файлов.
// При ошибке возвращает ноль
//========================================================================
_PICIMP long int _PICAPI picexLoadRasterToRswUn(HMESSAGE handle,
                                                const WCHAR* srcname,
                                                const WCHAR* rstname,
                                                long int * retcode);
 
Спасибо за ответ, но легче не стало. Растр в карту добавляется, но как-то странно.

Во-первых, он не сохраняется в карте. Нужно как-то отдельно его записать? Во-вторых, при попытке панорамирования растр не обновляется и превращается в мешанину точек. Причём именно панорамирование, с масштабированием проблем нет.
 
Работа с картографическим документом предполагает, что он может состоять из произвольного количества векторных, растровых и матричных карт и моделей.
Первые открытые данные являются «главной картой» в документе. При добавлении любых данных к «главной карте», они не записываются в карту, а добавляются в список открытых наборов данных, для их совместного отображения.
Подробнее ознакомиться с открытием данных можно пункте 3.6.1 в Руководства программиста.

Можно сохранить текущий список наборов данных и их свойства в INI-файле или проекте данных MPT. Сделать это можно с помощью функций mapSaveMapState и mapSaveProject (mapapi.h):

Код
// Сохранить текущие параметры окна карты в INI-файл карты,
// имя файла можно запросить через mapGetMapIniName()
// Вызывается перед закрытием окна карты
// Сохраняет описание открытых данных, масштаб, палитру, признаки видимости,
// редактируемости, состав отображаемых объектов...
// hmap  -  идентификатор открытых данных
// point -  координаты центра окна в метрах (может быть 0)
// При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSaveMapState(HMAP hMap, DOUBLEPOINT *point);

Код
  // Сохранить список открытых наборов данных и их свойства в проекте данных MPT
  // hmap - идентификатор открытых данных
  // name - имя файла проекта MPT (структура, как INI-файла)
  // При ошибке возвращает ноль

_MAPIMP long int _MAPAPI mapSaveProjectUn(HMAP hMap, const WCHAR * name);
_MAPIMP long int _MAPAPI mapSaveProject(HMAP hMap, const char * name);

Пожалуйста, предоставьте пример и укажите данные, на которых проявляется данное поведение для проведения тестирования.

Изменено: Константин Ганюшин - 10.03.2021 17:10:26 (уточнил ответ)
 
Насколько подробным должен быть пример? Я использовал этот этот geoTIFF. Также проверял на этом - но в нём я не очень уверен.
 
Достаточно небольшого примера, демонстрирующего указанное поведение.
Если поведение возможно повторить на примере из состава инсталляции, то достаточно указать необходимые модификации и последовательность действий для повторения.

Дополнительно провели небольшую проверку с помощью указанных файлов.
Для этого в пример mapview, добавили импорт с помощью функции picexLoadRasterToRswUn и добавление полученного растра к карте с помощью функции mapAppendDataUn. Поведение повторить не удалось.

 
Цитата
bidjiz написал:
Во-первых, он не сохраняется в карте. Нужно как-то отдельно его записать? Во-вторых, при попытке панорамирования растр не обновляется и превращается в мешанину точек. Причём именно панорамирование, с масштабированием проблем нет.
Добрый день!

Загрузили Ваши данные в настольный продукт ГИС Панорама.
Исходное изображение представлено здесь


Результат загрузки тут


Параметры проекции и привязка растров осуществлена по тегам GeoTiff.
Изменений в отрисовке растровых изображений при смене масштабов и изменении проекций не наблюдается.
С уважением, Демиденко Р.А.
 
Возможно, у меня какая-то проблема с обновлением карты. Пока до конца не разобрался. Столкнулся с ещё одной проблемой - непонятное поведение функции
Код
_MAPIMP long int _MAPAPI mapOpenRstForMapUn(HMAP hMap, const WCHAR *name, long int mode)

Для импорта GeoTIFF в RSW я воспользовался функцией

Код
  _PICIMP long int _PICAPI picexGetAccessToGraphicFileUn(HMESSAGE handle, int enableMessage,
 const WCHAR * sourceName, const WCHAR * outputName, double* meterInPixelX, double* meterInPixelY, DOUBLEPOINT *point)

Но если sourceName отличается от outputName, то функция mapOpenRstForMapUn уже не работает - просто выдаётся ошибка, что tiff с таким именем не найден.
Для примера: допустим, исходный geoTiff называется Riv_UTM.tiff. Получим следующий псевдокод:

Код
// создаём переменные
const WCHAR *sourceName = "Riv_UTM.tiff";
const WCHAR *outputName = "Riv_UTM.RSW";

// получаем RSW из GeoTIFF
picexGetAccessToGraphicFileUn(message_handle, 1, sourceName, outputName, 0, 0, 0);
// и добавляем в карту
mapOpenRstForMapUn(hmap, outputName, GENERIC_READ);

// всё работает

// но если 
const WCHAR *sourceName = "Riv_UTM.tiff";
const WCHAR *outputName = "rsw_map.RSW";

// получаем сообщение об ошибке:
// ERROR 4: rsw_map.tiff: Нет такого файла или каталога
Получается, что mapOpenRstForMapUn для чего-то использует исходный geoTiff, но об этом просто не указано в описании? Или как-то можно задать разные имена. Мне разные имена не особо нужны, но хотелось бы разобраться, почему так происходит.
 
Здравствуйте.

Загрузка файла TIFF в RSW может происходить несколькими способами:
- без копирования изображения в файл RSW (в данном случае требуется наличие одноименного исходного файла рядом с файлом RSW);
- с копированием изображения в файл RSW (наличие исходного файла не требуется).

При использовании функции picexGetAccessToGraphicFileUn происходит загрузка без копирования изображения в формат RSW согласно описанию данной функции.
Поэтому в разрабатываемом приложении необходимо формировать имя RSW в формате <имя_файла_TIFF>.rsw одним из следующих способов:
- передавать в параметрах одноименные файлы RSW и TIFF;
- переименовывать исходный файл после вызова функции.

 
После перерыва вернулся к загрузке GeoTIFF. Получились следующие функции:

Код
void loadGeoTiff(QString name) {

    const char *tiff_name_char = QStringToConstCharP(name);

    QString rsw_name = name.split(".").at(0) + ".RSW";
    const char *rsw_name_char = QStringToConstCharP(rsw_name);

    HMESSAGE handle = nullptr;
    double *meterInPixelX = nullptr;
    double *meterInPixelY = nullptr;
    DOUBLEPOINT* point = nullptr;
    int compression = 0;
    int flagIgnoreGeoTiff = 0;

    picexLoadTiffToRstAndCompressEx(handle, tiff_name_char, rsw_name_char,
                                    meterInPixelX, meterInPixelY, point, compression, flagIgnoreGeoTiff);

    loadRSW(rsw_name);
}

void loadRSW(QString name) {

    const char *rsw_name_char = QStringToConstCharP(name);

    mapOpenRstForMap(map_handle, rsw_name_char, GENERIC_READ);
}
Проблема в том, что они не работают. Если сформировать RSW в настольной "Панораме", а потом загрузить его функцией loadRSW(), то всё загружается
нормально. Но если RSW формируется функцией loadGeoTiff(), то полученный RSW файл имеет некорректные координаты. Видел на форуме упоминание о функциях   LoadGeoTifInformation и   LoadGeoTiffParameters, но приспособить их не получилось. Хотелось бы понять, как правильно загрузить GeoTiff.
В качестве исходного использовал этот файл.
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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