Построение матрицы высот для открытой карты выполняет функция mapBuildMtwUn (mtrapi.h) Обработка матриц высот представлена в разделе 6.3.3 документа [URL=https://gistoolkit.com/download/doc/mapapi.pdf]https://gistoolkit.com/download/doc/mapapi.pdf[/URL] [CODE] // Построение матрицы по векторной карте на заданный участок района работ // hMap - исходная карта для построения матрицы // mtrname - полное имя создаваемой матрицы // filtername - полное имя фильтра объектов // Вместе с картой может располагаться фильтр объектов - // текстовый файл MTRCREA.IMH, содержащий перечень кодов // объектов, используемых при построении матрицы (см. MAPAPI.DOC) // Если filtername равно нулю - фильтр объектов не используется, при этом // обрабатываются объекты карты с семантикой "Абсолютная высота" // mtrparm - параметры создаваемой матрицы, // handle - идентификатор окна диалога, которому посылаются сообщения о ходе процесса
_MAPIMP long int _MAPAPI mapBuildMtwUn(HMAP hMap, const WCHAR *mtrname, const WCHAR *txtname,BUILDMTW *mtrparm, HWND handle);[/CODE]
Если Вы работаете в районе, полученном из файлов обменного формата SXF, то удобнее построить единую матрицу высот на весь район функцией mapBuildMtwUn. Далее можно запрашивать высоты из построенной матрицы в системе координат района.
Эта пара матриц имеет особенность. Матрицы расположены в разных зонах (O-35-048.mtw - зона 5, O-36-037.mtw - зона 6). Координаты "Y" отдельно открытых матриц различаются (зона 5 - 5 658 000, зона 6 - 6 340 000). Первой открыта матрица O-35-048.mtw, расположенная в зоне 5. Вторая матрица O-36-037.mtw при добавлении рассматривается как часть карты зоны 5. Поэтому запрос высот нужно выполнять в системе координат первой открытой матрицы.
Создание палитры для матрицы качеств в цветах пользователя (mtrapi.h) // Формирование палитры матрицы качеств // Для формирования результирующей палитры (resultPalette) используется исходная // палитра (skeletPalette), количество цветов результирующей палитры // (resultColorCount) и флаг плавного изменения цветов (smoothColorModification). // skeletPalette - исходная (скелетная) палитра, массив размером sizeof(COLORREF)*256, // содержащий граничные цвета интервалов, разделённые пустыми // элементами (значение 0xFFFFFFFF); // resultPalette - результирующая палитра, массив размером sizeof(COLORREF)*256; // resultColorCount - количество формируемых цветов результирующей палитры // (не более 256); // smoothColorModification - флаг плавного изменения цветов результирующей палитры : // 0 - внутренние цвета интервала повторяют начальный цвет интервала, // 1 - составляющие интенсивности внутренних цветов интервала равномерно // изменяются от начального цвета интервала к конечному. // Цвета исходной палитры переносятся в соответствующие позиции результирующей // палитры, остальные цвета результирующей палитры заполняются поинтервально в // зависимости от значения флага smoothColorModification. // При ошибке возвращает ноль.
_MAPIMP long int _MAPAPI mapMakeMtqPalette(COLORREF* skeletPalette, COLORREF* resultPalette, long int resultColorCount, long int smoothColorModification);
Нужно задать "скелетные" цвета, между которыми интенсивности могут меняться плавно или скачком в зависимости от флажка smoothColorModification
// Запросить число цветов в палитре матриц высот long int _MAPAPI mapGetMtrPaletteCount(HMAP hMap);
// Запросить текущую палитру матрицы высот // hMap - идентификатор открытой основной векторной карты // palette - адрес области для размещения палитры // count - число считываемых элементов палитры // (размер области в байтах / 4) // При ошибке возвращает ноль
long int _MAPAPI mapGetMtrPalette(HMAP hMap, COLORREF *palette, long int count);
// Запросить эталонную палитру матрицы высот // hMap - идентификатор открытой основной векторной карты // palette - адрес области для размещения палитры // count - число считываемых элементов палитры // (размер области в байтах / 4) // При ошибке возвращает ноль
long int _MAPAPI mapGetMtrStandardPalette(HMAP hMap, COLORREF *palette, long int count);
Немного упростил заполнение массива точек, по которым строится матрица. Предположил, что на Вашем примере все точки выстроились в одну линию и триангуляция не построилась. Попробовал задать пять точек (квадрат с точкой в центре), триангуляция построилась. [IMG WIDTH=1254 HEIGHT=830]https://imageup.ru/img193/4750819/1.png[/IMG] [CODE]XYHDOUBLE P0; P0.X = 6136000; P0.Y = 7405000; P0.H = 10;
int colorCount = mapGetSiteColorsCount(Map, Map); mapGetSiteColors(Map, Map, colors, colorCount);
double elem = 50;
long int res = mapBuildMtqUn(Map, MtqParm->NameMTQ, colors, colorCount, array, 5, elem, P0.H, P0.H * 5, 0);[/CODE] [IMG WIDTH=611 HEIGHT=438]https://i.yapx.ru/XLXDz.png[/IMG] Эта матрица построена на карте Подольск (данные инсталляции) .
Функции построения матриц качеств описаны в mtrapi.h
1. Условные "веса" (значения температуры) можно занести в массив трёхмерных точек XYH, где H - значение температуры и применить функцию
Построение матрицы качеств по массиву значений характеристики качества mapBuildMtqUn
2. Если значения характеристики качества (температуры) содержатся в координате H трёхмерной метрики объектов карты, то можно применить функцию
Построение матрицы поверхности (матрицы качеств или матрицы высот) по данным векторной карты mapBuildMatrixSurfaceUn В параметрах (структура BUILDSURFACE описана в maptype.h) можно задать Method = 9 или 10. При задании Method = 8 используются точки массива PointArray (аналог функции mapBuildMtqUn)
Работа с матрицами представлена в разделе 4.3 документа ГИС "Панорама" ПАРБ.00046-06 Прикладные задачи. Разработка новых модулей [URL=https://gistoolkit.com/download/doc/mapapi.pdf]https://gistoolkit.com/download/doc/mapapi.pdf[/URL]