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

Работа с функцией RstRotating

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

1) В чем разница между функциями RstRotating и RstPlaneRotating?

2) параметры

map        - карта,содержащая векторные данные;
RstNumber  - номер исходного растра в цепочке растров;

Можно раскрыть допустимые значения?
Можно ли map = 0? Если да ,то RstNumber - ?
 
Цитата
1) В чем разница между функциями RstRotating и RstPlaneRotating?
для RstRotating:
 NullPoint  - координаты точки поворота в элементах растра; по большому счёту пиксели

для RstPlaneRotating:
 NullPoint  - координаты точки поворота в метрах на местности; в метрах на карте

Цитата
2) параметры юююю Если да ,то RstNumber - ?
RstNumber - номер подключенного растра к карте.
Если порядок (последовательность) подключения растров к карте не известна, номер можно "взять" функцией
Цитата
 // Запросить номер растра в цепочке по имени файла  // 28/04/10
 // name        - имя файла растра
 // В цепочке номера растров начинаются с 1.
 // При ошибке возвращает ноль
_MAPIMP  long int _MAPAPI mapGetRstNumberByName(HMAP hMap, const char* name);
Не тот глуп кто не знает, а тот, кто не знает где искать.
 
1)Спасибо дошло.

2)Фото делается с бпла и собирается из нескольких фотографий.
Поэтому требуется добавить и если требуется повернуть.
Как преобразовать фотографию в .rsw я решил(работает).
А вот с поворотом полученного .rsw возникли вопросы.
Карты векторной у меня нет => map = 0,
RstNumber - ? или минимум 1 или вызвать mapGetRstNumberByName

RstRotating - можно пример(желательно когда map = 0) использования?

Потом после поворота планировал подключить полученный растр к карте.
Если я ошибаюсь подскажите правильную последовательность работы.
 
Цитата
Артем пишет:
А вот с поворотом полученного .rsw возникли вопросы.
Карты векторной у меня нет => map = 0,
RstNumber - ? или минимум 1 или вызвать mapGetRstNumberByName

RstRotating - можно пример(желательно когда map = 0) использования?
Функция RstRotating (RstPlaneRotating) предназначена для поворота изображения растра на фиксированный угол вокруг указанной точки на растре. Функции RstRotating и RstPlaneRotating отличаются друг от друга единицами измерения координат точки, относительно которой выполняется поворот. В первом случае это элементы растра, во втором - метры на местности в системе координат документа.
Функция RstRotating используется в ГИС Карте 2011 в следующих режимах:
• Привязка растра по двум точкам -> С масштабированием и поворотом
• Привязка растра по двум точкам -> Поворот без масштабирования
• Привязка растра по двум точкам -> Горизонтальное выравнивание
• Привязка растра по двум точкам -> Вертикальное выравнивание
• Поворот растровой карты
Для выполнения поворота растра достаточно открыть растр в отдельный документ без карты следующими функциями:
• _MAPIMP HMAP _MAPAPI mapOpenData(const char *name, long int mode = 0), объявлена в mapapi.h.
• _MAPIMP HMAP _MAPAPI mapOpenDataUn(const WCHAR * name, long int mode = 0), объявлена в mapapi.h.
• _MAPIMP HMAP _MAPAPI mapOpenDataEx(const char *name, long int mode, long int *error), объявлена в mapapi.h.
• _MAPIMP HMAP _MAPAPI mapOpenRst(const char *rstname, long int mode = 0), объявлена в rstapi.h.
• _MAPIMP HMAP _MAPAPI mapOpenRstUn(const WCHAR *rstname,long int mode), объявлена в rstapi.h.
На вход указанным выше функциям необходимо подать имя файла растра. Функции возвращают идентификатор документа HMAP, который в нашем случае содержит один растр. Полученный идентификатор документа HMAP передаем в вызываемые API-функции, предназначенные для обработки растра. Для вызова функций обработки растра потребуется так же номер растра в цепочке. Для получения номера растра в цепочке, как правильно подсказал KFF,  можно воспользоваться функциями, объявленными в rstapi.h:
• _MAPIMP long int _MAPAPI mapGetRstNumberByName(HMAP hMap, const char *name);
• _MAPIMP long int _MAPAPI mapGetRstNumberByNameUn(HMAP hMap, const WCHAR* name);
Закрытие документа выполняется функцией _MAPIMP void _MAPAPI mapCloseData(HMAP hMap).
 
