Здравствуйте уважаемые разработчики! Необходимо отобразить на карте матрицу качеств, содержащую в себе ослабления энергетического состояния радиосигнала в каждой точке вокруг объекта (зону радиопокрытия).
Требования к отображению: -вывод на экран только определенные состояния, подкрашенные определенным цветом; -вывод на экран поверх карты в полупрозрачном режиме.
Матрица и палитра окраски создаются по средствам функций MAPAPI. После чего название созданной матрицы отправляется в QDMapView. На каком этапе необходимо произвести настройку отображения матрицы для решения поставленных задач? И какие функции для этого использовать?
Пример конкретного условия: - ослабление радиоволн в точке ниже -200 ДБ не отображать (значение ослабления отрицательно); - отображенная матрица полупрозрачна.
Матрица радиопокрытия это дополнительный элемент, основная программа для отображения обстановки уже написана и переписывать в MAPAPI не рассматривается из-за сжатых сроков.
Разработка производится в «ГИС Конструктор для ПС Конструктора» версия 10 под МСВС 3.0 изм.4
После заполнения матрицы качеств нужно вызвать mapSetMtqShowRange(... minvalue, maxvalue) - Установить диапазон отображаемых элементов матрицы качеств, элементы со значениями вне границ (minvalue, maxvalue) не отображаются. mapSetMtqPalette(COLORREF * palette, long int count) - Установить описание палитры матрицы качеств (count = кол-во цветов). mapSetMtqPaletteDiapason(double * diapason, long int count) - Установить верхние значения диапазонов палитры матрицы качеств (функция позволяет задать неравномерные диапазоны палитры матрицы качеств, например нужно отобразить значения от 0 до 10 - красным, от 10 до 50 - жёлтым, от 50 до 200 - зелёным. Тогда задаём палитру из трёх цветов функцией mapSetMtqPalette, а потом задаём верхние значения диапазонов палитры функцией mapSetMtqPaletteDiapason в виде массива diapason = {10,50,200} и count = 3) Установить порядок отображения матрицы - mapSetMtrViewOrder(order = 0 - под картой, 1 - над картой) Установить степень видимости матрицы - mapSetMtrView(view = от 0 до 5, 0 - не видна, 1 - полная, 3 - полупрозрачная, 5 - прозрачная)
Спасибо за ответ. Палитру отображения матрицы выбрал дискретную для каждого из диапазона. Возникла проблема с отображением матрицы: - все что не входит в назначенный диапазон окрашивается цветам нулевого диапазона(белый цвет в результате); - прозрачность не включилась. Может я что-то делаю не правильно? скрытие не нужного решилось просто не внесением значения в матрицу.
Вызывает сомнение строка - mapSetMtqShowRange(hm, 1,-100.0, 200.0); Она задаёт для всей матрицы min = -100 max = 200 А верхние значения диапазонов, в сумме с минимумом матрицы составляющие интервал (max-min), начинаются с -200 и кончаются нулём. Попробуйте установить верхние значения диапазонов как в примере предыдущего сообщения (неравномерные диапазоны - красный,жёлтый,зелёный). То есть установите например mapSetMtqShowRange(hm, 1, -250.0, 0.0); Так как весь интервал отображаемых значений матрицы (max-min) состоит из цветовых диапазонов (равномерных или неравномерных), в сумме составляющих весь интервал (max-min).
Пробовал различные вариации установки диапазона. mapSetMtqShowRange(hm, 1,-100.0, 200.0); mapSetMtqShowRange(hm, 1,-90.0, 0.0); mapSetMtqShowRange(hm, 1,-90.0, -80.0); разница только в окрашивании цветом диапазона 0 все что меньше границы min. mapSetMtqShowRange(hm, 1,-90.0, -100.0); все что меньше границы min окрашивается цветом диапазона 0, а все что больше границы min окрашивается цветом диапазона 9.
все что не входит в назначенный диапазон окрашивается цветам нулевого диапазона
В 11 версии предложена функция
Код
// Установить флаги отображения элементов матрицы качеств
// вне границ диапазона, заданного в функции mapSetMtqShowRange
// hMap - идентификатор открытой основной карты
// number - номер матрицы в цепочке.
// viewUp - отображать элементы, значения которых больше верхней
// границы диапазона (параметр maxvalue функции mapSetMtqShowRange)
// viewDown - отображать элементы, значения которых меньше нижней
// границы диапазона (параметр minvalue функции mapSetMtqShowRange)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSetMtqViewOutRange(HMAP hMap, // 08/06/11
long int number,
long int viewUp,
long int viewDown);
2.Прозрачность записывается в файл INI. Задать его можно функцией
Код
// Установить новое имя INI-файла документа
// При ошибке возвращает ноль
_MAPIMP const char * _MAPAPI mapSetMapIniName(HMAP hMap, const char * mapininame);
Записать состояние карты в файл можно функцией
Код
// Сохранить текущие параметры окна карты в INI-файл карты, // 03/10/06
// имя файла можно запросить через mapGetMapIniName()
// Вызывается перед закрытием окна карты
// Сохраняет описание открытых данных, масштаб, палитру, признаки видимости,
// редактируемости, состав отображаемых объектов...
// hmap - идентификатор открытых данных
// point - координаты центра окна в метрах (может быть 0)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapSaveMapState(HMAP hMap, DOUBLEPOINT * point);
Восстановить состояние карты можно функцией:
Код
// Восстановить параметры окна карты из INI-файла карты, // 03/10/06
// имя файла можно запросить через mapGetMapIniName()
// Вызывается после открытия карты
// Восстанавливает описание списка данных, масштаб, палитру, признаки видимости,
// редактируемости, состав отображаемых объектов...
// hmap - идентификатор открытых данных
// point - координаты центра окна в метрах (может быть 0)
// При ошибке возвращает ноль
_MAPIMP long int _MAPAPI mapRestoreMapState(HMAP hMap, DOUBLEPOINT * point);
Возник вопрос по палитре в C#: private uint RGB(int r, int g, int b) { return (uint)(255 + 0x100 * 255 + 0x10000 * 255); //RBG->COLORREF } ... uint[] palette = new uint[10];
В общем, делаю все, как товарищ, создавший тему. Но среди цветов в итоге отображаются только синий и черный (еще иногда прозрачный, когда именно - пока не разобрался). Причем синий и черный остаются независимо от заполнения палитры и ее длины. Подозреваю, что дело может быть в uint или в переводе RGB в COLORREF.