
    c0i                        d Z ddlZddlZddlZddlmZ ddlZdZd Z	d Z
d Zedk(  r~ e       Zej                  j                         Z	  e	ej                         Zedz   dZ ed      ez  Zee dz  Zee de dz  Zee de dz  ZeefD ]0  Zej7                         r ede         ej(                  d
       2  edej9                          dedz  dd        edej:                           edej:                           ej<                  ed      Z ej<                  ede       Z ejB                  se jB                  r ed        ej(                  d
        e
ee       Z"e"jG                  ede d        ed ejI                                 yy# e$ r(Z ed	e         ej(                  d
       Y dZ[sdZ[ww xY w)!u   
Calculates total road length per grid cell for a given state.

✅ Features:
 - Reads {state}_roads_projected.gpkg and {state}_grid_<size>.gpkg
 - Computes total road length per tile (in meters)
 - Writes {state}_road_density_<size>.gpkg
    N)PathGRID_CELL_SIZE_METERSc                     | xs t        j                  t              }|t        dt         d      	 t	        |      S # t        $ r}t        d| dt         d      |d}~ww xY w)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      scripts/calculate_density.pyresolve_cell_sizer      s}    >")),=">IFGXFYYZ[
 	
9~ !),IJ[I\\]^
	s   
? 	A$AA$c                 \   t        d       |j                         j                  ddi      }	 t        j                  | dg   |ddg   d      }t        d
t        |      dd       |j                  j                  |d<   t        d       |j                  d      d   j                         }|d   j                  |      j                  d      |d<   |j                  dg      j                  |j                         }t        d       |S # t
        $ r}t        d|       |d	}~ww xY w)z@Calculate total road length per grid cell using in-cell lengths.u5   📊 Computing road segments within each grid cell...indexcell_id)columnsgeometryintersection)howz+Failed to compute road/grid intersections: Nu   ✅ Created ,z road pieces clipped to cells.length_mu-   🧮 Summing clipped lengths per grid cell...r   u,   ✅ Density calculated with in-cell lengths.)printreset_indexrenamegpdoverlay	ExceptionRuntimeErrorlenr   lengthgroupbysummapfillnadrop	set_indexr   )roadsgrid
grid_localintersectionsr   groupedgrid_results          r   calculate_densityr/   #   s2   	
AB!!#**GY3G*HJY:,	:./
 
L]+A..L
MN - 6 6 = =M*	
9:##I.z:>>@G'	266w?FFqIJz//9+/6@@LK	
89  YHNOUXXYs   !D 	D+D&&D+c                      t        j                  d      } | j                  dd       | j                  dddt         d	
       | j	                         S )Nz6Calculate road length per grid cell for a given state.)descriptionstatezState name (e.g., alabama).)help	cell_size?z.Grid cell size in meters. Defaults to env var z
 if unset.)nargsr3   )argparseArgumentParseradd_argumentr	   
parse_args)parsers    r   r:   r:   @   sh    $$LF &CD
%%6$7zC       __main__u   ❌    i  kmoutputz_roads_projected.gpkg_grid_z.gpkg_road_density_u   ❌ Missing input file: u   📂 Working on z (z.1fz	 km grid)u   📥 Roads: u   📥 Grid:  roads_projected)layergrid_u1   ⚠️ One of the input files is empty. Aborting.road_density_GPKG)rD   driveru   💾 Saved density results to: )%__doc__r7   r   syspathlibr   	geopandasr   r	   r   r/   r:   __name__argsr2   lowerr4   r
   errr   exitgrid_size_labelbase_dir
roads_path	grid_pathoutput_pathpathexists
capitalizename	read_filer)   r*   emptyresultto_fileresolve r<   r   <module>ra      s    	 
  + : z<DJJE%dnn5	 #D),OH~%Hug%:;;JeWF?*;5AAIwn_4EUKKK Y'{{},TF34CHHQK (
 
U--/09T>#2Fi
PQ	L)
*+	L(
)*CMM*,=>E3==E/1B*CDD{{djjABud+F NN;o5F&GPVNW	+K,?,?,A+B
CDI 
  SEls   F) )G.GG