Если растр отрывается отдельной функцией, то для чего

 NameRstIn  - имя исходного растра;
 NameRstOut - имя выходного растра;


?
 
Цитата
Артем пишет:
Если растр отрывается отдельной функцией, то для чего

NameRstIn - имя исходного растра;
NameRstOut - имя выходного растра;

Код
//========================================================================
//    Поворот растра вокруг точки NullPoint на угол Angle      
//
//    map        - карта,содержащая векторные данные;
//    RstNumber  - номер исходного растра в цепочке растров
//    NameRstIn  - имя исходного растра;
//    NameRstOut - имя выходного растра;
//    NullPoint  - координаты точки поворота в элементах растра;
//    Angle      - угол поворота (в радианах);
//    handle     - диалог визуального сопровождения процесса обработки.
//========================================================================
_MAPIMP long int WINAPI RstRotating(HMAP map, long int RstNumber,
char * NameRstIn, char * NameRstOut,
DOUBLEPOINT NullPoint, double Angle,
HMESSAGE handle);



Аргумент NameRstOut предназначен для передачи в функцию имени выходного растра, т.к. функция RstRotating создает новый растр с повернутым изображением. Имена исходного и выходного растров должны отличаться.
Идентификация исходного растра осуществляется аргументами RstNumber и NameRstIn.

Функция RstRotating также будет обрабатывать растр, который добавлен в документ карты (матрицы, растра, и т.д.).  Добавление растров в документ выполняется следующими функциями:
• _MAPIMP long int _MAPAPI mapOpenRstForMap(HMAP hMap, const char *rstname, long int mode); объявлена в rstapi.h.
• _MAPIMP long int _MAPAPI mapOpenRstForMapUn(HMAP hMap, const WCHAR *name, long int mode); объявлена в rstapi.h.

// Добавить данные к открытой карте (карту, растр, матрицу)
 // hMap -  идентификатор открытых данных
 // name - имя открываемого файла (SIT, MTW, MTQ, RSW, MPT)
 // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
 // Возвращает идентификатор типа данных (FILE_MAP - для пользовательской
 // карты, FILE_RSW - для растра, FILE_MTW - для матрицы, FILE_MTL - для
 // матрицы слоев, FILE_MTQ - для матрицы качеств), данные добавляются в
 // список последними, если данные уже были открыты, число открытых данных
 // (карт, растров, матриц) не меняется
 // transform - признак трансформирования пользовательской карты
 //             к ранее открытым данным (если проекции разные):
 //             0 - не трансформировать данные (преобразовывать "на лету"),
 //             1 - трансформировать данные при открытии и сохранить карту
 //                 в новой проекции,
 //            -1 - задать вопрос пользователю.
 // В серверной версии (-1) обрабатывается, как 0.
 // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapAppendData(HMAP hMap, const char *name,  long int mode = 0); объявлена в mapapi.h.
