
    L!.i}                        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ab  \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      \-  r%\%\ S\$ S3-  r&\&RO                  5       (       d  \"" S\& 35        \RF                  " S5        \"" S\&RP                   35        \RR                  " \&S \$ 3S!9r*\*RV                  (       a  \"" S"5        \RF                  " S5        \RY                  5        S#\$ S$3r-\%\ S\$ S%3-  r.\%\ S\$ S&3-  r/\" \*SS	\-\.S'9   \" \*\\/SS(9  \"" S)\/ 35        gg! \  a(  r!\"" S\! 35        \RF                  " S5         Sr!C!GNSr!C!ff = f! \  a  r!\"" S*\! 35         Sr!C!gSr!C!ff = f)-u   
Visualize road density heatmap for a given state.

✅ Features:
 - Loads {state}_road_density_<size>.gpkg
 - Automatically chooses column & color map
 - Supports multiple grid resolutions (2km, 5km, etc.)
 - Saves optional PNG output for reporting
    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/visualize_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   G   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__z4Visualize road density using grid GeoPackage output.)descriptionstatezState name (e.g., alabama).)helpr\   ?z.Grid cell size in meters. Defaults to env var z
 if unset.)nargsrj   u   ❌ rD   i  kmOSM_State_Files_road_density_z.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   )0__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base_dir
input_pathexistsname	read_filer4   empty
capitalizer5   
output_png
output_tif r:   r   <module>r      s[     	 
      ' *+ 8)/V z$$JF &CD
%%6$7zC   DJJE%dnn5	 #D),O%&.Hug^O3DEJJJ$ZL12	+JOO+<
=>==]?:K+LMDzz12!"//1B&IEug^O3DDIIJug^O3DDIIJjuEZX7T9jL2:,?@U    SEl6  7/u5667s0   -F0 G! 0G6GG!G<'G77G<