Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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

This comment has been minimized.

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

This comment has been minimized.

Copy link

strk commented Apr 26, 2012

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

@jatorre

This comment has been minimized.

Copy link
Owner Author

jatorre commented Apr 26, 2012

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.