
    ,6it                         S r SSKrSSKrSSKrSSKJr  SSKrSrS r	S r
S r\S:X  Ga  \" 5       r\R                  R                  5       r \	" \R                   5      r\S-   S3r\" S5      S-  \-  r\\ S3-  R/                  5       (       a  \rO\" S5      \-  r\\ S3-  r\\ S\ S3-  r\\ S\ S3-  r\\4 H7  r\R/                  5       (       a  M  \" S\ 35        \R(                  " S
5        M9     \" S\R;                  5        S\S-  S S35        \" S\R<                   35        \" S\R<                   35        \R>                  " \SS9r \R>                  " \S\ 3S9r!\ RD                  (       d  \!RD                  (       a  \" S5        \R(                  " S
5        \
" \ \!5      r#\#RI                  \S\ 3SS 9  \" S!\RK                  5        35        gg! \ a(  r\" S	\ 35        \R(                  " S
5         SrCGNSrCff = f)"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                     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/calculate_density.pyresolve_cell_sizer      s}    >")),=">IFGXFYYZ[
 	
9~ !),IJ[I\\]^
	s   
A 
A,A''A,c                 N   [        S5        UR                  5       R                  SS0S9n [        R                  " U S/   USS/   SS9n[        S
[        U5      S S35        UR                  R                  US'   [        S5        UR                  S5      S   R                  5       nUS   R                  U5      R                  S5      US'   UR                  S/S9R                  UR                   5      n[        S5        U$ ! [
         a  n[        SU 35      UeS	nAff = f)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                      [         R                  " SS9n U R                  SSS9  U R                  SSS[         S	3S
9  U R	                  5       $ )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outputgermanyz_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)rE   driveru   💾 Saved density results to: )&__doc__r7   r   syspathlibr   	geopandasr   r	   r   r/   r:   __name__argsr2   lowerr4   r
   errr   exitgrid_size_labelgermany_direxistsbase_dir
roads_path	grid_pathoutput_pathpath
capitalizename	read_filer)   r*   emptyresultto_fileresolve r<   r   <module>rc      sI    	 
  + : z<DJJE%dnn5	 #D),O x.9,u4K455==??>E)ug%:;;JeWF?*;5AAIwn_4EUKKK Y'{{}},TF34HHQK (
 
U--/09T>#2Fi
PQ	L)
*+	L(
)*MM*,=>E==E/1B*CDD{{djjABud+F NN;o5F&GPVNW	+K,?,?,A+B
CDU 
  SEls   G H%HH