Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 06.03.2010, 13:05   #1
MDmitry
 
Регистрация: 05.12.2009
Сообщений: 9
Репутация: 10
По умолчанию hgt файлы и построение на их основе рельефа

Доброго времени суток.
Я строю трехмерную карту, т.е. с отображением рельефа местности.
Данные высот беру с SRTM3 из *.hgt файлов.

Данные распространяются квадратами размером 1х1 градус, при максимальном доступном разрешение 3 арксекунды такой квадрат является матрицей размером 1201х1201 элементов (пикселей). Один дополнительный ряд (нижний) и одна колонка (правая) являются дублирующим и повторяется на соседней матрице.

Данные являются простым 16 битным растром (без заголовка), значение пиксела является высотой над уровнем моря в данной точке, пиксела также может принимать значение -32768, что соответствует значению no data (нет данных). Референц-эллипсоид данных - WGS84.

Название квадрата соответствует координатам его левого нижнего угла.

Например:
n45e136 /45 гр. с.ш., 136 гр.в.д

Для примера я построил район г. Эльбрус

Считываю таким образом (код приведён на Blitz3D, но разобраться можно.
Код:

file_height=ReadFile("N43E042.hgt") ;Открываем файл
height=ReadByte(file_height)        ; Считываем первый байт
x=0
y=0
While Not Eof(file_height)          ; Пока не достигнут конец файла
height=ReadShort(file_height);      ; Читаем по два байта Возвращаемое значение – integer-число в диапазоне 0-65535 

If (x>299) And (y>399) And (x<300+100) And (y<400+360) Then  ;Ограничение на район г Эльбрус
hx=x-300
hy=y-400
nomer_vertex=hy*(razmer_x+1)+hx
x_vertex=VertexX(relief_surf,nomer_vertex)
z_vertex=VertexZ(relief_surf,nomer_vertex)
VertexCoords relief_surf,nomer_vertex,x_vertex,height,z_vertex   ; Изменяем высоту вершины
EndIf

При использовании OZI Explorer 3D получается нормальная карта Эльбруса, у меня же какая-та череда ущелий и возвышений, что неудивительно, данные считываются, например для
одного из x=const y=1400, 1720, 1211, 2042, 1600 и т.д.

Может кто работал с этими файлами, как правильно осуществить считывание высот из них?
MDmitry вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа на постоянной основе ulusha Работа на постоянной основе - Вакансии 0 19.08.2009 11:01
Выбор из таблицы по двум параметрам и построение таблице на основе выборки WildKosha Microsoft Office Excel 2 08.08.2009 01:53
ГСЧ на основе шума. RomanIgorevi4 Общие вопросы C/C++ 0 04.06.2009 22:16
два вредных вопроса:про асю и прикриплёные файлы файлы steck Свободное общение 3 17.06.2007 14:53


21:56.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru