| Обсуждение |
| Длина файла SHP (Вопрос разработчикам) [ McLeod ]Вторник, 25 мая 2004, 09:58
Господа, разработчики, не могли бы вы прокоментировать, почему файлы SHP, которые получаются при экспорте имеют отрицательное значение поля FileLength в заголовке файла? С чем это может быть связано? |
|
| [ ObjectLand Development Team ]Вторник, 25 мая 2004, 12:58
Ниже процитировано описание shp-файла, из которого можно видеть, что у поля FileLength порядок байт, обратный от интеловского. Видимо с этим связана Ваша проблема?
Также обратите внимание, что длина файла задается в 16-битных словах.
Byte Order
-------------
The integers and double-precision integers that make up the data description
fields in the file header (identified below) and record contents in the main
file are in little endian (PC or Intel(R)) byte order. The integers and
double-precision integers that make up the rest of the file are in big endian
(Sun(R) or Motorola(R)) byte order.
The Main File Header
--------------------------
The main file header is 100 bytes long. Table 1 shows the fields in the file
header with their byte position, value, type, and byte order. In the table,
position is with respect to the start of the file.
Table 1
Description of the Main File Header
Byte
Position Field Value Type Order
Byte 0 File Code 9994 Integer Big
Byte 4 Unused 0 Integer Big
Byte 8 Unused 0 Integer Big
Byte 10 Unused 0 Integer Big
Byte 16 Unused 0 Integer Big
Byte 20 Unused 0 Integer Big
Byte 24 File Length File Length Integer Big
Byte 28 Version 1000 Integer Little
Byte 32 Shape Type Shape Type Integer Little
Byte 36 Bounding Box Xmin Double Little
Byte 44 Bounding Box Ymin Double Little
Byte 52 Bounding Box Xmax Double Little
Byte 60 Bounding Box Ymax Double Little
Byte 68 Unused 0 Integer Big
. . . . .
. . . . .
. . . . .
Byte 96 Unused 0 Integer Big
The value for file length is the total length of the file in 16-bit words
(including the fifty 16 bit words that make up the header). |
|
| [ McLeod ]Вторник, 25 мая 2004, 13:26
Видимо неправильно преобразовываю из Big в Litle.
А не могли бы вы подсказать правильный алгоритм? :( :) |
|
| [ ObjectLand Development Team ]Вторник, 25 мая 2004, 13:35
|
| [ McLeod ]Вторник, 25 мая 2004, 13:37
|
| [ VAK ]Понедельник, 2 августа 2004, 10:06
Прошу прощение, что подключаюсь к обсуждению с опазданием: просто был заинтригован темой, честно скачал описание шейп-файлов и стал разбираться. И пришел в ужас!
Зачем ESRI так поиздевался над программистами - перемешал разный порядок кодирования данных (byte orde) в одном формате?
В подтверждение даю перевод фрагмента документации (кстати, на сайте Data+ перевод этого места не выдерживает никакой критики):
"Для целых чисел и чисел двойной точности, составляющих поля описания данных в заголовке файла ... и тела записей в главном файле, соблюдается порядок байтов «младший в конце» (PC или Intel®). Целые числа и плавающие числа двойной точности, составляющие остальную часть файла и управление файлом, размещаются в порядке байтов «старший в конце» (SUN© или Motorola©)."
Далее см. вышеприведенную структуру заголовка главного файла.
Они что там в Redlands часть шейп-файла обрабатывают на процессоре Intel, а часть на - SUN?
(Вопрос почти риторический, преобладают больше эмоции.) |
|
| [ McLeod ]Среда, 4 августа 2004, 10:01
Думается, что хранить числа с плавающей точкой в стандарте IEEE это хорошая мысль, так как стандарт он везде стандарт. Врядли они заточены под SUN :)
Целые числа в обычном представлении интела, плавающие в IEEE. Все ок. :)
Хотя документация, конечно не выдерживает никакой критики, в виду того, что она ориентирована на использование фирменного SDK ESRI. А если хочешь что-то сделать руками - всё сразу очень плохо. :( |
|
| [ VAK ]Четверг, 5 августа 2004, 07:33
Мысль на счет стандарта IEEE понятна.
Опять заглянул в тех. описание шейп-файла...
Ба!?Да тут, кажется, нестыковки, мягко выражаясь: пишут что double записаны в порядке старший в конце (см. выше тему, а затем в таблице для координат охватывающего прямоугольника указывают младший в конце.
Это как? |
|
ОтветитьЗнаком «*» отмечены обязательные для заполнения поля. |
| |