
    c0i                         d Z ddlZddlZddlmZ ddlZddlmZ ddlmZ ddl	Z
ddlmZ defdZed	k(  rI ej                   d
      Zej%                  dd       ej'                         Z eej*                         yy)uE  
Extracts only road features (highways, streets, etc.) from a state's
OpenStreetMap .pbf file downloaded from Geofabrik.

✅ Features:
 - Automatic folder creation per state
 - Download progress bar with integrity checks
 - Safe extraction of road geometries
 - Saves standardized GeoPackage to: output/{LOCATION}/data.gpkg
    N)Path)tqdm)OSM)get_geofabrik_urlstatec           
      z	   | j                         } t        j                         }|dz  | z  }|j                  dd       ||  dz  }|dz  }	 t	        |       }t        d|        	 |j                         s t        d	| j                          d
       t        j                  dd      5 }|j                          t        |j                  j                  dd            }d}	t!        |d      5 }
t#        |ddd|  d      5 }|j%                  |	      D ]-  }|
j'                  |       |j)                  t+        |             / 	 d d d        d d d        d d d        |j-                         j.                  dk  rt        d      t        d|        nt        d|        t        d       	 t3        t5        |            }|j7                  ddidddg d      }||j8                  rt        d       t        d!t+        |      d"d#| j                          d$       t        d%t;        |j<                                	 j?                  d'(      }t        d)       	 ||  d+z  }jA                  |d,d-.       t        d/|        d}	 |r9|j                         r)|jC                          t        d1|jD                          nt        d2| d3       t        d6       t        d7|        t        d8|jD                          t        d9|jD                          t        d:t+              d"       t        d;       t        |jG                                y # t        $ r.}t        d|        t        j                  d       Y d }~,d }~ww xY w# 1 sw Y   SxY w# 1 sw Y   XxY w# 1 sw Y   ]xY w# t0        $ r.}t        d|        t        j                  d       Y d }~Md }~ww xY w# t0        $ r.}t        d&|        t        j                  d       Y d }~d }~ww xY w# t0        $ r}t        d*|        Y d }~d }~ww xY w# t0        $ r.}t        d0|        t        j                  d       Y d }~d }~ww xY w# t0        $ r}t        d4| d5|        Y d }~d }~ww xY w)<NoutputT)parentsexist_okz.osm.pbfz	data.gpkgu   🔗 Geofabrik URL: u   ❌    u    ⬇️ Downloading OSM data for z...
x   )streamtimeoutzcontent-lengthr   i    wbBi   )totalunit
unit_scaleunit_divisordesc)
chunk_sizei  u<   Downloaded file seems too small — possible download error.u   
✅ Download complete: u   ✅ Found existing file: u   ❌ Download failed: u   
🚧 Extracting roads...highwaykeepF)layerbridgetunnellaneswidthsurfacematerial)custom_filterfilter_type
keep_nodeskeep_relationsextra_attributesuA   No road data extracted — check the .osm.pbf file or state name.u   ✅ Extracted ,z roads from z data.u   📋 Columns available: u   ❌ Road extraction failed: i  )epsgu&   🌐 Reprojected to WGS84 (EPSG:4326).u   ⚠️ Reprojection failed: z_roads.gpkgroadsGPKG)r   driveru   💾 Saved extracted roads to: u   ❌ Saving failed: u!   🧹 Deleted processed PBF file: u+   📦 Kept PBF files (DELETE_DOWNLOADED_PBF=)u   ⚠️ Could not delete z: u   
✅ Process complete!u   📁 Folder: u   📥 Input: u   💾 Output: u   🛣️ Roads extracted: z<------------------------------------------------------------)$lowerr   cwdmkdirr   print
ValueErrorsysexitexists
capitalizerequestsgetraise_for_statusintheadersopenr   iter_contentwriteupdatelenstatst_size	Exceptionr   strget_data_by_custom_criteriaemptylistcolumnsto_crsto_fileunlinknamehead)r   base_dir	state_dirfilenameoutput_pathurler
total_size
block_sizefbarchunkosmr(   DELETE_DOWNLOADED_PBFs                   -/data2/heatmap/scripts/extract_state_roads.pyextract_state_roadsr[      s\   KKMExxzH8#e+IOOD4O0eWH--Hk)K&$SE*+ 4U5E5E5G4HNOc$<""$ /?!CD
!
(D)Q$#!%!7(+1 !":!F

3u:. "G1) =  }}&&3 !_``-hZ89-hZ89 

&'#h- //$d+  0 
" =EKK`aas5z!nL9I9I9K8LFST(emm)<(=>?2$'67UG;"77k@/}=> ": X__%6OO5hmm_EF?@U?VVWXY 

#$	M)
%&	L
()	M+**+
,-	%c%j^
45	(O	%**,_  QCj1 1)) =<*  %aS)*B  ,QC01  2,QC0112  #A3'(  :(
"QC899:s   M! (AO .AN52N(AN
N(N5AO 3BO< P6 $*Q A
R !	N*#NNN% N((N2	-N55N?:O 	O9#O44O9<	P3#P..P36	Q?QQ	R$#RR	R:R55R:__main__z/Download and extract OSM road data for a state.)descriptionzState name (e.g., alabama).)help)__doc__argparser1   pathlibr   r5   r   pyrosmr   	geopandasgpdscripts.geofabrik_registryr   rB   r[   __name__ArgumentParserparseradd_argument
parse_argsargsr        rZ   <module>rn      s   	  
      8
|s |~ z$X$$EF &CDD

# rm   