Skip to content

Instantly share code, notes, and snippets.

@dbaston
Last active February 26, 2018 21:17
Show Gist options
  • Select an option

  • Save dbaston/58b883f6f78118ea2c85a55c447bc7b8 to your computer and use it in GitHub Desktop.

Select an option

Save dbaston/58b883f6f78118ea2c85a55c447bc7b8 to your computer and use it in GitHub Desktop.
PostGIS geometry as binary
CREATE OR REPLACE FUNCTION geom2bin (geometry)
RETURNS text AS $$
SELECT reverse(string_agg(
CASE WHEN i > 0 AND mod(i, 8) = 0 THEN ' ' ELSE '' END ||
CASE
WHEN chr = '0' THEN '0000'
WHEN chr = '1' THEN '0001'
WHEN chr = '2' THEN '0010'
WHEN chr = '3' THEN '0011'
WHEN chr = '4' THEN '0100'
WHEN chr = '5' THEN '0101'
WHEN chr = '6' THEN '0110'
WHEN chr = '7' THEN '0111'
WHEN chr = '8' THEN '1000'
WHEN chr = '9' THEN '1001'
WHEN chr = 'a' THEN '1010'
WHEN chr = 'b' THEN '1011'
WHEN chr = 'c' THEN '1100'
WHEN chr = 'd' THEN '1101'
WHEN chr = 'e' THEN '1110'
WHEN chr = 'f' THEN '1111'
END
, '')) FROM
(SELECT row_number() OVER() AS i, chr FROM
(SELECT lower(
regexp_split_to_table(
reverse(encode(
ST_AsBinary($1, 'XDR'),
'hex')),
'')) chr) ssq
) sq
$$ LANGUAGE sql;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment