mirror of
https://github.com/maplibre/martin.git
synced 2024-12-22 14:21:39 +03:00
40 lines
1.0 KiB
MySQL
40 lines
1.0 KiB
MySQL
|
/******************************************************************************
|
||
|
### TileBBox ###
|
||
|
|
||
|
Given a Web Mercator tile ID as (z, x, y), returns a bounding-box
|
||
|
geometry of the area covered by that tile.
|
||
|
|
||
|
__Parameters:__
|
||
|
|
||
|
- `integer` z - A tile zoom level.
|
||
|
- `integer` x - A tile x-position.
|
||
|
- `integer` y - A tile y-position.
|
||
|
- `integer` srid - SRID of the desired target projection of the bounding
|
||
|
box. Defaults to 3857 (Web Mercator).
|
||
|
|
||
|
__Returns:__ `geometry(polygon)`
|
||
|
******************************************************************************/
|
||
|
create or replace function TileBBox(z int, x int, y int, srid int = 3857)
|
||
|
returns geometry
|
||
|
language plpgsql immutable as
|
||
|
$func$
|
||
|
declare
|
||
|
max numeric := 20037508.34;
|
||
|
res numeric := (max*2)/(2^z);
|
||
|
bbox geometry;
|
||
|
begin
|
||
|
bbox := ST_MakeEnvelope(
|
||
|
-max + (x * res),
|
||
|
max - (y * res),
|
||
|
-max + (x * res) + res,
|
||
|
max - (y * res) - res,
|
||
|
3857
|
||
|
);
|
||
|
if srid = 3857 then
|
||
|
return bbox;
|
||
|
else
|
||
|
return ST_Transform(bbox, srid);
|
||
|
end if;
|
||
|
end;
|
||
|
$func$;
|