Skip to content

Commit

Permalink
GTC-2580 Create COG assets of integrated alerts
Browse files Browse the repository at this point in the history
Added extra cog_asset_parameters argument to RasterVersionUpdateJob().
Updated IntegratedAlertsSync() to create a new "intensity" raster with
every value set to 255, and then used cog_asset_parameters to create two
new COGs corresponding to the date_conf and intensity rasters.
  • Loading branch information
danscales committed Jun 16, 2024
1 parent c6b719a commit eca7ef0
Show file tree
Hide file tree
Showing 3 changed files with 90 additions and 1 deletion.
7 changes: 7 additions & 0 deletions src/datapump/commands/version_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,3 +45,10 @@ class RasterVersionUpdateParameters(StrictBaseModel):
class RasterVersionUpdateCommand(StrictBaseModel):
command: str
parameters: RasterVersionUpdateParameters

class CogAssetParameters(StrictBaseModel):
implementation: str
source_pixel_meaning: str
resampling: str = "mode"
blocksize: int

54 changes: 54 additions & 0 deletions src/datapump/jobs/version_update.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from datapump.commands.version_update import (
RasterTileCacheParameters,
RasterTileSetParameters,
CogAssetParameters,
)
from datapump.util.models import ContentDateRange

Expand All @@ -19,6 +20,7 @@ class RasterVersionUpdateJobStep(str, Enum):
creating_tile_set = "creating_tile_set"
creating_tile_cache = "creating_tile_cache"
creating_aux_assets = "creating_aux_assets"
creating_cog_assets = "creating_cog_assets"
mark_latest = "mark_latest"


Expand All @@ -29,6 +31,7 @@ class RasterVersionUpdateJob(Job):
tile_set_parameters: RasterTileSetParameters
tile_cache_parameters: Optional[RasterTileCacheParameters] = None
aux_tile_set_parameters: List[RasterTileSetParameters] = []
cog_asset_parameters: List[CogAssetParameters] = []
timeout_sec = 24 * 60 * 60

def next_step(self):
Expand Down Expand Up @@ -84,6 +87,20 @@ def next_step(self):
self.status = JobStatus.failed

elif self.step == RasterVersionUpdateJobStep.creating_aux_assets:
status = self._check_aux_assets_status()
if status == JobStatus.complete:
if self.cog_asset_parameters:
self.step = RasterVersionUpdateJobStep.creating_cog_assets
for cog_asset_params in self.cog_asset_parameters:
if self._create_cog_asset(cog_asset_param) == "":
self.status = JobStatus.failed
break
else:
self.status = JobStatus.complete
elif status == JobStatus.failed:
self.status = JobStatus.failed

elif self.step == RasterVersionUpdateJobStep.creating_cog_assets:
status = self._check_aux_assets_status()
if status == JobStatus.complete:
self.status = JobStatus.complete
Expand Down Expand Up @@ -173,6 +190,43 @@ def _create_aux_tile_set(self, tile_set_parameters: RasterTileSetParameters) ->

return data["asset_id"]

def _create_cog_asset(self, cog_asset_parameters: CogAssetParameters) -> str:
"""
Create cog asset and return asset ID, empty string if an error
"""
client = DataApiClient()

co = cog_asset_parameters

assets = client.get_assets(self.dataset, self.version)
asset_id = ""
for asset in assets:
if asset["asset_type"] == "Raster tile set" and f"/{co.source_pixel_meaning}/" in asset["asset_uri"]:
if asset_id != "":

self.errors.append(f"Multiple assets with pixel meaning '{co.source_pixel_meaning}'")
return ""
asset_id = asset["asset_id"]
break

if asset_id == "":
self.errors.append(f"Could not find asset with pixel meaning '{co.source_pixel_meaning}'")
return ""

payload = {
"asset_type": "COG",
"creation_options": {
"implementation": co.implementation,
"source_asset_id": asset_id,
"resampling": co.resampling,
"block_size": co.blocksize
},
}

data = client.create_aux_asset(self.dataset, self.version, payload)

return data["asset_id"]

def _check_tile_set_status(self) -> JobStatus:
client = DataApiClient()

Expand Down
30 changes: 29 additions & 1 deletion src/datapump/sync/sync.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
from ..clients.datapump_store import DatapumpConfig
from ..commands.analysis import FIRES_ANALYSES, AnalysisInputTable
from ..commands.sync import SyncType
from ..commands.version_update import RasterTileCacheParameters, RasterTileSetParameters
from ..commands.version_update import RasterTileCacheParameters, RasterTileSetParameters, CogAssetParameters
from ..globals import GLOBALS, LOGGER
from ..jobs.geotrellis import FireAlertsGeotrellisJob, GeotrellisJob, Job
from ..jobs.jobs import JobStatus
Expand Down Expand Up @@ -232,6 +232,34 @@ def build_jobs(self, config: DatapumpConfig) -> List[Job]:
resampling="med",
symbology={"type": "date_conf_intensity_multi_8"},
),
aux_tile_set_parameters=RasterTileSetParameters(
[
RasterTileSetParameters(
pixel_meaning="intensity",
data_type="uint8",
calc="(A > 0) * 255",
grid="10/100000"
)
]
),
cog_asset_parameters=CogAssetParameters(
[
# Created from the "date_conf" asset
CogAssetParameters(
source_pixel_meaning="date_conf",
resampling="mode",
implementation="default",
blocksize=1024
),
# Created from the "intensity" asset
CogAssetParameters(
source_pixel_meaning="intensity",
resampling="bilinear",
implementation="intensity",
blocksize=1024
),
]
),
content_date_range=ContentDateRange(
start_date="2014-12-31", end_date=str(date.today())
),
Expand Down

0 comments on commit eca7ef0

Please sign in to comment.