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

LoadTiffToRstConverter

Поиск  Пользователи  Правила  Войти
Форум » Настольные приложения » GIS ToolKit, GIS ToolKit Active, ГИС Конструктор для Windows
Страницы: 1 2 След.
RSS
LoadTiffToRstConverter, Объясните пожалуйста работу функции
 
Доброго всем времени суток!  :)

Поставили мне задачу: нужно научить программу открывать geotiff

почитала документацию - вот что сложилось в итоге:
если я правильно поняла, то чтобы открыть tiff сначала надо его конвертировать в rsw?
если это действительно так, то возникает следующий вопрос:
нашла функцию  LoadTiffToRstConverter
описание функции:
Код
//======================================================================//    Конвертор Tiff -> Rsw
//    map       - карта,содержащая векторные данные;  :?: 
//    handle    - диалог визуального сопровождения процесса обработки.
//    tifname   - имя TIF-файла;
//    rstname   - имя RST-файла;
//    scale     - масштаб создаваемого растра
//    precision - разрешающая способность создаваемого растра(т/м)  :?: 
//    При ошибке возвращает ноль
//
//    Диалогу визуального сопровождения процесса обработки посылаются
//    сообщения:
//    -  (WM_PROGRESSBAR) Извещение об изменении состония процесса
//       WPARAM - текущее состоние процесса в процентах (0% - 100%)
//       Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
//    -  (WM_ERROR) Извещение об ошибке
//       LPARAM - указатель на структуру ERRORINFORMATION
//       Структура ERRORINFORMATION описана в picexprm.h,
//       WM_PROGRESSBAR и WM_ERROR - в maptype.h
//======================================================================

если я еще только пытаюсь открыть tiff как карту, то откуда мне взять уже открытую карту hmap? и что это должна быть за карта? создать новую через mapCreateRst ?

если сделать так:
Код
   HMAP test_GeoTiffMap;
   lpfn_LoadTiffToRstConverter(test_GeoTiffMap, NULL, "C:\\GeoTiff\\f34118e1.tif", testMapName, 2000, 5000);

