Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
a6d54b2
adapt to new openapi-client. Add downsampling
jdroenner Sep 17, 2024
673d2ee
update openapi client (wip)
jdroenner Oct 8, 2024
bb1bbb2
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Feb 17, 2025
4a00df3
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Mar 31, 2025
4c47564
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Apr 12, 2025
8d687a1
update openapi
jdroenner Apr 14, 2025
2058ade
make it prettier
jdroenner Apr 14, 2025
7f85b37
adapt manager
jdroenner Apr 30, 2025
8ef753c
adapt mock
jdroenner Apr 30, 2025
cb507b7
disable test for now
jdroenner Apr 30, 2025
80005fa
test lint
jdroenner May 2, 2025
752c254
bump openapi
jdroenner Aug 6, 2025
89ab4b5
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Aug 6, 2025
735b110
adapt to main changes
jdroenner Aug 6, 2025
08117cb
linter
jdroenner Aug 6, 2025
7240709
linter
jdroenner Aug 6, 2025
79b7694
add missing component
jdroenner Aug 6, 2025
15dc6c5
remove duplicate entry in components
jdroenner Aug 11, 2025
657b2f4
add downsampling to index
jdroenner Aug 11, 2025
f2847ba
adapt RasterResultDescriptorComponent
jdroenner Aug 11, 2025
32465a8
add Coordinate2d
jdroenner Aug 11, 2025
7b296a5
fix: make vector simplification work again
ChristianBeilschmidt Aug 19, 2025
2da8e7a
resolution in visual clustering
ChristianBeilschmidt Aug 20, 2025
c269757
fix test
ChristianBeilschmidt Aug 20, 2025
bc5f606
fix: make vector simplification work again (#817)
jdroenner Aug 21, 2025
b2eb1da
go back to openapi branch
jdroenner Aug 25, 2025
7984b09
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Oct 27, 2025
08530bf
update result descriptor to new time descriptor
michaelmattig Nov 18, 2025
d567ea5
fix result descriptor and format
michaelmattig Nov 18, 2025
d5b8c6d
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Nov 21, 2025
8d1c293
Merge branch 'workflow-optimization' of github.com:geo-engine/geoengi…
jdroenner Nov 21, 2025
a9bca51
change openapi ref
jdroenner Nov 24, 2025
e007fc6
fix ogc apis
michaelmattig Nov 25, 2025
30737be
fix ogc apis (#847)
jdroenner Nov 26, 2025
a4a2d2f
Merge branch 'main' of github.com:geo-engine/geoengine-ui into geoeng…
jdroenner Nov 27, 2025
34f31e9
fix downsampling method selection
jdroenner Dec 2, 2025
0b6fc6c
fix tracking in @for statements
jdroenner Dec 3, 2025
a29558e
revert layerlist change
jdroenner Dec 3, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9,322 changes: 3,967 additions & 5,355 deletions package-lock.json

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -56,8 +56,8 @@
"@angular/core": "^20.1.3",
"@angular/forms": "^20.1.3",
"@angular/material": "^20.1.3",
"@angular/platform-browser-dynamic": "^20.1.3",
"@angular/platform-browser": "^20.1.3",
"@angular/platform-browser-dynamic": "^20.1.3",
"@angular/router": "^20.1.3",
"@codemirror/lang-json": "~6.0.2",
"@codemirror/lang-rust": "~6.0.2",
Expand All @@ -66,25 +66,25 @@
"@codemirror/state": "~6.5.2",
"@codemirror/view": "~6.38.1",
"@egjs/hammerjs": "^2.0.17",
"@geoengine/openapi-client": "0.0.29",
"@geoengine/openapi-client": "github:geo-engine/openapi-client#ogc_apis_fix",
"d3": "~7.9.0",
"dagre-d3": "~0.6.4",
"dagre": "~0.8.5",
"dagre-d3": "~0.6.4",
"flatgeobuf": "4.1.1",
"immutable": "~5.1.3",
"keycharm": "0.4.0",
"moment": "~2.30.1",
"ngx-color-picker": "~20.0.0",
"ngx-mat-select-search": "~8.0.2",
"ol-mapbox-style": "~13.0.1",
"ol": "~10.6.1",
"ol-mapbox-style": "~13.0.1",
"proj4": "~2.19.10",
"propagating-hammerjs": "^3.0.0",
"rxjs": "^7.8.2",
"uuid": "11.1.0",
"vega": "~6.1.2",
"vega-embed": "~7.0.2",
"vega-lite": "~6.2.0",
"vega": "~6.1.2",
"vis-data": "8.0.1",
"vis-timeline": "8.2.1",
"vis-util": "6.0.0",
Expand Down
7 changes: 7 additions & 0 deletions projects/common/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,13 @@ export * from './lib/spatial-references/spatial-reference.model';
export * from './lib/symbology/symbology.model';
export * from './lib/time/time.model';
export * from './lib/user/user.model';
export * from './lib/spatial-grid/geo-transform.model';
export * from './lib/spatial-grid/grid-bounding-box.model';
export * from './lib/spatial-grid/grid-idx.model';
export * from './lib/spatial-grid/spatial-grid-definition.model';
export * from './lib/spatial-grid/spatial-grid-descriptor.model';
export * from './lib/spatial-bounds/bounding-box';
export * from './lib/spatial-features/coordinate.model';

// Pipes
export * from './lib/util/pipes/async-converters.pipe';
Expand Down
25 changes: 7 additions & 18 deletions projects/common/src/lib/datasets/dataset.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,17 @@ import {
VectorDataTypes,
} from '../operators/datatype.model';
import {SourceOperatorDict} from '../operators/operator.model';
import {SpatialGridDescriptor} from '../spatial-grid/spatial-grid-descriptor.model';
import {SrsString} from '../spatial-references/spatial-reference.model';
import {Symbology} from '../symbology/symbology.model';
import {Time} from '../time/time.model';
import {
Dataset as DatasetDict,
TypedResultDescriptor as TypedResultDescriptorDict,
TypedVectorResultDescriptor as VectorResultDescriptorDict,
TypedRasterResultDescriptor as RasterResultDescriptorDict,
Workflow as WorkflowDict,
BoundingBox2D as BBoxDict,
RasterBandDescriptor,
RasterBandDescriptor as RasterBandDescriptor,
TimeDescriptor,
} from '@geoengine/openapi-client';

export type UUID = string;
Expand Down Expand Up @@ -88,26 +88,15 @@ export abstract class ResultDescriptor {
export class RasterResultDescriptor extends ResultDescriptor {
readonly dataType: RasterDataType;
readonly bands: Array<RasterBandDescriptor>;
readonly bbox?: BBoxDict;
readonly time?: Time;
readonly spatialGrid: SpatialGridDescriptor;
readonly time: TimeDescriptor;

constructor(config: RasterResultDescriptorDict) {
super(config.spatialReference);
this.dataType = RasterDataTypes.fromCode(config.dataType);
this.bands = config.bands;
if (config.bbox) {
this.bbox = {
lowerLeftCoordinate: {
x: config.bbox.upperLeftCoordinate.x,
y: config.bbox.lowerRightCoordinate.y,
},
upperRightCoordinate: {
x: config.bbox.lowerRightCoordinate.x,
y: config.bbox.upperLeftCoordinate.y,
},
};
}
this.time = config.time ? Time.fromDict(config.time) : undefined;
this.spatialGrid = SpatialGridDescriptor.fromDict(config.spatialGrid);
this.time = config.time;
}

static override fromDict(dict: RasterResultDescriptorDict): RasterResultDescriptor {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,28 @@
<p class="details-row-text-line">{{ rasterLayerMetadata.bands.length }}</p>
</span>
</span>
<span class="details-row" fxLayout="row" fxLayoutAlign="start center">
<mat-icon class="details-row-icon">
<geoengine-raster-icon [xCells]="4" [yCells]="4" [colorizer]="rasterColorizer"></geoengine-raster-icon>
</mat-icon>
<span class="details-row-text" fxLayout="column" fxLayoutAlign="center start">
<p class="details-row-text-line">Grid shape</p>
<p class="details-row-text-line">→ {{ rasterLayerMetadata.numberOfPixelsX }} px</p>
<p class="details-row-text-line">↓ {{ rasterLayerMetadata.numberOfPixelsY }} px</p>
</span>
</span>
<span class="details-row" fxLayout="row" fxLayoutAlign="start center">
<mat-icon class="details-row-icon"
><geoengine-raster-icon [xCells]="4" [yCells]="4" [colorizer]="rasterColorizer"></geoengine-raster-icon
></mat-icon>
<span class="details-row-text" fxLayout="column" fxLayoutAlign="center start">
<p class="details-row-text-line">Pixel size</p>
<p class="details-row-text-line">→ {{ rasterLayerMetadata.pixelSizeX }} unit</p>
<p class="details-row-text-line">↓ {{ rasterLayerMetadata.pixelSizeY }} unit</p>
</span>
</span>
}

@if (vectorLayerMetadata) {
<span class="details-row" fxLayout="row" fxLayoutAlign="start center">
@switch (vectorLayerMetadata.dataType) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ import {RasterIconComponent} from '../../layer-icons/raster-icon/raster-icon.com
imports: [MatIconModule, FxLayoutDirective, PolygonIconComponent, LineIconComponent, PointIconComponent, RasterIconComponent],
})
export class LayerCollectionLayerDetailsComponent {
description = input<string | undefined>();
layerMetadata = input<LayerMetadata | undefined>(undefined);
readonly description = input<string | undefined>();
readonly layerMetadata = input<LayerMetadata | undefined>(undefined);

readonly VectorDataTypes = VectorDataTypes;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ export class LayerCollectionLayerComponent implements OnChanges {
readonly layer = input<LayerCollectionLayerDict>();

// eslint-disable-next-line @typescript-eslint/no-explicit-any
trackBy = input<any>(undefined);
readonly trackBy = input<any>(undefined);

readonly addClick = output<ProviderLayerIdDict>();
readonly isExpanded = output<boolean>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ export class RasterIconComponent {
/**
* the array of generated (colored and positioned) cells.
*/
cells = computed<Array<Cell>>(() => {
readonly cells = computed<Array<Cell>>(() => {
const rasterColorizer = this.colorizer();
const cellSpace = this.cellSpace();
const xCells = this.xCells();
Expand Down
57 changes: 35 additions & 22 deletions projects/common/src/lib/layers/layer-metadata.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,23 +16,23 @@ import {BoundingBox2D} from '../spatial-bounds/bounding-box';
import {
TypedRasterResultDescriptor as RasterResultDescriptorDict,
TypedVectorResultDescriptor as VectorResultDescriptorDict,
SpatialResolution,
RasterBandDescriptor,
TypedResultDescriptor,
} from '@geoengine/openapi-client';
import {SpatialGridDescriptor} from '../spatial-grid/spatial-grid-descriptor.model';

export abstract class LayerMetadata implements HasLayerType {
abstract readonly layerType: LayerType;
readonly spatialReference: SpatialReference;
readonly time?: Time;
readonly bbox?: BoundingBox2D;

constructor(spatialReference: SpatialReference, time?: Time, bbox?: BoundingBox2D) {
constructor(spatialReference: SpatialReference, time?: Time) {
this.spatialReference = spatialReference;
this.time = time;
this.bbox = bbox;
}

public abstract get bbox(): BoundingBox2D | undefined;

public abstract get resultType(): ResultType;

public static fromDict(
Expand All @@ -55,6 +55,7 @@ export class VectorLayerMetadata extends LayerMetadata {
readonly dataType: VectorDataType;
readonly dataTypes: Immutable.Map<string, VectorColumnDataType>;
readonly measurements: Immutable.Map<string, Measurement>;
readonly bbox: BoundingBox2D | undefined;

constructor(
dataType: VectorDataType,
Expand All @@ -64,11 +65,12 @@ export class VectorLayerMetadata extends LayerMetadata {
time?: Time,
bbox?: BoundingBox2D,
) {
super(spatialReference, time, bbox);
super(spatialReference, time);

this.dataType = dataType;
this.dataTypes = Immutable.Map(Object.entries(dataTypes));
this.measurements = Immutable.Map(Object.entries(measurements));
this.bbox = bbox;
}

static override fromDict(dict: VectorResultDescriptorDict): VectorLayerMetadata {
Expand Down Expand Up @@ -101,38 +103,49 @@ export class RasterLayerMetadata extends LayerMetadata {
readonly dataType: RasterDataType;
readonly bands: RasterBandDescriptor[];

readonly resolution?: SpatialResolution;
readonly spatialGrid: SpatialGridDescriptor;

constructor(
dataType: RasterDataType,
spatialReference: SpatialReference,
bands: RasterBandDescriptor[],
spatialGrid: SpatialGridDescriptor,
time?: Time,
bbox?: BoundingBox2D,
resolution?: SpatialResolution,
) {
super(spatialReference, time, bbox);
super(spatialReference, time);

this.dataType = dataType;
this.bands = bands;

this.resolution = resolution;
this.spatialGrid = spatialGrid;
}

static override fromDict(dict: RasterResultDescriptorDict): RasterLayerMetadata {
const dataType = RasterDataTypes.fromCode(dict.dataType);
const bands = dict.bands;
const time = dict.time ? Time.fromDict(dict.time) : undefined;
const bbox = dict.bbox ? BoundingBox2D.fromSpatialPartitionDict(dict.bbox) : undefined;

return new RasterLayerMetadata(
dataType,
SpatialReference.fromSrsString(dict.spatialReference),
bands,
time,
bbox,
dict.resolution ?? undefined,
);
const time = dict.time?.bounds ? Time.fromDict(dict.time.bounds) : undefined;
const spatialGrid = SpatialGridDescriptor.fromDict(dict.spatialGrid);

return new RasterLayerMetadata(dataType, SpatialReference.fromSrsString(dict.spatialReference), bands, spatialGrid, time);
}

public get bbox(): BoundingBox2D {
return this.spatialGrid.spatialGrid.bbox();
}

public get numberOfPixelsX(): number {
return this.spatialGrid.spatialGrid.numberOfPixelsX;
}

public get numberOfPixelsY(): number {
return this.spatialGrid.spatialGrid.numberOfPixelsY;
}

public get pixelSizeX(): number {
return this.spatialGrid.spatialGrid.pixelSizeX;
}

public get pixelSizeY(): number {
return this.spatialGrid.spatialGrid.pixelSizeY;
}

public get resultType(): ResultType {
Expand Down
2 changes: 1 addition & 1 deletion projects/common/src/lib/login/login.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ export class LoginComponent implements OnInit, AfterViewInit, OnDestroy {

readonly FormStatus = FormStatus;

loginRedirect = input('/map');
readonly loginRedirect = input('/map');

formStatus$ = new BehaviorSubject<FormStatus>(FormStatus.Loading);
canRegister = this.config.USER.REGISTRATION_AVAILABLE;
Expand Down
16 changes: 14 additions & 2 deletions projects/common/src/lib/operators/operator.model.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import {
TimeStep as TimeStepDict,
TimeInterval as TimeIntervalDict,
TimeGranularity as TimeStepGranularityDict,
Coordinate2D as Coordinate2DDict,
} from '@geoengine/openapi-client';
import {NamedDataDict} from '../datasets/dataset.model';
import {SrsString} from '../spatial-references/spatial-reference.model';
Expand Down Expand Up @@ -427,6 +428,7 @@ export interface RasterTypeConversionDict extends OperatorDict {
export interface VisualPointClusteringParams extends OperatorParams {
minRadiusPx: number;
deltaPx: number;
resolution: number;
radiusColumn: string;
countColumn: string;
columnAggregates: Record<
Expand Down Expand Up @@ -481,11 +483,21 @@ export interface InterpolationDict extends OperatorDict {
type: 'Interpolation';
params: {
interpolation: 'nearestNeighbor' | 'bilinear';
inputResolution: InputResolutionDict;
outputResolution: OutputResolutionDict;
outputOriginReference?: Coordinate2DDict;
};
}

export type InputResolutionDict = {type: 'source'} | {type: 'value'; x: number; y: number};
export interface DownsamplingDict extends OperatorDict {
type: 'Downsampling';
params: {
samplingMethod: 'nearestNeighbor';
outputResolution: OutputResolutionDict;
outputOriginReference?: Coordinate2DDict;
};
}

export type OutputResolutionDict = {type: 'resolution'; x: number; y: number} | {type: 'fraction'; x: number; y: number};

export interface RasterUnScalingDict extends OperatorDict {
type: 'RasterScaling';
Expand Down
2 changes: 1 addition & 1 deletion projects/common/src/lib/register/register.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ export class RegisterComponent implements AfterViewInit {

PASSWORD_MIN_LENGTH = 8;

loginRedirect = input('/map');
readonly loginRedirect = input('/map');

loading$ = new BehaviorSubject<boolean>(false);
notLoading$ = this.loading$.pipe(map((loading) => !loading));
Expand Down
33 changes: 33 additions & 0 deletions projects/common/src/lib/spatial-bounds/bounding-box.ts
Original file line number Diff line number Diff line change
Expand Up @@ -131,4 +131,37 @@ export class BoundingBox2D implements ToDict<BBoxDict> {
upperRightCoordinate: this.upperRightCoordinate.toDict(),
};
}

/**
* Returns the `BoundingBox2D` covering self and other.
*
* @param other
* @returns - A new union `BoundingBox2D`.
*/
public union(other: BoundingBox2D): BoundingBox2D {
return BoundingBox2D.fromNumbers(
Math.min(this.xmin, other.xmin),
Math.min(this.ymin, other.ymin),
Math.max(this.xmax, other.xmax),
Math.max(this.ymax, other.ymax),
);
}

/**
* Folds an iterable of BoundingBox2D into the BoundingBox2D containing them all.
*
* @param iter
* @returns - A new `BoundingBox2D` covering all input boxes.
*/
public static unionFold(iter: BoundingBox2D[]): BoundingBox2D | undefined {
let totalBounds: BoundingBox2D | undefined = undefined;
for (const b of iter) {
if (totalBounds) {
totalBounds = b.union(totalBounds);
} else {
totalBounds = b;
}
}
return totalBounds;
}
}
Loading