
    -6io                        S r SSKrSSKrSSKrSSKrSSKJr  SSKrSSK	J
r  SSKrSSKrSSKJr  SSKJr  SrS rS-S
 jrS.S jr\S:X  Ga  \R0                  " SS9r\R5                  SSS9  \R5                  SSS\ S3S9  \R7                  5       r\R:                  R=                  5       r \" \R>                  5      r\S-   S3r$\" S5      S-  \-  r%\%\ S\$ S3-  RM                  5       (       d  \%\ S3-  RM                  5       (       a  \%r'O\" S5      \-  r'\'\ S\$ S3-  r(\(RM                  5       (       d  \"" S \( 35        \RF                  " S5        \"" S!\(RR                   35        \RT                  " \(S"\$ 3S#9r+\+RX                  (       a  \"" S$5        \RF                  " S5        \R[                  5        S%\$ S&3r.\'\ S\$ S'3-  r/\'\ S\$ S(3-  r0\" \+SS	\.\/S)9   \" \+\\0SS*9  \"" S+\0 35        gg! \  a(  r!\"" S\! 35        \RF                  " S5         Sr!C!GNdSr!C!ff = f! \  a  r!\"" S,\! 35         Sr!C!gSr!C!ff = f)/u  
Generate rasterized road density heatmap (GeoTIFF + PNG) for a location.

✅ Outputs:
 - GeoTIFF raster ({location}_road_density_{size}.tif) for GIS analysis
 - PNG visualization ({location}_road_density_{size}.png) for reporting

✅ Features:
 - Loads {location}_road_density_<size>.gpkg
 - Rasterizes density grid to proper heatmap format
 - Supports multiple grid resolutions (2km, 5km, etc.)
    N)Path)	rasterize)from_originGRID_CELL_SIZE_METERSc                     U =(       d    [         R                  " [        5      nUc  [        S[         S35      e [	        U5      $ ! [         a  n[        SU S[         S35      UeSnAff = f)z8Resolve cell size from CLI args or environment variable.Nz8Cell size must be passed as an argument or provided via .zInvalid cell size 'z'. Provide an integer or set )osgetenvCELL_SIZE_ENV_VAR
ValueErrorint)explicit_value	raw_valueexcs      */data2/heatmap/scripts/generate_heatmap.pyresolve_cell_sizer      s}    >")),=">IFGXFYYZ[
 	
9~ !),IJ[I\\]^
	s   
A 
A,A''A,length_mhotc                 l   [         R                  " SS9u  pVU R                  UUUSSSSSSS	.S
9nUR                  U=(       d    SU S3SSS9  UR	                  S5        [         R
                  " 5         U(       a%  [         R                  " USSS9  [        SU 35        g[         R                  " 5         g)z$Plot density heatmap from grid data.)      )figsizeTr   zTotal Road Length (meters)g333333?g{Gz?vertical)labelshrinkpadorientation)columncmapaxlegend	linewidthlegend_kwdszRoad Density ()   r   )fontsizer   offi,  tight)dpibbox_inchesu   💾 Saved heatmap to: N)	pltsubplotsplot	set_titleaxistight_layoutsavefigprintshow)gridr   r   title	save_pathfigr    	grid_plots           r   plot_heatmapr9   .   s    ll7+GC		1%	
  I LL4N6(!4rrLJGGENI3G<'	{34
    c                    X0R                   ;  a  [        SU S35      eU R                  c  [        S5      eU R                  u  pEpg[	        [
        R                  " Xd-
  U-  5      5      n[	        [
        R                  " Xu-
  U-  5      5      n	US::  d  U	S::  a  [        S5      e[        XGX5      n
/ n[        U R                  X   5       HV  u  pUb0  [        U[        5      (       a  [
        R                  " U5      (       a  M:  UR                  U[        U5      45        MX     [        UX4U
[        R                   SS9n["        R$                  " US	S
U	USSU R                  R'                  5       U
[        R                   S9
 nUR)                  UR+                  S5      S5        SSS5        g! , (       d  f       g= f)z/Rasterize the density grid and save as GeoTIFF.zColumn 'z' not found in grid.Nz-Grid CRS is undefined; cannot export GeoTIFF.r   z5Invalid grid bounds; cannot derive raster dimensions.float32)shapes	out_shape	transformfilldtypewGTiff   )driverheightwidthcountrA   crsr?   nodata)columnsr   rI   total_boundsr   mathceilr   zipgeometry
isinstancefloatisnanappendr   npnanrasterioopento_wktwriteastype)r4   	cell_sizeout_pathr   minxminymaxxmaxyrG   rF   r?   r=   geomvaluerasterdsts                   r   save_density_geotiffrf   J   s}   \\!8F8+?@AAxxHII!..D		4;)345EDK9456FzVq[PQQD	=IF4==$,7=Zu55$**U:K:KtU5\*+ 8
 /VVF 
HHOOvv
 
		&--	*A.
 
 
s   "F//
F=__main__z9Generate rasterized road density heatmap (GeoTIFF + PNG).)descriptionlocationz/Location name (e.g., alabama, egypt, thailand).)helpr\   ?z.Grid cell size in meters. Defaults to env var z
 if unset.)nargsrj   u   ❌ rD   i  kmoutputgermany_road_density_z.gpkgz_roads_projected.gpkgu   ❌ File not found: u   📦 Loading density data from road_density_)layeru!   ⚠️ No features found to plot.z Road Density (z grid)z.pngz.tif)r   r   r5   r6   )r   u"   🗺️ Saved GeoTIFF heatmap to: u   ⚠️ Could not save GeoTIFF: )r   r   NN)r   )1__doc__argparserM   r	   syspathlibr   	geopandasgpdmatplotlib.pyplotpyplotr+   numpyrU   rW   rasterio.featuresr   rasterio.transformr   r   r   r9   rf   __name__ArgumentParserparseradd_argument
parse_argsargsri   lowerr\   r   errr2   exitgrid_size_labelgermany_direxistsbase_dir
input_pathname	read_filer4   empty
capitalizer5   
output_png
output_tif r:   r   <module>r      s     	 
      ' *+ 8)/V z$$OF 
)Z[
%%6$7zC   D}}""$H%dnn5	 #D),O x.9,x7K
.0AGGOOQQVagofp  qF  eG  WG  VO  VO  VQ  VQ>H,xj6GuMMJ$ZL12	+JOO+<
=>==]?:K+LMDzz12""$%__4EVLExj6GtLLJxj6GtLLJjuEZX7T9jL2:,?@a    SElB  7/u5667s0   -G: $H+ :H( H##H(+I1II