Есть ли разница между WKB и шестнадцатеричным значением, возвращаемым в PostGIS? - PullRequest
0 голосов
/ 12 февраля 2019

Я экспериментировал с 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), но я не нашел никаких подтверждений этому.

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

1 Ответ

0 голосов
/ 12 февраля 2019

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

Вместо этого попробуйте st_asewkb.

...