Первый. Есть растр, прикрепленый к карте. Мне нужно производить с растром в интерактиве манипуляции, т.е. мышкой таскать (1) и растягивать (2). Первое сделал, вопрос собственно по второму пункту. Есть функции mapSetRstScale(...) и mapSetRstPrecision(...) в них задается конкретное значение scale и precision. Вопрос: у меня есть два Rect'a растра (старый и новый) - могу ли я имея эти данные вычислить такие значения scale и precision, чтобы вписать растр в новый Rect?
Второй. Можно ли масштабировать растр без сохранения пропорций? Например, только по оси X?
Третий. При открытии нескольких растров (например одной и той же области, но с разной детализацией) при отрисовке они рисуются на карте в порядке их открытия. Можно ли как-нибудь программно менять их порядок отрисовки? Например, как в Visio, по правой кнопке в меню два пункта "На задний план" и "На передний план", что-то типо этого.
Для растягивания растра предлагаю воспользоваться функцией из библиотеки MAPPICEX, которая объявлена в файле MAPPICEX.H:
Код
// Привязка растра с масштабированием по двум точкам
// hMap - карта, содержащая векторные данные;
// rswName - имя файла растра
// pointMet1 - Координаты первой точки в метрах
// pointMetNew1- Новые координаты первой точки в метрах
// pointMet2 - Координаты второй точки в метрах
// pointMetNew2- Новые координаты второй точки в метрах
// message - флаг на выдачу сообщений (0\1)
// При ошибке возвращает ноль
long int WINAPI _export AttachRswWithScaling(HMAP hMap, char* rswName,
DOUBLEPOINT *pointMet1, DOUBLEPOINT *pointMetNew1,
DOUBLEPOINT *pointMet2, DOUBLEPOINT *pointMetNew2,
int message);
Цитата
Можно ли масштабировать растр без сохранения пропорций? Например, только по оси X?
В нашей системе размер пикселя растра в метрах один для оси X и для оси Y. Для решения Вашей задачи предлагаю следующую функцию из библиотеки MAPPICEX, которая также объявлена в файле MAPPICEX.H:
Код
Трансформирование растра
// (вычисление коэффициентов пересчета координат методом наименьших квадратов)
//
// handle - диалог визуального сопровождения процесса обработки;
// map - карта,содержащая векторные данные;
// parm - параметры прикладной задачи;
// namein - имя исходного растра;
// nameout - имя выходного растра;
// fact - исходные координаты опоры;
// teor - желаемые координаты опоры;
// count - количество опорных точек (не меньше 4-х).
//
// Диалогу визуального сопровождения процесса обработки посылаются сообщения:
// - (WM_PROGRESSBAR) Извещение об изменении состояния процесса
// WPARAM - текущее состояние процесса в процентах (0% - 100%)
// Если функция-отклик возвращает WM_PROGRESSBAR, то процесс завершается.
// При ошибке возвращает ноль,
//==============================================================================
long int WINAPI _export RswTransformingBySquareMethod(HMAP map,HMESSAGE handle,
TASKPARMEX * parm,char * namein,char * nameout,
long int count,DOUBLEPOINT * fact,DOUBLEPOINT * teor);
Цитата
При открытии нескольких растров (например одной и той же области, но с разной детализацией) при отрисовке они рисуются на карте в порядке их открытия. Можно ли как-нибудь программно менять их порядок отрисовки? Например, как в Visio, по правой кнопке в меню два пункта "На задний план" и "На передний план", что-то типо этого.
Посмотрите функцию из RstApi.h:
Код
// Поменять очередность отображения растров (rst) в цепочке
// Последний растр в цепочке отображается в последнюю очередь
// Нумерация растров в цепочке начинается с 1 и заканчивается номером mapGetRstCount(..)
// oldNumber - номер файла в цепочке
// newNumber - устанавливаемый номер файла в цепочке
// При ошибке возвращает 0
_MAPIMP long int _MAPAPI mapChangeOrderRstShow(HMAP hMap, long int oldNumber,
long int newNumber);
с этим трудно )) какая именно версия библиотеки (libmapaccess.so и др.) не знаю, могу сказать одно - это библиотека под MCBC (где-то января 2008 года) и в ней корректно работает mapPaintToXImage(...) на глубине 24 и 32 бита
Но, в принципе, все 3 вопроса уже решены (пришлось масштабирование сделать с сохранением пропорций)