[QUOTE]Для построения зон видимости нужно предварительно по векторной карте
создать матрицу высот с суммарным типом рельефа - функцией 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);
}[/QUOTE]
Спасибо. Код определенно учел некоторые параметры но... Высота леса получилась фиксрованная и не соотетствует картинке на карте. Высота зданий не увидел что учитывается. Проверял на гиспанораме 14 карта г. Луга. К сожалению в ваших бесплатных картах Ногинска и Подольска есть карта высот но нет самих лесов и не видно этого приращения. На видео что я присылаю показан характерный переход учета растительности см. курсор и внизу скачек высот. Полагаю что скачек высот неправильный.
[URL=https://disk.yandex.ru/i/uUwcQxKg5qPnrw]https://disk.yandex.ru/i/uUwcQxKg5qPnrw[/URL]
создать матрицу высот с суммарным типом рельефа - функцией 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);
}[/QUOTE]
Спасибо. Код определенно учел некоторые параметры но... Высота леса получилась фиксрованная и не соотетствует картинке на карте. Высота зданий не увидел что учитывается. Проверял на гиспанораме 14 карта г. Луга. К сожалению в ваших бесплатных картах Ногинска и Подольска есть карта высот но нет самих лесов и не видно этого приращения. На видео что я присылаю показан характерный переход учета растительности см. курсор и внизу скачек высот. Полагаю что скачек высот неправильный.
[URL=https://disk.yandex.ru/i/uUwcQxKg5qPnrw]https://disk.yandex.ru/i/uUwcQxKg5qPnrw[/URL]