Цитата |
---|
Владислав Костылев написал: По всей видимости задание одного этого параметра не является достаточным условием для функции mapBuildMtw. 1. А имменно какую mtrname надо задавать при открытой матрице высот? |
Для построения зон видимости нужно предварительно по векторной карте
создать матрицу высот с суммарным типом рельефа - функцией mapBuildMtwUn.
Суммарный тип рельефа: сначала строится поверхность по объектам с семантикой "абсолютная высота",
затем к высотам построенной "абсолютной" поверхности добавляются высоты объектов с семантикой "относительная высота".
Пример создания матрицы высот
// Открыть векторную карту
HMAP hMap = mapOpenMap("D:\\Data\\Noginsk\\noginsk.sit", 0);
if (hMap == 0)
{
ShowMessage("hMap == 0");
return;
}
double X1 = mapGetMapX1(hMap);
double X2 = mapGetMapX2(hMap);
double Y1 = mapGetMapY1(hMap);
double Y2 = mapGetMapY2(hMap);
// Заполнение структуры параметров создаваемой матрицы
// (задаём обязательные параметры)
BUILDMTW MtrParm;
memset(&MtrParm, 0, sizeof(MtrParm));
MtrParm.StructSize = sizeof(MtrParm);
MtrParm.BeginX = X1; // Начало матрицы (юго-западный угол)
MtrParm.BeginY = Y1;
MtrParm.Width = Y2 - MtrParm.BeginY; // Размеры матрицы
MtrParm.Height = X2 - MtrParm.BeginX;
MtrParm.ElemSizeMeters = 50; // Размер элемента в метрах
MtrParm.ElemSizeBytes = 4; // Размер элемента в байтах
// Единица измерения высоты (миллиметры)
MtrParm.Unit = 3;
// Тип результирующего рельефа - суммарные высоты (абсолютные + относительные)
MtrParm.ReliefType = 1;
// Заносить в матрицу максимальную высоту (важно для зон видимости)
MtrParm.HeightSuper = 1;
// Средневзвешенная интерполяция по 8 направлениям
// (наиболее быстрый метод вычисления незаполненных из карты элементов)
MtrParm.Method = 2;
int rc = mapBuildMtwUn(hMap, L"mtwfile.mtw", 0, &MtrParm, Handle);
if (rc)
MessageBox(0, "Создание матрицы", "Выполнено", ID_OK);
else
MessageBox(0, "Создание матрицы", "Не выполнено", ID_OK);
// Закрыть векторную карту
mapCloseData(hMap);
}