Add raster tile detection handoff
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled

This commit is contained in:
Codex
2026-06-23 18:18:59 +02:00
parent 8855aa8390
commit aa41dfa586
8 changed files with 112 additions and 4 deletions
+23 -1
View File
@@ -27,6 +27,15 @@ function toRasterMetadata(metadata: Record<string, unknown> | null | undefined):
return metadata as unknown as RasterMetadataResponse
}
function extractRasterTileManifestPath(job: JobRead | null | undefined): string {
const result = job?.result_json
if (!result) {
return ''
}
const manifestPath = result.manifest_path
return typeof manifestPath === 'string' ? manifestPath : ''
}
export function useDatasetWorkflow({
selectedProjectId,
areas,
@@ -43,6 +52,7 @@ export function useDatasetWorkflow({
const [datasetContent, setDatasetContent] = useState<GeoJSON.FeatureCollection | null>(null)
const [jobs, setJobs] = useState<JobRead[]>([])
const [rasterPreview, setRasterPreview] = useState<RasterPreviewResponse | null>(null)
const [latestRasterTileManifestPath, setLatestRasterTileManifestPath] = useState('')
const [selectedIntersectTargetId, setSelectedIntersectTargetId] = useState('')
const [selectedClipAreaId, setSelectedClipAreaId] = useState('')
const [rasterTileSize, setRasterTileSize] = useState(512)
@@ -100,6 +110,10 @@ export function useDatasetWorkflow({
const loadDatasetJobs = async (projectId: string, datasetId: string) => {
const response = await jobsApi.list(projectId, { dataset_id: datasetId, limit: 20, offset: 0 })
setJobs(response.items)
const latestRasterTileJob = response.items.find(
(job) => job.job_type === 'raster.tile' && extractRasterTileManifestPath(job),
)
setLatestRasterTileManifestPath(extractRasterTileManifestPath(latestRasterTileJob))
}
const loadDatasetDetails = async (projectId: string, dataset: DatasetCreateResponse) => {
@@ -111,6 +125,7 @@ export function useDatasetWorkflow({
setSelectedRasterStats(null)
setDatasetContent(null)
setRasterPreview(null)
setLatestRasterTileManifestPath('')
setSelectedDatasetId(dataset.id)
setJobs([])
try {
@@ -352,12 +367,17 @@ export function useDatasetWorkflow({
return
}
try {
await datasetsApi.rasterTile(selectedProjectId, selectedDatasetId, {
const job = await datasetsApi.rasterTile(selectedProjectId, selectedDatasetId, {
tile_size: rasterTileSize,
overlap: rasterTileOverlap,
output_name: rasterTileOutputName || undefined,
})
const manifestPath = extractRasterTileManifestPath(job)
setLatestRasterTileManifestPath(manifestPath)
await refreshSelectedDatasetAfterJob()
if (manifestPath) {
setLatestRasterTileManifestPath(manifestPath)
}
setDatasetDetailError(null)
} catch (error) {
setDatasetDetailError(formatError(error, 'Raster tile failed'))
@@ -444,6 +464,7 @@ export function useDatasetWorkflow({
setSelectedRasterStats(null)
setDatasetContent(null)
setRasterPreview(null)
setLatestRasterTileManifestPath('')
setJobs([])
}
@@ -456,6 +477,7 @@ export function useDatasetWorkflow({
datasetContent,
jobs,
rasterPreview,
latestRasterTileManifestPath,
selectedIntersectTargetId,
selectedClipAreaId,
rasterTileSize,