• _MAPIMP long int _MAPAPI mapAppendDataEx(HMAP hMap, const char *name,  long int mode = 0, long int transform = -1); объявлена в mapapi.h.

 // Добавить данные к открытой карте (карту, растр, матрицу)
 // hMap -  идентификатор открытых данных
 // name - имя открываемого файла (SIT, MTW, MTQ, RSW, MPT) в кодировке UNICODE
 // mode - режим чтения/записи (GENERIC_READ, GENERIC_WRITE или 0)
 // transform - признак трансформирования пользовательской карты
 //             к ранее открытым данным (если проекции разные):
 //             0 - не трансформировать данные (преобразовывать "на лету"),
 //             1 - трансформировать данные при открытии и сохранить карту
 //                 в новой проекции,
 //            -1 - задать вопрос пользователю.
 // В серверной версии (-1) обрабатывается, как 0.
 // password - пароль доступа к данным из которого формируется 256-битный код
 //            для шифрования данных (при утрате данные не восстанавливаются)
 // size     - длина пароля в байтах !!!
 // Передача пароля необходима, если при создании карты он был указан.
 // Если пароль не передан, а он был указан при создании,
 // то автоматически вызывается диалог scnGetMapPassword из mapscena.dll (gisdlgs.dll)
 // Если выдача сообщений запрещена (mapIsMessageEnable()), то диалог
 // не вызывается, а при отсутствии пароля происходит отказ открытия данных
 // Возвращает идентификатор типа данных (FILE_MAP - для пользовательской
 // карты, FILE_RSW - для растра, FILE_MTW - для матрицы, FILE_MTL - для
 // матрицы слоев, FILE_MTQ - для матрицы качеств), данные добавляются в
 // список последними, если данные уже были открыты, число открытых данных
 // (карт, растров, матриц) не меняется
 // При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapAppendAnyData(HMAP hMap, const WCHAR *name, long int mode = 0, long int transform = -1); объявлена в mapapi.h.

• _MAPIMP long int _MAPAPI mapAppendDataUn(HMAP hMap, const WCHAR *name,  long int mode = 0); объявлена в mapapi.h.
• _MAPIMP long int _MAPAPI mapAppendAnyDataPro(HMAP hMap, const WCHAR *name,  long int mode = 0, long int transform = -1, const WCHAR *password = 0, long int size = 0); объявлена в mapapi.h.
 
Спасибо за помощь.
Функция заработала, поворачивает.
Но возник вопрос.
Я задаю поворот от пиксела(0, 0) на 15 градусов против часовой стрелки.
А растр поворачивается на 15 градусов + поворот(изменение привязки растра) 15 градусов относительно точки(0, 0) в ск-

Для примера юго-западная точка в начале имеет координаты - 1608, 2144
, а после преобразования 2653.11, 378.98.
Если задать эти координаты привязки нулевыми, то функция считает нормально(точка привязки не меняется).

Могу выслать вам на почту полученные файлы.
Изменено: Артем - 04.02.2014 09:38:17
 
1) Поправьте комментарии описывающие функции(mappicex.h):
AttachRswWithScaling, AttachRswWithScalingAndRotation, AttachRswWithScalingAndRotationEx.

2) Не получается осуществить привязку растра.
Если без поворота, то все нормально. При добавлении растра к открытой векторной карте(ГИС Панорама мини 11), он отображается правильно.
Юго-западный угол растра попадает на требуемую точку привязки.
- Ели требуется поворот, то возникает проблема со смещением точки привязки.
Процедура привязки с поворотом получается такая
создаем растр по фотографии(+ привязка) picexLoadJpegToRswAndCompress.
открываем его mapOpenRstUn
получаем номер растра mapGetRstNumberByNameUn
осуществляем вращение RstRotating
закрываем растр mapCloseMap
Полученный растр повернут + привязка сбита.
Пробовал для поворота указывать точку привязки (0,0) вращает нормально, но потом при привязке полученного растра выскакивает тот же сдвиг привязки.
Чем больше угол поворота тем больше ошибка в привязке растра.
-В ГИС Панораме мини 11 есть возможность поворота, но почему только на углы кратные 90?
- Если можно приведите пожалуйста код для привязки с поворотом.
 
На Вашу почту выслали два файла.
Смотрите функцию int TRstRotate::Run()
 
Проверьте на правильную ли почту отправили.
У меня ни во входящих и спаме нет ничего.
Только письмо с изменением форума.
Страницы: 1 2 След.
Читают тему (гостей: 1)



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

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