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 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 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 jatorre commented Apr 26, 2012

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