Есть ли разница между 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
вместо.