
    °dj              
           d Z ddlZdZej                  dz  ZdedefdZded	edefd
ZdededefdZ	ded	efdZ
dededededef
dZy)u0  Slippy map -ruutumatematiikka (XYZ-skeema, EPSG:3857).

Kaavat: https://wiki.openstreetmap.org/wiki/Slippy_map_tilenames
Ruudun koko on 256 px, origo vasen yläkulma (kuten OSM/Leaflet).

Web-Mercatorin maailman puolileveys on pi * 6378137 m; koko maailma
kattaa [-ORIGIN, ORIGIN] molemmilla akseleilla.
    N   g   @TXAzoomreturnc                 .    dt         z  t        d| z  z  z  S )uG   Metriä per pikseli (EPSG:3857-metriä, ei maastometriä) zoom-tasolla.       @   )ORIGIN	TILE_SIZE)r   s    '/home/claude/oh9ab/pipeline/tilemath.py
resolutionr      s    <9qDy011    lonlatc                 X   d|z  }t        | dz   dz  |z        }t        j                  |      }t        dt        j                  t        j                  |            t        j
                  z  z
  dz  |z        }t        t        |d      |dz
        t        t        |d      |dz
        fS )z%WGS84 lon/lat -> (x, y) ruutuindeksi.r        f@g     v@g      ?r   r      )intmathradiansasinhtanpiminmax)r   r   r   nxlat_rys          r   lonlat_to_tiler      s    	T	AS5[E!A%&ALLES4::dhhuo.88C?!CDAs1ay!a% #c!QiQ"777r   r   r   c                 j    dt         z  d|z  z  }t          | |z  z   }t         ||z  z
  }|||z
  ||z   |fS )uE   Ruudun (x, y, z) rajat EPSG:3857-metreinä: (minx, miny, maxx, maxy).r   r   )r	   )r   r   r   sizeminxmaxys         r   tile_bounds_3857r$      sI    <!t)#D7QXDAHD$+td{D11r   c                     t         | z  dz  }t         t        j                  t        j                  t        j                  |                  z  t        j
                  z  }||fS )z'WGS84 -> EPSG:3857 (sferinen Mercator).r   )r	   r   r   r   r   r   )r   r   mxmys       r   lonlat_to_3857r(   '   sG    	#	B	$**TXXdll3&789	9DGG	CBr6Mr   minlonminlatmaxlonmaxlatc                 N    t        | ||      \  }}t        |||      \  }}||||fS )u   Lon/lat-laatikon kattavat ruutuindeksit: (x0, y0, x1, y1), rajat
    mukaan lukien. Huom: y kasvaa etelään (pohjoinen = pienin y).)r   )	r)   r*   r+   r,   r   x0y0x1y1s	            r   
tile_ranger2   .   s6     FFD1FBFFD1FBr2r>r   )__doc__r   r
   r   r	   r   floatr   r   r$   r(   r2    r   r   <module>r6      s    		9	2S 2U 2
8 8E 8 82 2 23 2 E u e U E r   