hgt файлы и построение на их основе рельефа
Доброго времени суток.
Я строю трехмерную карту, т.е. с отображением рельефа местности.
Данные высот беру с SRTM3 из *.hgt файлов.
Данные распространяются квадратами размером 1х1 градус, при максимальном доступном разрешение 3 арксекунды такой квадрат является матрицей размером 1201х1201 элементов (пикселей). Один дополнительный ряд (нижний) и одна колонка (правая) являются дублирующим и повторяется на соседней матрице.
Данные являются простым 16 битным растром (без заголовка), значение пиксела является высотой над уровнем моря в данной точке, пиксела также может принимать значение -32768, что соответствует значению no data (нет данных). Референц-эллипсоид данных - WGS84.
Название квадрата соответствует координатам его левого нижнего угла.
Например:
n45e136 /45 гр. с.ш., 136 гр.в.д
Для примера я построил район г. Эльбрус
Считываю таким образом
file_height=ReadFile("N43E042.hgt")
height=ReadByte(file_height)
x=0
y=0
While Not Eof(file_height)
height=ReadShort(file_height);
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 и т.д.
Может кто работал с этими файлами, как правильно осуществить считывание высот из них?
|