Я экспериментировал с PostGIS, и вот что я заметил:
Предположим, у меня есть таблица, определенная следующим образом:
CREATE TABLE IF NOT EXISTS geomtest (
id SERIAL PRIMARY KEY,
name TEXT NOT NULL,
geom geometry(POLYGON, 4326) NOT NULL
);
И я добавляю следующееpolygon:
SRID=4326;POLYGON((0 0,0 10,10 10,10 0,0 0))
Если я сам запросю столбец geom
, я получу шестнадцатеричное представление геометрии.Если я вместо этого вызову ST_AsBinary(geom)
, я получу двоичное представление.
Однако, когда я преобразую как шестнадцатеричное, так и двоичное представления в массив байтов, результаты, которые я получаю, немного отличаются.Первый комментарий - это результат, который я получаю, преобразовав гекс в двоичный файл, а следующий - прямо из ST_AsBinary()
//[1 3 0 0 32 230 16 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
//[1 3 0 0 0 1 0 0 0 5 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 36 64 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
Как видите, первые 4 байта идентичны;представление, является ли он прямым или байтовым порядком байтов, и тип геометрии (3, в данном случае Polygon).Остальные байты тоже одинаковые.Единственное отличие состоит в том, что после первых 4. добавлено несколько дополнительных байтов.
Мне было интересно, связано ли это с представлением проекции (SRID = 4326), но я не нашел никаких подтверждений этому.
Если бы кто-то мог пролить свет на это, я был бы очень признателен.