Skip to content

Instantly share code, notes, and snippets.

@jatorre
Created December 8, 2010 22:17
Show Gist options
  • Save jatorre/734018 to your computer and use it in GitHub Desktop.
Save jatorre/734018 to your computer and use it in GitHub Desktop.
a plsql function to get a PostGIS geom out of a tile defined by X,Y,Z. Returns on SRS 900913
CREATE OR REPLACE FUNCTION v_get_tile(x integer,y integer,z integer)
RETURNS geometry AS
$BODY$
DECLARE
origin_shift CONSTANT FLOAT := 20037508.342789244;
initial_resolution CONSTANT FLOAT := 156543.03392804062;
res float;
minx float;
miny float;
maxx float;
maxy float;
BEGIN
res := initial_resolution / (power(2,z));
minx := (x*256)*res - origin_shift;
miny := -((y*256)*res - origin_shift);
maxx := ((x+1)*256)*res - origin_shift;
maxy := -(((y+1)*256)*res - origin_shift);
RETURN (ST_GeomFromText('POLYGON(('||minx||' '||maxy||','||maxx||' '||maxy||','||maxx||' '||miny||','||minx||' '||miny||','||minx||' '||maxy||'))',900913));END;
$BODY$
LANGUAGE 'plpgsql' IMMUTABLE STRICT
COST 100;
@strk
Copy link

strk commented Apr 26, 2012

Shouldn't resolution be 4^Z rather than 2^Z ?
Another thought is that the use of floating point numbers may make it so that adjacent tiles aren't really touching (by very small amount).
I'll give that a try, and grid if needed.

@strk
Copy link

strk commented Apr 26, 2012

I was clearly wrong, resolution is 2^Z (number of tiles would be 4^Z)

@jatorre
Copy link
Author

jatorre commented Apr 26, 2012 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment