Skip to content

Commit

Permalink
feat: generate paths for new national hillshade products TDE-1378 (#1193
Browse files Browse the repository at this point in the history
)

#### Motivation

To generate a national combined hillshade product, we need to be able
generate correct output paths when processing the datasets.

#### Modification

- Added tests
- Added GeospatialDataCategories
- Added path template for newly created categories 
- Updated `slugFromMetadata` for basic support of hillshade datasets


#### Checklist

- [x] Tests updated
- [ ] Docs updated
- [x] Issue linked in Title
Docs: no changes to usage of `generate-path` that require an update to
the readme files.
  • Loading branch information
schmidtnz authored Feb 10, 2025
1 parent c91a8af commit f2f8b68
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 2 deletions.
51 changes: 51 additions & 0 deletions src/commands/generate-path/__test__/generate.path.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,57 @@ describe('GeneratePathImagery', () => {
});
});

describe('GeneratePathHillshade', () => {
it('Should match - hillshade 8m igor', () => {
const metadata: PathMetadata = {
targetBucketName: 'nz-elevation',
geospatialCategory: 'dem-hillshade-igor',
region: 'new-zealand',
slug: 'new-zealand-contour',
gsd: 8,
epsg: 2193,
};
assert.equal(
generatePath(metadata),
's3://nz-elevation/new-zealand/new-zealand-contour/dem-hillshade-igor_8m/2193/',
);
});

it('Should match - hillshade 8m default', () => {
const metadata: PathMetadata = {
targetBucketName: 'nz-elevation',
geospatialCategory: 'dem-hillshade',
region: 'new-zealand',
slug: 'new-zealand-contour',
gsd: 8,
epsg: 2193,
};
assert.equal(generatePath(metadata), 's3://nz-elevation/new-zealand/new-zealand-contour/dem-hillshade_8m/2193/');
});
it('Should match - hillshade combined igor', () => {
const metadata: PathMetadata = {
targetBucketName: 'nz-elevation',
geospatialCategory: 'dem-hillshade-igor',
region: 'new-zealand',
slug: 'new-zealand',
gsd: 1,
epsg: 2193,
};
assert.equal(generatePath(metadata), 's3://nz-elevation/new-zealand/new-zealand/dem-hillshade-igor/2193/');
});
it('Should match - hillshade combined default', () => {
const metadata: PathMetadata = {
targetBucketName: 'nz-elevation',
geospatialCategory: 'dem-hillshade',
region: 'new-zealand',
slug: 'new-zealand',
gsd: 1,
epsg: 2193,
};
assert.equal(generatePath(metadata), 's3://nz-elevation/new-zealand/new-zealand/dem-hillshade/2193/');
});
});

describe('GeneratePathGeospatialDataCategories', () => {
it('Should match - dem from slug', () => {
const metadata: PathMetadata = {
Expand Down
12 changes: 11 additions & 1 deletion src/commands/generate-path/path.generate.ts
Original file line number Diff line number Diff line change
Expand Up @@ -92,11 +92,21 @@ export function generatePath(metadata: PathMetadata): string {

if (
metadata.geospatialCategory === GeospatialDataCategories.Dem ||
metadata.geospatialCategory === GeospatialDataCategories.Dsm
metadata.geospatialCategory === GeospatialDataCategories.Dsm ||
(metadata.gsd === 8 &&
(metadata.geospatialCategory === GeospatialDataCategories.DemHillshade ||
metadata.geospatialCategory === GeospatialDataCategories.DemHillshadeIgor))
) {
return `s3://${metadata.targetBucketName}/${metadata.region}/${metadata.slug}/${metadata.geospatialCategory}_${metadata.gsd}m/${metadata.epsg}/`;
}

if (
metadata.geospatialCategory === GeospatialDataCategories.DemHillshade ||
metadata.geospatialCategory === GeospatialDataCategories.DemHillshadeIgor
) {
return `s3://${metadata.targetBucketName}/${metadata.region}/${metadata.slug}/${metadata.geospatialCategory}/${metadata.epsg}/`;
}

throw new Error(
`Path can't be generated from collection as no matching category for ${metadata.geospatialCategory}.`,
);
Expand Down
4 changes: 3 additions & 1 deletion src/commands/stac-setup/stac.setup.ts
Original file line number Diff line number Diff line change
Expand Up @@ -132,7 +132,9 @@ export function slugFromMetadata(metadata: SlugMetadata): string {
}
if (
metadata.geospatialCategory === GeospatialDataCategories.Dem ||
metadata.geospatialCategory === GeospatialDataCategories.Dsm
metadata.geospatialCategory === GeospatialDataCategories.Dsm ||
metadata.geospatialCategory === GeospatialDataCategories.DemHillshade ||
metadata.geospatialCategory === GeospatialDataCategories.DemHillshadeIgor
) {
return slug;
}
Expand Down
2 changes: 2 additions & 0 deletions src/utils/metadata.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ export const GeospatialDataCategories = {
UrbanAerialPhotos: 'urban-aerial-photos',
Dem: 'dem',
Dsm: 'dsm',
DemHillshade: 'dem-hillshade',
DemHillshadeIgor: 'dem-hillshade-igor',
} as const;

export type GeospatialDataCategory = (typeof GeospatialDataCategories)[keyof typeof GeospatialDataCategories];

0 comments on commit f2f8b68

Please sign in to comment.