то программа крашится, ведь карта по сути дела просто объявлена. и еще не очень понятно, как задать разрешение карты в т/м :(
объясните пожалуйста, как же эта функция работает и зачем ей уже открытая карта?
 
Я из этой ситуации выкрутился, переложив задачу импорта на стандартные средства. Создаю пустую карту, запрашиваю програмно вызов диалога "Список данных карты" (LoadMapListDialog), в нем добавляю Geotiff и в цепочке у меня сразу RSW-пустышка со ссылкой на Tiff. Все дальше работаем функциями для Tiff.
Изменено: Олег Касьянов - 14.02.2012 19:13:09
 
Здравствуйте!

Есть ещё один вариант: из библиотеки gisforms.dll вызывайте функцию LoadImageToRstEx, которая запускает диалог загрузки растровых данных с возможностью выбора файла привязки( WorldFile, TAB, MAP(OziExplorer)). Описание функции в файле GISFORMS.H.

Код
// --------------------------------------------------------------
// Загрузка графического изображения(BMP,PCX,TIFF, GeoTIFF) в растровый формат (RSW)
// Диалог визуального сопровождения процесса загрузки графического
// изображения в растровый формат (RSW)
//    map - карта,содержащая векторные данные;
//    lpszsource - имя файла грформата BMP,PCX,TIFF,GeoTIFF (размер области 260 байт);
//    lpsztarget - область для имени файла растрового формата (размер области 260 байт);
//    При ошибке возвращает ноль
// --------------------------------------------------------------
 long int WINAPI _export LoadImageToRstEx(HMAP hmap,
char* lpszsource,
char* lpsztarget,
TASKPARM* parm);

HMAP передается в качестве параметра функции LoadImageToRstEx для того, чтобы добавить полученный растр RSW в открытую карту.
Если этого не требуется, то укажите в качестве параметра HMAP ноль.
 
Цитата
Олег Касьянов пишет:
Я из этой ситуации выкрутился, переложив задачу импорта на стандартные средства. Создаю пустую карту, запрашиваю програмно вызов диалога "Список данных карты" (LoadMapListDialog), в нем добавляю Geotiff и в цепочке у меня сразу RSW-пустышка со ссылкой на Tiff. Все дальше работаем функциями для Tiff.
Олег, если Вы не против, поясню для _Ann логику программы.
В диалоге "Список данных"(LoadMapListDialog) на закладке "Растры" при нажатии на кнопку "Добавить" в стандартном диалоге открытия файлов указываем загружаемый файл TIFF/GeoTIFF, после этого стартует диалог загрузки растровых данных (LoadImageToRstEx).

Для справки: изображение TIFF/GeoTIFF можно конвертировать в файл RSW. Но файл RSW ограничен тремя 8-ми битными каналами и при загрузке мультиспектрального снимка остальные каналы теряются. Для работы с мультиспектральными снимками формата  TIFF/GeoTIFF существует режим «прямого доступа к изображению», без конвертации в RSW.
Если в диалоге загрузки растровых данных (функция LoadImageToRstEx) в качестве исходного файла выступает мультиспектральный снимок формата  TIFF/GeoTIFF, то необходимо поставить в диалоге галочку «Не копировать исходное изображение в RSW файл». В результате, создается файл RSW (с одним заголовком) и файл с расширением TOF, содержащий обзорное изображение. Для таких растров существует дополнительный функционал: функции с префиксом _Tiff, описанные в rstapi.h.
 
:!: спасибо большое за подробные объяснения! Если честно, то еще ни разу не приходилось пользоваться стандартными диалогами панорамовскими. видимо появился повод  :D

сходу глупый вопрос про hmap:

Цитата
Dmitry_ пишет:
HMAP передается в качестве параметра функции LoadImageToRstEx для того, чтобы добавить полученный растр RSW в открытую карту. Если этого не требуется, то укажите в качестве параметра HMAP ноль.

в rstapi.h не могу найти каких-либо функций с _tiff :( поэтому не посмотреть, через как идет обращение к открытым тиффам. и собсно вопрос глупый: если я передам вместо hmap ноль, то через как мне потом обращаться к тиффу открытому? :(
 
Цитата
_Ann пишет:
в rstapi.h не могу найти каких-либо функций с _tiff  поэтому не посмотреть, через как идет обращение к открытым тиффам.
Скачайте с нашего сайта дистрибутив
Инструментарий разработчика ГИС-приложений GIS ToolKit (версия 11.7.0)
В файле \GisTool11\MapApi\Rstapi.h описаны функции:
Код
  // Установить систему координат отрисовки TIFF-растров  
_MAPIMP  long int _MAPAPI mapSetRstPaintCoordSys(HMAP hMap, MAPREGISTEREX* mapreg, DATUMPARAM * datum, ELLIPSOIDPARAM * ellipsoid);

  // Запросить тип растра   
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке
  // Возвращает: 0 - обычный растр
  //             1 - растр-пустышка с прямым доступом к файлу TIFF
_MAPIMP  long int _MAPAPI mapRstIsAccessTiff(HMAP hMap, long int number);

  // Запросить имя TIFF-файла для растра с номером  number                      
  // hMap   - идентификатор открытой векторной карты
  // number - номер файла в цепочке
_MAPIMP  long int _MAPAPI mapGetRstFileName_Tiff(HMAP hMap, long int number, char * name);

  // Запросить количество каналов 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);
 
Цитата
Dmitry_ пишет:
Скачайте с нашего сайта дистрибутив
Это всё есть в SDK.
 
Да! спасибо! все дело было в версии файла rstapi.h

Цитата
Газонокосильщик пишет:
Это всё есть в SDK.
я не сомневаюсь, что это все есть в sdk. однако при том, что все нужные мне файлы я брала из директории Panorama\GisTool11\MapApi они зачастую не содержат тех функций, которые мне нужны. (устанавливала GIS ToolKit 11.6.0) или я сильно отстала от жизни с GIS ToolKit 11.6.0. или обладаю каким-то особым талантом подменять новое на старое при установке.  :evil:
 
Цитата
_Ann пишет:
если я передам вместо hmap ноль, то через как мне потом обращаться к тиффу открытому?
Полученный файл RSW можно открыть в виде самостоятельного документа функцией mapOpenData() из MAPAPI.H и получить на выходе HMAP, или добавить растр RSW в документ открытой карты (матрицы, растра) функцией mapOpenRstForMap() из RSTAPI.H.
Номер растра в цепочке (number)определяем функцией:
Код
  // Запросить номер растра в цепочке по имени файла 
  // name        - имя файла растра
  // В цепочке номера растров начинаются с 1.
  // При ошибке возвращает ноль

_MAPIMP  long int _MAPAPI mapGetRstNumberByName(HMAP hMap, const char* name);
 
Цитата
_Ann пишет:
не содержат тех функций, которые мне нужны
Тут уже такое положение обсуждалось. Надёжнее всего функции MapAPI грузить из DLL самой Панорамы (если есть такая возможность). Особенно, если пишется приложение именно на MapAPI, без использования GTK.
Удачи! :)
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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