
    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dlZ	ddl
mZ dZd Zd dZd Zed	k(  r. e       Zej$                  j'                         Z	  eej(                        Z ed      ez  Zee dz  Zee dedz   dz  Zej9                         s ede         ej0                  d        ede         ej:                  ed      Zej>                  r ede         ej0                  d        edej@                           ededz  dd        eee      Z!e!jE                  ededz   dd        edejG                                 yy# e$ r(Z ed
e         ej0                  d       Y dZ[#dZ[ww xY w)!u   
Creates a regular grid (square tiles) covering a state's projected road data.

✅ Features:
 - Reads each state's {state}_roads_projected.gpkg
 - Generates grid tiles (default 2 km)
 - Saves as {state}_grid_2km.gpkg
 - Logs extent and CRS info
    N)Path)box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/create_grid.pyresolve_cell_sizer      s}    >")),=">IFGXFYYZ[
 	
9~ !),IJ[I\\]^
	s   
? 	A$AA$c                 t   | j                   \  }}}}t        j                  |||z   |      }t        j                  |||z   |      }|dd D 	cg c]   }|dd D ]  }	t        ||	||z   |	|z          " }
}}	t	        j
                  d|
i| j                        }t        dt        |      dd       |S c c}	}w )zQGenerate a regular grid (square tiles) over the extent of the input GeoDataFrame.Ngeometry)crsu   ✅ Created ,z grid cells.)	total_boundsnparanger   gpdGeoDataFramer   printlen)gdf	cell_sizexminyminxmaxymaxcolsrowsxypolygonsgrids               r   	make_gridr*   &   s     --D$d99T4)+Y7D99T4)+Y7D cr7"AD"Iq Aq!i-Y7,5 8"  7 Z2@D	LT1\
23K7s   %B4c                      t        j                  d      } | j                  dd       | j                  dddt         d	
       | j	                         S )Nz>Create regular grid tiles for a given state's projected roads.)descriptionstatezState name (e.g., alabama).)helpr   ?z.Grid cell size in meters. Defaults to env var z
 if unset.)nargsr.   )argparseArgumentParseradd_argumentr
   
parse_args)parsers    r   r4   r4   4   sh    $$TF &CD
%%6$7zC       __main__u   ❌    outputz_roads_projected.gpkg_grid_i  zkm.gpkgu$   ❌ Projected roads file not found: u   📦 Loading roads from roads_projected)layeru   ⚠️ No features found in u   🗺️ CRS: u   📏 Generating grid with z.1fz km cells...)r   grid_kmGPKG)r<   driveru   💾 Saved grid to: )i  )$__doc__r1   r   syspathlibr   	geopandasr   numpyr   shapely.geometryr   r
   r   r*   r4   __name__argsr-   lowerr   r   errr   exitbase_dir
input_pathoutput_pathexists	read_filer   emptyr   r)   to_fileresolve r6   r   <module>rU      s    	 
     +  z<DJJE%dnn5	
 H~%Hug%:;;JwfY_,=WEEK 4ZLAB	$ZL
12
#--
*;
<C
yy,ZL9:	M#''
#$	&y~c&:,
GHSI.DLLeItO+<B$?LO	 !4!4!6 7
89? 
  SEls   E$ $F)FF