
ʸJc           @   s  d  d k  l Z l Z l Z l Z l Z l Z d  d k l Z d  d k	 Z	 d  d k
 Z
 d  d k l Z d  d k Z d  d k Z e d Z d e Z d Z d   Z d dS d	     YZ d
 dT d     YZ d d d e d  Z e d j oe
 i d Z y e
 i d Z Wn e j
 o e d Z n Xy e
 i d Z Wn e j
 o e d Z n XdU Z e e e e d d d  e	 i d  dV Z e e e e d d! d  d" Z d# Z dW Z e e e e e e e  dX Z e e e e e d d, d-  dY Z e e e e e d2 d, d3  dZ Z e e e e e d2 d, d8  d[ Z e e e e e d" d# d=  d\ Z e e e e e d" d# dB  d] Z e e e e e d d# dG  d^ Z e e e e e d d# dH  d_ Z e e e e e d" dM dN  d` Z e e e e e d dQ dR  n d S(a   i(   t   pit   cost   sint   logt   expt   atan(   t   callN(   t   Queuei   i   c         C   s"   t  |  |  }  t |  |  }  |  S(   N(   t   maxt   min(   t   at   bt   c(    (    s   generate_tiles.pyt   minmax   s    t   GoogleProjectionc           B   s&   e  Z d  d  Z d   Z d   Z RS(   i   c         C   s   g  |  _  g  |  _ g  |  _ g  |  _ d } x} t d |  D]l } | d } |  i  i | d  |  i i | d t  |  i i | | f  |  i i |  | d 9} q: Wd  S(   Ni   i    i   g     v@(   t   Bct   Cct   zct   Act   ranget   appendR    (   t   selft   levelsR   t   dt   e(    (    s   generate_tiles.pyt   __init__   s    				 
