1010
1111def geometry_filter (aoi : Polygon ) -> Dict [str , Any ]:
1212 (
13- " Convert a shapely Polygon into a Planet GeometryFilter. Args: aoi (Polygon):"
14- "The area of interest. Returns: dict: GeometryFilter for Planet API."
15- )
16- return {"type" : "GeometryFilter" , "field_name" : "geometry" , "config" : mapping (aoi )}
13+ " Convert a shapely Polygon into a Planet GeometryFilter. Args: aoi (Polygon):"
14+ "The area of interest. Returns: dict: GeometryFilter for Planet API."
15+ )
16+ return {
17+ "type" : "GeometryFilter" ,
18+ "field_name" : "geometry" ,
19+ "config" : mapping (aoi ),
20+ }
1721
1822
1923def date_range_filter (start : datetime , end : datetime ) -> Dict [str , Any ]:
2024 (
21- " Convert a start/end datetime into a Planet DateRangeFilter. Args: start"
22- "(datetime): Start date. end (datetime): End date. Returns: dict:"
23- "DateRangeFilter for Planet API."
24- )
25+ " Convert a start/end datetime into a Planet DateRangeFilter. Args: start"
26+ "(datetime): Start date. end (datetime): End date. Returns: dict:"
27+ "DateRangeFilter for Planet API."
28+ )
2529 return {
2630 "type" : "DateRangeFilter" ,
2731 "field_name" : "acquired" ,
@@ -34,9 +38,9 @@ def date_range_filter(start: datetime, end: datetime) -> Dict[str, Any]:
3438
3539def cloud_cover_filter (max_cloud : float ) -> Dict [str , Any ]:
3640 (
37- " Filter scenes by maximum cloud cover fraction. Args: max_cloud (float): Max"
38- "cloud fraction (0.0-1.0). Returns: dict: RangeFilter for cloud_cover."
39- )
41+ " Filter scenes by maximum cloud cover fraction. Args: max_cloud (float): Max"
42+ "cloud fraction (0.0-1.0). Returns: dict: RangeFilter for cloud_cover."
43+ )
4044 return {
4145 "type" : "RangeFilter" ,
4246 "field_name" : "cloud_cover" ,
@@ -46,9 +50,9 @@ def cloud_cover_filter(max_cloud: float) -> Dict[str, Any]:
4650
4751def sun_angle_filter (min_sun_angle : float ) -> Dict [str , Any ]:
4852 (
49- " Filter scenes by minimum sun angle. Args: min_sun_angle (float): Minimum sun"
50- "angle in degrees. Returns: dict: RangeFilter for sun elevation."
51- )
53+ " Filter scenes by minimum sun angle. Args: min_sun_angle (float): Minimum sun"
54+ "angle in degrees. Returns: dict: RangeFilter for sun elevation."
55+ )
5256 return {
5357 "type" : "RangeFilter" ,
5458 "field_name" : "sun_elevation" ,
@@ -63,30 +67,38 @@ def build_filters(
6367 min_sun_angle : float = 0.0 ,
6468) -> Dict [str , Any ]:
6569 (
66- " Build a Planet API search filter combining multiple AOIs, date ranges, cloud"
67- "cover, and sun angle constraints. Args: aois (List[Polygon]): List of AOI"
68- "polygons. date_ranges (List[Tuple[datetime, datetime]]): List of start/end date"
69- "tuples. max_cloud (float): Maximum cloud fraction. min_sun_angle (float):"
70- "Minimum sun elevation in degrees. Returns: dict: Combined Planet API filter"
71- "ready for pagination."
72- )
70+ " Build a Planet API search filter combining multiple AOIs, date ranges, cloud"
71+ "cover, and sun angle constraints. Args: aois (List[Polygon]): List of AOI"
72+ "polygons. date_ranges (List[Tuple[datetime, datetime]]): List of start/end date"
73+ "tuples. max_cloud (float): Maximum cloud fraction. min_sun_angle (float):"
74+ "Minimum sun elevation in degrees. Returns: dict: Combined Planet API filter"
75+ "ready for pagination."
76+ )
7377 # Combine multiple AOIs with OrFilter
7478 if len (aois ) == 1 :
7579 geom_filter = geometry_filter (aois [0 ])
7680 else :
77- geom_filter = {"type" : "OrFilter" , "config" : [geometry_filter (a ) for a in aois ]}
81+ geom_filter = {
82+ "type" : "OrFilter" ,
83+ "config" : [geometry_filter (a ) for a in aois ],
84+ }
7885
7986 # Combine multiple date ranges with OrFilter
8087 if len (date_ranges ) == 1 :
8188 date_filter = date_range_filter (date_ranges [0 ][0 ], date_ranges [0 ][1 ])
8289 else :
8390 date_filter = {
8491 "type" : "OrFilter" ,
85- "config" : [date_range_filter (start , end ) for start , end in date_ranges ],
92+ "config" : [
93+ date_range_filter (start , end ) for start , end in date_ranges
94+ ],
8695 }
8796
8897 # Combine quality filters
89- quality_filters = [cloud_cover_filter (max_cloud ), sun_angle_filter (min_sun_angle )]
98+ quality_filters = [
99+ cloud_cover_filter (max_cloud ),
100+ sun_angle_filter (min_sun_angle ),
101+ ]
90102
91103 # Combine everything with AndFilter
92104 combined_filter = {
0 commit comments