Skip to content

Commit

Permalink
Use BoundingBox to simplify load_result logic
Browse files Browse the repository at this point in the history
  • Loading branch information
soxofaan committed Mar 24, 2023
1 parent 51766f8 commit b79bc2c
Showing 1 changed file with 18 additions and 13 deletions.
31 changes: 18 additions & 13 deletions openeogeotrellis/backend.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
from pyspark import SparkContext
from pyspark.mllib.tree import RandomForestModel
from pyspark.version import __version__ as pysparkversion
from pystac import Collection
import pystac
from shapely.geometry import box, Polygon

from openeo.internal.process_graph_visitor import ProcessGraphVisitor
Expand All @@ -49,6 +49,7 @@
from openeo_driver.jobregistry import ElasticJobRegistry, JOB_STATUS, DEPENDENCY_STATUS
from openeo_driver.save_result import ImageCollectionResult
from openeo_driver.users import User
from openeo_driver.util.geometry import BoundingBox
from openeo_driver.util.logging import (
FlaskRequestCorrelationIdLogging,
FlaskUserIdLogging,
Expand Down Expand Up @@ -564,17 +565,19 @@ def load_result(self, job_id: str, user_id: Optional[str], load_params: LoadPara
env: EvalEnv) -> GeopysparkDataCube:
logger.info("load_result from job ID {j!r} with load params {p!r}".format(j=job_id, p=load_params))

requested_bbox = BoundingBox.from_dict_or_none(
load_params.spatial_extent, default_crs="EPSG:4326"
)
spatial_extent = load_params.spatial_extent
west = spatial_extent.get("west", None)
east = spatial_extent.get("east", None)
north = spatial_extent.get("north", None)
south = spatial_extent.get("south", None)
crs = spatial_extent.get("crs", None)
spatial_bounds_present = all(b is not None for b in [west, south, east, north])

if job_id.startswith("http://") or job_id.startswith("https://"):
job_results_canonical_url = job_id
job_results = Collection.from_file(href=job_results_canonical_url)
job_results = pystac.Collection.from_file(href=job_results_canonical_url)

def reproject(bbox: List[float], crs_from, crs_to) -> List[float]:
from pyproj import Transformer
Expand All @@ -584,14 +587,13 @@ def reproject(bbox: List[float], crs_from, crs_to) -> List[float]:
return [xmin, ymin, xmax, ymax]

def intersects_spatial_extent(item) -> bool:
if not spatial_bounds_present or item.bbox is None:
if not requested_bbox or item.bbox is None:
return True

spatial_extent_epsg4326 = reproject([west, south, east, north],
crs_from=crs or "EPSG:4326",
crs_to="EPSG:4326")

return Polygon.from_bounds(*spatial_extent_epsg4326).intersects(Polygon.from_bounds(*item.bbox))
requested_bbox_lonlat = requested_bbox.reproject("EPSG:4326")
return requested_bbox_lonlat.as_polygon().intersects(
Polygon.from_bounds(*item.bbox)
)

uris_with_metadata = {asset.get_absolute_href(): (item.datetime.isoformat(),
asset.extra_fields.get("eo:bands", []))
Expand Down Expand Up @@ -675,8 +677,8 @@ def load_spatial_bounds_from_job_info():
if single_level:
existing_bbox, existing_epsg = load_spatial_bounds()

if spatial_bounds_present:
extent = jvm.geotrellis.vector.Extent(float(west), float(south), float(east), float(north))
if requested_bbox:
extent = jvm.geotrellis.vector.Extent(*requested_bbox.as_wsen_tuple())
else:
extent = jvm.geotrellis.vector.Extent(*[float(value) for value in existing_bbox])
crs = "EPSG:4326"
Expand All @@ -693,8 +695,11 @@ def load_spatial_bounds_from_job_info():
pyramid = pyramid_factory.datacube_seq(projected_polygons, from_date, to_date, metadata_properties,
correlation_id, data_cube_parameters)
else:
extent = (jvm.geotrellis.vector.Extent(float(west), float(south), float(east), float(north))
if spatial_bounds_present else None)
extent = (
jvm.geotrellis.vector.Extent(*requested_bbox.as_wsen_tuple())
if requested_bbox
else None
)

pyramid = pyramid_factory.pyramid_seq(extent, crs, from_date, to_date)

Expand Down

0 comments on commit b79bc2c

Please sign in to comment.