
    dj

                         d Z ddlZdZdej                  dej                  fdZdej                  dej                  fdZdej                  d	ej                  dej                  fd
Zdej                  fdZy)uL  Terrarium-korkeuskoodaus (Mapzen/AWS elevation-tiles -yhteensopiva).

Purkukaava (sama kuin selainprototyypissä, kuuluvuus.html):

    h = (R*256 + G + B/256) - 32768   [m]

eli 24-bittinen kokonaisluku v = R*65536 + G*256 + B tulkitaan arvoksi
v/256 - 32768. Askel on 1/256 m ~ 3,9 mm, mikä riittää 2 m korkeusmallille
reilusti. Terrarium-formaatissa ei ole nodata-arvoa: nodata/meri koodataan
korkeudeksi 0 m (N2000-nolla on likimain merenpinta, joten tämä on
fysikaalisesti järkevä täyte).

Metsäruuduille (Luken MVMI) käytetään omaa kanavapakkausta, ks.
encode_forest().
    Ng      @height_mreturnc                    t        j                  | t         j                        }t        j                  t        j                  |      |d      }t        j
                  |t        z   dz        }t        j                  |dd      j                  t         j                        }t        j                  |j                  dz   t         j                        }|dz	  dz  |d	<   |d
z	  dz  |d<   |dz  |d<   |S )u   Korkeus metreinä (float, NaN = nodata) -> (H, W, 3) uint8 RGB.

    Kvantisointi pyöristää lähimpään 1/256 m askeleeseen, joten
    dekoodausvirhe on enintään 1/512 m.
    dtype              p@r   i          .r      .   .   )npasarrayfloat64whereisfiniterint_OFFSETclipastypeuint32emptyshapeuint8)r   hvrgbs       (/home/claude/oh9ab/pipeline/terrarium.pyencoder%      s     	

82::.A
QC(A
W%&A
1l#**2995A
((177T>
2C7d"CK6T/CKd(CKJ    r#   c                     | d   j                  t        j                        }| d   j                  t        j                        }| d   j                  t        j                        }|dz  |z   |dz  z   t        z
  S )u3   (H, W, 3) uint8 RGB -> korkeus metreinä (float64).r   r   r   r	   )r   r   r   r   )r#   rgbs       r$   decoder+   '   sf    F2::&AF2::&AF2::&Au9q=1u9$w..r&   	cover_pctc                    t        j                  | t         j                        }t        j                  |t         j                        }t        j                  t        j                  |      |d      }t        j                  t        j                  |      |d      }t        j
                  |j                  dz   t         j                        }t        j                  t        j                  |      dd      j                  t         j                        |d<   t        j                  t        j                  |      dd      j                  t         j                        |d<   |S )	u  Puustoruudun kanavapakkaus:

        R = puuston keskipituus metreinä (0..255, kokonaisluku)
        G = latvuspeittävyys prosentteina (0..100)
        B = varattu tulevalle käytölle (nyt 0)

    NaN (nodata, esim. vesistö tai ei-metsämaa) -> 0 molemmissa kanavissa.
    Huom: Luken MVMI ilmoittaa keskipituuden desimetreinä — muunnos metreiksi
    tehdään ennen tätä funktiota (build_tiles.py: --height-scale).
    r   r   r
   r   r   r   d   r   )r   r   r   r   r   zerosr   r    r   r   r   )r   r,   r!   cr#   s        r$   encode_forestr1   /   s     	

82::.A


9BJJ/A
QC(A
QC(A
((177T>
2C''"''!*a-44RXX>CK''"''!*a-44RXX>CKJr&   c                     | d   j                  t        j                        | d   j                  t        j                        fS )uD   (H, W, 3) uint8 -> (keskipituus_m, peittävyys_pct) float64-pareina.r   r   )r   r   r   )r#   s    r$   decode_forestr3   D   s3    v;bjj)3v;+=+=bjj+IIIr&   )	__doc__numpyr   r   ndarrayr%   r+   r1   r3    r&   r$   <module>r8      s     
RZZ BJJ "/

 /rzz /BJJ 2:: "** *Jrzz Jr&   