Растр помимо привязки (координат юго-западного угла изображения) так же как и карта может содержать параметры проекции и системы координат (СК).
Для того, чтобы изображение растра садилось на свое место на карте с другой зоной, необходимо полное соответствие параметров проекции и СК карты и добавляемого растра.
Как это организовано в ГИС Операторе?:
1. Импортируется файл GeoTIFF в RSW. Привязка растра и параметры СК автоматически заносятся в RSW.
2. При добавлении растра в документ карты анализируются параметры проекции и СК карты и растра.
Если они отличаются, то выполняется процедура преобразования проекции растра к проекции карты, которая может занимать некоторое время.
Координаты привязки растра при этом пересчитываются к СК карты.
Добавление растра в документ карты в ГИС Операторе выполняется функцией mapOpenRstForMap().
В Вашем случае, после импорта графического файла в формат RSW (вызовом функции picexLoadBmpToRstAndCompress) необходимо в растр установить параметры проекции и СК.
Код |
---|
//========================================================================
// Загрузка растровых данных из файла BMP в файл RSW
// BmpName - имя BMP-файла;
// RstName - имя RSW-файла;
// meterInElementX - размер в метрах элемента по X
// meterInElementY - размер в метрах элемента по Y
// point - точка привязки растра (в метрах)
// (положение юго-западного угла растра в районе)
// Handle - HWND диалога визуального сопровождения процесса обработки.
// compression - флаг сжатия изображения
// 0 - сжатие к блокам изображения применяться не будет
// 1 - блоки д.б. сжаты по методу LZW
// 2 - блоки д.б. сжаты по методу JPEG (справедливо для 24 битных растров)
// При ошибке возвращает ноль
//
// Диалогу визуального сопровождения процесса обработки посылаются
// сообщения:
// - (WM_PROGRESSBAR) Извещение об изменении состония процесса
// WPARAM - текущее состоние процесса в процентах (0% - 100%)
// Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
//
// - (WM_ERROR) Извещение об ошибке
// LPARAM - указатель на структуру ERRORINFORMATION
// Структура ERRORINFORMATION описана в picexprm.h,
// WM_PROGRESSBAR и WM_ERROR - в maptype.h
//========================================================================
_PICIMP long int _PICAPI picexLoadBmpToRstAndCompress(HMESSAGE Handle,
const char * BmpName,
const char * RstName,
double* meterInElementX,
double* meterInElementY,
DOUBLEPOINT *point,
int compression);
|
Параметров
double* meterInElementX,
double* meterInElementY,
DOUBLEPOINT *point
функции picexLoadBmpToRstAndCompress достаточно для привязки изображения растра.
Координаты привязки растра point, подаваемые на вход функции picexLoadBmpToRstAndCompress, должны соответствовать устанавливаемой в растр проекции и СК.
Для установки параметров проекции и СК необходимо открыть полученный растр в отдельном документе вызовом функции mapOpenData().
Функции, позволяющие установить параметры проекции и СК растра (и многое другое), объявлены в файле rstapi.h.
Как правило, функции принимают на вход дескриптор открытого документа HMAP, который мы получили вызовом функции mapOpenData(), и
номер растра в цепочке (документе), т.к. в документ можно добавить несколько растров.
Номер растра в цепочке (документе) определяется вызовом функции mapGetRstNumberByName.
Например, для установки параметров проекции и СК растра используются функции:
Код |
---|
// Установить данные о проекции растра
_MAPIMP long int _MAPAPI mapSetRstProjectionData(HMAP hMap, int number,
MAPREGISTEREX* mapregister);
// Установить параметры эллипсоида растра
_MAPIMP long int _MAPAPI mapSetRstEllipsoidParam(HMAP hMap, long int number,
const ELLIPSOIDPARAM *ellipsoidparam);
// Установить коэффициенты трансформирования геодезических координат растра
_MAPIMP long int _MAPAPI mapSetRstDatumParam(HMAP hMap, long int number,
const DATUMPARAM *datumparam);
|
Закрытие документа растра осуществляется вызовом функции mapCloseData().
Если все выполнили правильно, то при добавлении растра в документ карты вызовом функции mapOpenRstForMap() изображение растра должно сесть на свое место.