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

Александр Горбунов (Все сообщения пользователя)

Поиск  Пользователи  Правила  Войти
Форум » Пользователи » Александр Горбунов
Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 38 След.
Извлечение матрицы высот из загруженной карты
 
Построение матрицы высот для открытой карты выполняет функция 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]
Изменено: Александр Горбунов - 25.03.2024 11:38:57
Ошибка работы mapSetMtrTransparent
 
Здесь неточность комментария функции.
Правильно: // transparent - прозрачность в процентах от 1 до 100
mapOpenMtrForMap+mapGetHeightValue, Не возможно получить высоту с помощью mapGetHeightValue
 
mapGetHeightValue
mapOpenMtrForMap+mapGetHeightValue, Не возможно получить высоту с помощью mapGetHeightValue
 
Если Вы работаете в районе, полученном из файлов обменного формата SXF, то удобнее построить единую матрицу высот на весь район функцией mapBuildMtwUn.
Далее можно запрашивать высоты из построенной матрицы в системе координат района.
mapOpenMtrForMap+mapGetHeightValue, Не возможно получить высоту с помощью mapGetHeightValue
 
Эта пара матриц имеет особенность. Матрицы расположены в разных зонах
(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.
Поэтому запрос высот нужно выполнять в системе координат первой открытой матрицы.
Получить палитру матрицы высот
 
Скелетную палитру (массив COLORREF) нужно предварительно почистить значением
0xFFFFFFFF  и затем задать скелетные цвета (границы диапазонов палитры).
Получить палитру матрицы высот
 
Создание палитры для матрицы качеств в цветах пользователя (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
Получить палитру матрицы высот
 
Запрос палитры матрицы высот (mtrapi.h)

// Запросить число цветов в палитре матриц высот
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;

 XYHDOUBLE array[5];

 array[0].X = P0.X;
 array[0].Y = P0.Y;
 array[0].H = P0.H;

 array[1].X = P0.X + 10000;
 array[1].Y = P0.Y;
 array[1].H = P0.H * 2;

 array[2].X = P0.X + 10000;
 array[2].Y = P0.Y + 10000;
 array[2].H = P0.H * 3;

 array[3].X = P0.X;
 array[3].Y = P0.Y + 10000;
 array[3].H = P0.H * 4;

 array[4].X = P0.X + 5000;
 array[4].Y = P0.Y + 5000;
 array[4].H = P0.H * 5;

 COLORREF colors[256];
 memset(colors, 0, sizeof(colors));

 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]
Страницы: 1 2 3 4 5 6 7 8 9 10 11 ... 38 След.



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

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