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

Как понять какой функцией конвертировать растр tif

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
Как понять какой функцией конвертировать растр tif
 
Здравствуйте!
Я конвертирую растры(tif) с помощью picexLoadGdalFileToRswUn. Все было нормально. Но на новой партии растров получил неудовлетворительный результат. Растры получаются блеклые, объекты на нем плохо различимые. Я попробовал конвертировать их в ГИС Операторе 13.  Если конвертировать "Импорт растров и матриц" -> "Растры GDAL" результат такой же как у меня. Конвертация "Импорт растров и матриц" -> "Растры" дает удовлетворительный результат.
Из всего этого у меня возникает вопрос: как мне программно выяснить какой функцией конвертировать tif?
Изменено: Дмитрий Т - 24.03.2021 15:22:05
 
Здравствуйте!

Вы не написали, чем отличаются исходные файлы TIFF старой и новой партий.

Причин м.б. множество.
Например, поступили многоканальные снимки, в которых количество каналов больше 3-х.
Классический растр RSW поддерживает отображение 3-х каналов - R(красный), G(зеленый), B(синий).
Если в многоканальном файле TIFF не указано как интерпретировать каналы, какой из каналов соответствует красному, зеленому или синему,
то программа по своему усмотрению использует каналы файла TIFF.

Предлагаю для таких растров TIFF использовать функцию picexGetAccessToGraphicFileUn.
Отличие её от указанных Вами в том, что после импорта растров есть возможность поменять номера отображаемых каналов.
В данном случае на диске создается файл  RSW, который содержит ссылку на открываемый файл Tiff(GeoTiff).
Копирование изображения TIFF в файл  RSW не выполняется.

Такие растры прямого доступа к TIFF можно определить после открытия функцией mapRstIsAccessTiff:
Код
  // Запросить тип растра
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке
  // Возвращает: 0 - обычный растр
  //             1 - растр-пустышка с прямым доступом к файлу TIFF

_MAPIMP long int _MAPAPI mapRstIsAccessTiff(HMAP hMap, long int number);

Изменение номеров отображаемых каналов осуществляется следующими функциями:
Код
 // Запросить количество каналов TIFF-растра с номером  number
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapGetRstBandCount_Tiff(HMAP hMap, long int number);

  // Запросить номер канала TIFF-растра с номером  number, отображаемого красным
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapGetRstRedBand_Tiff(HMAP hMap, long int number);

  // Запросить номер канала TIFF-растра с номером  number, отображаемого зеленым
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapGetRstGreenBand_Tiff(HMAP hMap, long int number);

  // Запросить номер канала TIFF-растра с номером  number, отображаемого синим
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapGetRstBlueBand_Tiff(HMAP hMap, long int number);

  // Установить номер канала TIFF-растра с номером  number, отображаемого красным
  // (если установить -1, то такой канал не используется)
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapSetRstRedBand_Tiff(HMAP hMap, long int number, int redband);

  // Установить номер канала TIFF-растра с номером  number, отображаемого зеленым
  // (если установить -1, то такой канал не используется)
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapSetRstGreenBand_Tiff(HMAP hMap, long int number, int greenband);

  // Установить номер канала TIFF-растра с номером  number, отображаемого синим
  // (если установить -1, то такой канал не используется)
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке

_MAPIMP long int _MAPAPI mapSetRstBlueBand_Tiff(HMAP hMap, long int number, int blueband);
 
Здравствуйте!
Настройка растра после загрузки, это не совсем то, что нам нужно. Мы бы хотели получить готовый вид сразу, на этапе его конвертации.

В ГИС Операторе я попробовал конвертировать его тремя способами:
1. "Импорт растров и матриц" -> "Растры"
2. "Импорт растров и матриц" -> "Растры GDAL" без дополнительных опций
3. "Импорт растров и матриц" -> "Растры GDAL" с установкой "Гистограмма"->"По соответствующему каналу"
Результаты прилагаю.

Третий вариант удовлетворителен. Вызовы каких функций повторяют конвертацию #3 в ГИС Операторе?

Дополнительно отправляю Вам на почту tif.
v3.png (875.98 КБ)
v2.png (117.24 КБ)
v1.png (1.21 МБ)
 
Какие функции вызывать, чтобы сделать такой же растр, который получается в ГИС Операторе следующим способом: "Импорт растров и матриц" -> "Растры GDAL" с установкой "Гистограмма"->"По соответствующему каналу"?
 
Добрый день!

Функция picexLoadGdalFileToRswUn - это упрощенный вариант работы диалога "Импорт растров из форматов IMG, Tiff (GeoTiff)..." ("Импорт растров и матриц" -> "Растры GDAL").
Возможности программно при помощи параметров API-функции установить флаг "Гистограмма->По соответствующему каналу" нет.
Вызов API-функцией диалога "Импорт растров из форматов IMG, Tiff (GeoTiff)..." поможет в решении задачи?
 
Использование ваших диалогов для нашей среды разработки не подходит. Можно каким либо еще образом корректно конвертировать tif, который я вам отправил?
 
https://www.gisweb.ru/forum/messages/forum2/topic10212/message77540/10212-3d-model-qt-mingw-windows#...

