кое-что про ГеоДату... часть разговора с Murkt'ом

Теги:
 
NL iLyK Necrom@ncer #24.01.2007 23:15
+
-
edit
 

iLyK Necrom@ncer

новичок
iLyK Necromncer:
можешь примерно объяснить принцип, по которому геодата хранится в .dat файлах?..... или линку дать? ;)

Murkt:
18 байт заголовков
потом 65536 зон
256*256
зоны бывают трёх типов - цельные, разбитые и разбитые многослойные
цельная зона отгребает два слова описания - уровень земли и уровень воды. Маркер цельной зоны - 00 00. Т.е. в сумме с маркером - три слова, шесть байт
разбитая зона - 40 00 (40 в десятеричной - 64)
за ней идёт 64 слова, которые описывают мелкие ячейки этой зоны
т.е. 64 ячейки
разбитая многослойная - маркеры 41 00 и больше (собственно, количество ячеек в этой зоне)

iLyK Necromncer:
а SolidZoneWithLayers ?

Murkt:
это уже из С4
потом :)

iLyK Necromncer:
=)

Murkt:
и потом 64 блока ячеек - слово количества слоёв в данной ячейке (01 00, 02 00, 09 00, етц) = N, и N слов описаний ячейки на конкретно этом уровне
хоть чуть-чуть понятно? :))

iLyK Necromncer:
начинаю улавливать смысл :)

Murkt:
то есть кусок из него будет такой - 01 00 25 64 01 00 25 64 02 00 25 64 37 85 01 00 25 64
несколько замечаний
я не помню, в каком порядке идут слои - сначала нижний, а потом верхний, или сначала верхний, а потом нижний
потом... описание цельной зоны - последние четыре бита вроде как описывают проходимость зоны... я ни разу не видел, чтобы значение отличалось от "всё проходимо"
для получения высоты мы эти биты просто зануляем... получается, что дискретность цельных зон - 16 попугаев
у ячеек последние четыре бита точно описывают проходимость
для получения высоты, мы их зануляем и сдвигаем вправо ( >> ) на один бит. Поэтому дискретность ячеек - восемь попугаев.
ну и там ещё приколы... По идее, если между слоями расстояние меньше 24, то они "коннектятся", то есть можно перейти с нижнего уровня на верхний
хмм... что ещё?
вроде больше ничего

iLyK Necromncer:
ууу.....начинает закипать :)

Murkt:
потому про SolidZoneWithLayers
фактически - это цельные многослойные зоны
они были нужны, когда уровней много, но в пределах уровня высоты не изменялись
в пределах всех уровней :)
слоёв.
обозначаются они маркерами между 01 00 и 3F 00, включительно

iLyK Necromncer:
не совсем понял цельный-разбитый тип....

Murkt:
смотри
в смысле - что именно?

Murkt:
ты не понял solid zone with layers?

iLyK Necromncer:
не-не

iLyK Necromncer:
solid/divided

Murkt:
не понял различий между solid и divided зонами?

iLyK Necromncer:
что-то вроде того :)
на конкретном примере просвети? ;)

Murkt:
смотри :) разбитая зона:
___/\___/----\____/----

цельная зона:
__________________________________


iLyK Necromncer:
=)
но на цельной зоне вода же может быть... так?

Murkt:
разбитой зоной имитировать цельную можно, но не нужно :)
тебе ответить как задумывалось, или честно?

iLyK Necromncer:
ну

Murkt:
задумывалось, что может быть, и потому в формате это есть
а фактически вышло так, что все водные зоны описываются в отдельном файле, если я не ошибаюсь :))

iLyK Necromncer:
т.е. цельная зона - это, например, равнина какая-то...

Murkt:
да
площадь в городе
ну и просто более-менее равномерные площадки

iLyK Necromncer:
это ясно
в одном файле описано 256 зон?

Murkt:
нет, 256 * 256 = 65536

iLyK Necromncer:
т.е. квадрат 256*256

Murkt:
"территория"

iLyK Necromncer:
весь мир поделен на территории, а они, в свою очередь, на зоны...
так?

Murkt:
кстати. Размер ячейки - 16*16 попугаев. Так как в зоне 8*8 ячеек, то размер зоны - 128*128 попугаев
да

в с1 минимальный размер файла с геодатой - 65536 * 6 + 18 = 393 234
разве что я могу с заголовками немного ошибиться, с их длиной
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru