Есть ли разница между WKB и шестнадцатеричным значением, возвращаемым в PostGIS?

Я экспериментировал с PostGIS, и вот что я заметил:

Предположим, у меня есть таблица, определенная следующим образом:

CREATE TABLE IF NOT EXISTS geomtest (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    geom geometry(POLYGON, 4326) NOT NULL
);

И я добавляю следующий полигон:

SRID=4326;POLYGON((0 0,0 10,10 10,10 0,0 0))

Если я запросить geom столбец сам по себе, я получаю Hex представление геометрии. Если я вместо этого позвоню 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), но я не нашел никаких доказательств этому.

Если бы кто-то мог пролить свет на это, я был бы очень признателен.

1 ответ

Решение

Я не проверял байты, но я уверен, что разница заключается в SRID, который не включен в формат WKB.

Пытаться st_asewkb вместо.

Другие вопросы по тегам