Александр Савелов написал:
Мы предлагаем принципиально использовать один из следующих подходов для разработки под Windows:
- GIS Toolkit для Windows (MAPAPI, диалоги, графические компоненты) без использования Qt;
- GIS Toolkit для Windows (MAPAPI) с использованием Qt.

Исходя из примера исходного кода, Вы используете диалоги из состава GIS Toolkit для Windows вместе с Qt - вариант, который нами на данный момент не поддерживается.
 
Цитата
Дмитрий Т написал:
Использование ваших диалогов для нашей среды разработки не подходит. Можно каким либо еще образом корректно конвертировать tif, который я вам отправил?
Вы можете использовать библиотеки GDAL и описание формата RSW для выполнения конвертирования любых растров.

Описание формата RSW, MTW. Структура данных в двоичном виде https://gistoolkit.com/download/doc/sxf4mtwrsw.pdf
 
Что значит использовать описание формата RSW для выполнения конвертирования растра?
 
Вы можете читать любой растр средствами GDAL и сохранять его в RSW целиком или полосками функциями rstapi.h:

Например:
Код
  // Запись прямоугольного участка растра
  // hMap    - идентификатор открытой векторной карты
  // number  - номер файла в цепочке
  // bits    - указатель на начало изображения битовой области
  // left    - смещение слева в элементах (выравнено на границу байта)
  // top     - смещение сверху в элементах
  // width   - ширина в элементах (выравнено на границу байта)
  // height  - высота в элементах
  // begining  - начало изображения:
  //   ==  1  - (bits - указатель на первую строку битовой области)
  //   == -1  - (bits - указатель на послелнюю строку битовой области,
  //                          в BMP изображение хранится снизу - вверх)
  // widthinbyte    - ширину прямоугольного участка растра в байтах
  // Принцип выравнивания:
  // при ElementSize() == 1 (бит) - left,width кратны 8,
  //                   == 4 (бит) - left,width кратны 2
  // При ошибке возвращает 0

_MAPIMP long int _MAPAPI mapPutRstFrame(HMAP hMap, long int number, char* bits, long int left, long int top,  long int width, long int height,
                                        long int begining/* = 1*/,  long int widthinbyte /*= 0*/);

Сложные многоканальные tiff можно дополнить RSW-заголовком без преобразования для отображания в MAPAPI:

Например:

Код
// Загрузка растровой карты из Tiff(GeoTiff) в RSW  
// Изображение в RSW не переносится, в RSW записываются заголовки, палитра, УК.
//    hmap -  идентификатор открытых данных
//    PcxName - имя PCX-файла;
//    RstName - имя RST-файла;
//    meterInElementX - размер в метрах элемента по X
//    meterInElementY - размер в метрах элемента по Y
//    point       - привязка растра
//    mapreg      - параметры проекции
//    handle      - диалог визуального сопровождения процесса обработки.
//    compression - флаг использования сжатия при формировании RST-файла (0/1)
//    flagMessage - параметр не используется
//                  Управление диагностическими сообщениями осуществляется
//                  вызовом функции mapMessageEnable.
//                  Если mapIsMessageEnable() возвращает 0, то
//                  диагностические сообщения не выдаются.
//    При ошибке возвращает ноль
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h
_PICIMP long int _PICAPI picexLoadTiffAccessToRswUn(HMESSAGE handle, int enableMessage,  const WCHAR * TiffName, const WCHAR * RstName,
                                           double* meterInPixelX, double* meterInPixelY, DOUBLEPOINT *point);


В mappicex.h описаны и другие функции для импорта растров без диалогов.

Например:
Код

// Загрузка растровых данных посредством библиотеки GDAL
// обрабатываются файлы графических форматов (IMG, PNG, GIF)
//    Map - карта,содержащая векторные данные
//    inputname - имя загружаемого файла
//    rstname   - имя RST-файла
//    meterInElementX - размер в метрах элемента по X
//    meterInElementY - размер в метрах элемента по Y
//    point     - точка привязки растра (в метрах)
//                (положение юго-западного угла растра в районе)
//    Handle - диалог визуального сопровождения процесса обработки.
//    compression - флаг использования сжатия при формировании RST-файла (0/1)
//    flagMessage - параметр не используется
//                   Управление диагностическими сообщениями осуществляется
//                   вызовом функции mapMessageEnable.
//                   Если mapIsMessageEnable() возвращает 0, то
//                   диагностические сообщения не выдаются.
//    flagWorkLog - флаг ведения журнала
//                          (при ==1, выполняется ведения журнала
//                           при == 0, не выполняется ведения журнала)
//    При ошибке возвращает ноль
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h

_PICIMP long int _PICAPI picexLoadGdalFileToRswPro(const WCHAR* inputname,  const WCHAR* rstname, double* meterInPixelX, double* meterInPixelY,
                                                                                 DOUBLEPOINT *point, long int compression, long int compressJpegQuality, EVENTSTATE callevent, void* eventparm);

_PICIMP long int _PICAPI picexLoadGdalFileToRswUn(HMESSAGE handle, TASKPARM* parm,  const WCHAR  * inputname, const WCHAR  * rstname,
                                                                                double* meterInPixelX, double* meterInPixelY, DOUBLEPOINT *point, long int compression, long int flagMessage, long int flagWorkLog);
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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