Files
geointel/frontend/src/services/api/datasets.ts
T
Codex fb38eb3e91
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s
feat: add governed hydrology and historical imagery
2026-07-15 12:17:45 +02:00

149 lines
7.8 KiB
TypeScript

import { apiGet, apiMultipart, apiPost } from './client'
import type {
DatasetCreateResponse,
DatasetListResponse,
RasterMetadataResponse,
RasterInspectResponse,
RasterStatsResponse,
RasterPreviewResponse,
JobRead,
VectorBBoxResponse,
VectorStatsResponse,
VectorSelectionRequest,
VectorSelectionDeriveRequest,
VectorSelectionResponse,
VectorSummary,
RasterNdviRequest,
RasterNdwiRequest,
RasterNdbiRequest,
OrthophotoAcquireRequest,
OrthophotoProductRead,
} from '../../types'
export const datasetsApi = {
list: (projectId: string): Promise<DatasetListResponse> =>
apiGet<DatasetListResponse>(`/api/v1/projects/${projectId}/datasets`),
upload: (
projectId: string,
payload: {
file: File
datasetType: string
source: string
datasetRole: string
sourceName?: string
referenceLayerName?: string
sourceMetadataJson?: string
provenanceMetadataJson?: string
areaId?: string
temporalSeriesKey?: string
observedAt?: string
validFrom?: string
validTo?: string
temporalGranularity?: string
sourceVersion?: string
},
): Promise<DatasetCreateResponse> => {
const form = new FormData()
form.append('file', payload.file)
form.append('dataset_type', payload.datasetType)
form.append('source', payload.source)
form.append('dataset_role', payload.datasetRole)
if (payload.sourceName) {
form.append('source_name', payload.sourceName)
}
if (payload.referenceLayerName) {
form.append('reference_layer_name', payload.referenceLayerName)
}
if (payload.sourceMetadataJson) {
form.append('source_metadata_json', payload.sourceMetadataJson)
}
if (payload.provenanceMetadataJson) {
form.append('provenance_metadata_json', payload.provenanceMetadataJson)
}
if (payload.areaId) {
form.append('area_id', payload.areaId)
}
if (payload.temporalSeriesKey) {
form.append('temporal_series_key', payload.temporalSeriesKey)
}
if (payload.observedAt) {
form.append('observed_at', payload.observedAt)
}
if (payload.validFrom) {
form.append('valid_from', payload.validFrom)
}
if (payload.validTo) {
form.append('valid_to', payload.validTo)
}
if (payload.temporalGranularity) {
form.append('temporal_granularity', payload.temporalGranularity)
}
if (payload.sourceVersion) {
form.append('source_version', payload.sourceVersion)
}
return apiMultipart<DatasetCreateResponse>(`/api/v1/projects/${projectId}/datasets/upload`, form)
},
acquireOrthophoto: (projectId: string, payload: OrthophotoAcquireRequest): Promise<JobRead> =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/orthophoto/acquire`, payload),
listOrthophotoProducts: (projectId: string): Promise<{ items: OrthophotoProductRead[]; total: number }> =>
apiGet<{ items: OrthophotoProductRead[]; total: number }>(`/api/v1/projects/${projectId}/datasets/orthophoto/products`),
orthophotoImageUrl: (projectId: string, datasetId: string): string =>
`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/image`,
refreshMetadata: (projectId: string, datasetId: string): Promise<DatasetCreateResponse> =>
apiPost<DatasetCreateResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/metadata/refresh`, {}),
inspectRaster: (projectId: string, datasetId: string): Promise<RasterInspectResponse> =>
apiGet<RasterInspectResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/inspect`),
rasterStats: (projectId: string, datasetId: string): Promise<RasterStatsResponse> =>
apiGet<RasterStatsResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/stats`),
inspectVector: (projectId: string, datasetId: string): Promise<{ dataset: DatasetCreateResponse; summary: VectorSummary | null; metadata: unknown }> =>
apiGet<{ dataset: DatasetCreateResponse; summary: VectorSummary | null; metadata: unknown }>(
`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/inspect`,
),
vectorBbox: (projectId: string, datasetId: string): Promise<VectorBBoxResponse> =>
apiGet<VectorBBoxResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/bbox`),
vectorSummary: (projectId: string, datasetId: string): Promise<VectorSummary> =>
apiGet<VectorSummary>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/summary`),
vectorStats: (projectId: string, datasetId: string): Promise<VectorStatsResponse> =>
apiGet<VectorStatsResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/stats`),
selectVectorFeatures: (projectId: string, datasetId: string, payload: VectorSelectionRequest): Promise<VectorSelectionResponse> =>
apiPost<VectorSelectionResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/select`, payload),
deriveVectorSelection: (projectId: string, datasetId: string, payload: VectorSelectionDeriveRequest): Promise<DatasetCreateResponse> =>
apiPost<DatasetCreateResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/select/derive`, payload),
vectorClip: (projectId: string, datasetId: string, payload: { area_id: string; output_name?: string }) =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/clip`, payload),
vectorBuffer: (projectId: string, datasetId: string, payload: { distance_m: number; dissolve?: boolean; output_name?: string }) =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/buffer`, payload),
vectorIntersect: (projectId: string, datasetId: string, payload: { other_dataset_id: string; output_name?: string }) =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/vector/intersect`, payload),
rasterMetadata: (projectId: string, datasetId: string): Promise<RasterMetadataResponse> =>
apiGet<RasterMetadataResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/metadata`),
rasterInspect: (projectId: string, datasetId: string): Promise<RasterInspectResponse> =>
apiGet<RasterInspectResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/inspect`),
rasterTile: (
projectId: string,
datasetId: string,
payload: { tile_size?: number; overlap?: number; output_name?: string } = {},
): Promise<JobRead> =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/tile`, payload),
rasterReproject: (
projectId: string,
datasetId: string,
payload: { target_crs: string; resampling?: string; output_name?: string },
): Promise<JobRead> => apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/reproject`, payload),
rasterNdvi: (projectId: string, datasetId: string, payload: RasterNdviRequest): Promise<JobRead> =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndvi`, payload),
rasterNdwi: (projectId: string, datasetId: string, payload: RasterNdwiRequest): Promise<JobRead> =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndwi`, payload),
rasterNdbi: (projectId: string, datasetId: string, payload: RasterNdbiRequest): Promise<JobRead> =>
apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/indices/ndbi`, payload),
rasterPreview: (projectId: string, datasetId: string): Promise<RasterPreviewResponse> =>
apiGet<RasterPreviewResponse>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/preview`),
rasterClip: (
projectId: string,
datasetId: string,
payload: { area_id: string; output_name?: string },
): Promise<JobRead> => apiPost<JobRead>(`/api/v1/projects/${projectId}/datasets/${datasetId}/raster/clip`, payload),
getContent: (projectId: string, datasetId: string): Promise<GeoJSON.FeatureCollection> =>
apiGet<GeoJSON.FeatureCollection>(`/api/v1/projects/${projectId}/datasets/${datasetId}/content`),
}