c         C   s   |  i  | } t | d | d |  i |  } t t t | d  d d  } t | d d t d | d |  |  i |  } | | f S(   Ni    i   gH.gH.?g      ?(   R   t   roundR   R   R   t
   DEG_TO_RADR   R   (   R   t   llt   zoomR   R   t   ft   g(    (    s   generate_tiles.pyt   fromLLtoPixel#   s
    # 6c         C   st   |  i  | } | d | d |  i | } | d | d |  i | } t d t t |   d t } | | f S(   Ni    i   i   g      ?(   R   R   R   t
   RAD_TO_DEGR   R   R    (   R   t   pxR   R   R   R   t   h(    (    s   generate_tiles.pyt   fromPixelToLL*   s
    "(   t   __name__t
   __module__R   R    R$   (    (    (    s   generate_tiles.pyR      s   	t   RenderThreadc           B   s#   e  Z d    Z d   Z d   Z RS(   c         C   su   | |  _  | |  _ t i d d  |  _ | |  _ t i |  i | t  t i |  i i	  |  _
 t | d  |  _ d  S(   Ni   i   (   t   tile_dirt   qt   mapnikt   Mapt   mt	   printLockt   load_mapt   Truet
   Projectiont   srst   prjR   t   tileproj(   R   R(   t   mapfileR)   R-   t   maxZoom(    (    s   generate_tiles.pyR   4   s    			c         C   s8  | d | d d f } | d d | d f } |  i  i | |  } |  i  i | |  } |  i i t i | d | d   }	 |  i i t i | d | d   }
 t i |	 i |	 i |
 i |
 i  } d } |  i	 i
 | |  |  i	 i |  d |  i	 _ t i | |  } t i |  i	 |  | i | d  d  S(   Ni   i   i    i   t   png256(   R3   R$   R2   t   forwardR*   t   Coordt   Envelopet   xt   yR,   t   resizet   zoom_to_boxt   buffer_sizet   Imaget   rendert   save(   R   t   tile_uriR:   R;   t   zt   p0t   p1t   l0t   l1t   c0t   c1t   bboxt   render_sizet   im(    (    s   generate_tiles.pyt   render_tileA   s    &&$c   
      C   s  x t  o |  i i   } | d  j o |  i i   Pn | \ } } } } } d } t i i |  o
 d } n |  i | | | |  t i	 |  d } d }	 | d j o
 d }	 n |  i
 i   | Gd G| G| G| G| G|	 GH|  i
 i   |  i i   q Wd  S(   Nt    t   existsi   ig   s    Empty Tile t   :(   R/   R)   t   gett   Nonet	   task_donet   ost   patht   isfileRM   t   statR-   t   acquiret   release(
   R   t   rt   nameRB   R:   R;   RC   RO   t   bytest   empty(    (    s   generate_tiles.pyt   loop[   s&     

(   R%   R&   R   RM   R^   (    (    (    s   generate_tiles.pyR'   3   s   		i   i   t   unknownc      
   C   s  d G|  G| G| G| G| G| Gd GHt  d  } t i   } h  }	 xU t |  D]G }
 t | | | | |  } t i d | i  } | i   | |	 |
 <qL Wt i	 i
 |  p t i |  n t | d  } |  d |  d f } |  d |  d f } xt | | d  D]} | i | |  } | i | |  } d	 | } t i	 i
 | |  p t i | |  n xKt t | d d
  t | d d
  d  D]} | d j  p | d | j o qn d	 | } t i	 i
 | | d |  p t i | | d |  n x t t | d d
  t | d d
  d  D]u } | d j  p | d | j o q8n d	 | } | | d | d | d } | | | | | f } | i |  q8WqWqWx! t |  D] }
 | i d   qW| i   x" t |  D] }
 |	 |
 i   qWd  S(   Ns   render_tiles(t   )i    t   targeti   i    i   i   s   %sg      p@t   /s   .png(   R   t	   threadingt   LockR   R'   t   ThreadR^   t   startRT   RU   t   isdirt   mkdirR   R    t   intt   putRR   t   join(   RJ   R4   R(   t   minZoomR5   R[   t   num_threadst   queueR-   t	   rendererst   it   renderert   render_threadt   gprjt   ll0t   ll1RC   t   px0t   px1R   R:   t   str_xR;   t   str_yRB   t   t(    (    s   generate_tiles.pyt   render_tiless   sX    ! 
 
0 
0 
 
 t   __main__t   HOMEt   MAPNIK_MAP_FILEsB   /svn.openstreetmap.org/applications/rendering/mapnik/osm-local.xmlt   MAPNIK_TILE_DIRs   /osm/tiles/gLJ5@gp1=J@g0_^5@gEJ@i   t   Worldi    g     fg     Vg     f@g     V@i   i
   i   ig      I@g      ?g      J@g&@g)\H@gffffff'@g\(H@i   t   Muencheng&@gzGH@gL(@gQ8H@i   s	   Muenchen+gףp=
%@gG@g{Gz(@gGzNH@s
   Muenchen++go%@g4+ۇH@gsaH@g&@t	   Nuernbergg[ @gÀwH@gT< @gYm_uH@t	   Karlsruheg @gyH@g      !@gfffffH@s
   Karlsruhe+t   Augsburgg2%@gf/N/H@g/%@gJ#8H@i   s	   Augsburg+g      $@g4@i   s   Europe+(    (    (   gLJ5@gp1=J@g0_^5@gEJ@(   g     fg     Vg     f@g     V@(   ig      I@g      ?g      J@(   g&@g)\H@gffffff'@g\(H@(   g&@gzGH@gL(@gQ8H@(   gףp=
%@gG@g{Gz(@gGzNH@(   go%@g4+ۇH@gsaH@g&@(   g[ @gÀwH@gT< @gYm_uH@(   g @gyH@g      !@gfffffH@(   g @gyH@g      !@gfffffH@(   g2%@gf/N/H@g/%@gJ#8H@(   g      ?g      $@g4@g      I@(    t   mathR    R   R   R   R   R   t
   subprocessR   t   sysRT   R   R*   Rc   R   R!   t   NUM_THREADSR   R   R'   R{   R%   t   environt   homeR4   t   KeyErrorR(   RJ   t   exitRl   R5   Rn   (    (    (    s   generate_tiles.pyt   <module>   sb   .

	@: