From ab3f80d0c8ce0ed43947fcec1c5c90a87b806f1b Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Tue, 5 Aug 2025 11:02:01 +0200 Subject: [PATCH 1/8] Restore earthquakes.jGIS example --- examples/earthquakes.jGIS | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/earthquakes.jGIS b/examples/earthquakes.jGIS index d3c372eb3..4d95f117d 100644 --- a/examples/earthquakes.jGIS +++ b/examples/earthquakes.jGIS @@ -194,10 +194,10 @@ "options": { "bearing": 0.0, "extent": [ - -18039043.293897964, - -4847443.5412946865, - 1383665.5829297584, - 13318211.842235815 + -19456309.48732131, + -3639686.263420881, + 2800931.776353102, + 12110454.564362008 ], "latitude": 35.52446437432016, "longitude": -74.80890180273175, @@ -227,4 +227,4 @@ "type": "RasterSource" } } -} +} \ No newline at end of file From 8e8b1209c76ab5b267d88c395d03d965cc45ae2c Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Thu, 7 Aug 2025 12:35:02 +0200 Subject: [PATCH 2/8] Made identify features work with vector tile --- packages/base/src/commands/index.ts | 11 +++++-- packages/base/src/mainview/mainView.tsx | 40 ++++++++++++++++++++++++- 2 files changed, 47 insertions(+), 4 deletions(-) diff --git a/packages/base/src/commands/index.ts b/packages/base/src/commands/index.ts index d702984cf..30f18cde7 100644 --- a/packages/base/src/commands/index.ts +++ b/packages/base/src/commands/index.ts @@ -158,6 +158,7 @@ export function addCommands( 'VectorLayer', 'ShapefileLayer', 'WebGlLayer', + 'VectorTileLayer', ].includes(selectedLayer.type); const isIdentifying = current.model.isIdentifying; @@ -174,9 +175,13 @@ export function addCommands( if (!selectedLayer) { return false; } - return ['VectorLayer', 'ShapefileLayer', 'WebGlLayer'].includes( - selectedLayer.type, - ); + return [ + 'VectorLayer', + 'ShapefileLayer', + 'WebGlLayer', + + 'VectorTileLayer', + ].includes(selectedLayer.type); }, execute: args => { const current = tracker.currentWidget; diff --git a/packages/base/src/mainview/mainView.tsx b/packages/base/src/mainview/mainView.tsx index 8654234aa..6243b0615 100644 --- a/packages/base/src/mainview/mainView.tsx +++ b/packages/base/src/mainview/mainView.tsx @@ -650,7 +650,10 @@ export class MainView extends React.Component { const features = tile.getFeatures(); if (features && features.length > 0) { - this._model.syncTileFeatures({ sourceId: id, features }); + this._model.syncTileFeatures({ + sourceId: id, + features, + }); } }); @@ -2101,6 +2104,41 @@ export class MainView extends React.Component { const jgisLayer = this._model.getLayer(layerId); switch (jgisLayer?.type) { + case 'VectorTileLayer': { + const features: any[] = []; + + this._Map.forEachFeatureAtPixel(e.pixel, (feature: FeatureLike) => { + const props = feature.getProperties(); + const geom = feature.getGeometry(); + console.log(geom); + + if (geom) { + const geometry = geom.clone().transform('EPSG:3857', 'EPSG:4326'); + features.push({ + ...props, + geometry, + }); + } else { + features.push({ + ...props, + }); + } + + return true; + }); + + if (features.length > 0) { + this._model.syncIdentifiedFeatures(features, this._mainViewModel.id); + + const geometry = features[0].geometry; + if (geometry) { + this._model.highlightFeatureSignal.emit(geometry); + } + } + + break; + } + case 'WebGlLayer': { const layer = this.getLayer(layerId) as WebGlTileLayer; const data = layer.getData(e.pixel); From 4f396c27999297f5cf7b583c226a5c576025b488 Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Thu, 7 Aug 2025 12:38:10 +0200 Subject: [PATCH 3/8] Solve lint --- examples/earthquakes.jGIS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/earthquakes.jGIS b/examples/earthquakes.jGIS index 4d95f117d..e8a0e55ef 100644 --- a/examples/earthquakes.jGIS +++ b/examples/earthquakes.jGIS @@ -227,4 +227,4 @@ "type": "RasterSource" } } -} \ No newline at end of file +} From 9d6b13dd3d4ef99cf432f20cf9898c483ad18cf7 Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Fri, 8 Aug 2025 12:26:23 +0200 Subject: [PATCH 4/8] Made suggested changes and add simple highlighting --- packages/base/src/mainview/mainView.tsx | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/base/src/mainview/mainView.tsx b/packages/base/src/mainview/mainView.tsx index 6243b0615..2166de3a9 100644 --- a/packages/base/src/mainview/mainView.tsx +++ b/packages/base/src/mainview/mainView.tsx @@ -2113,10 +2113,9 @@ export class MainView extends React.Component { console.log(geom); if (geom) { - const geometry = geom.clone().transform('EPSG:3857', 'EPSG:4326'); features.push({ ...props, - geometry, + geom, }); } else { features.push({ @@ -2129,13 +2128,13 @@ export class MainView extends React.Component { if (features.length > 0) { this._model.syncIdentifiedFeatures(features, this._mainViewModel.id); - - const geometry = features[0].geometry; - if (geometry) { - this._model.highlightFeatureSignal.emit(geometry); - } } + const coordinate = this._Map.getCoordinateFromPixel(e.pixel); + const point = new Point(coordinate); + + this._model.highlightFeatureSignal.emit(point); + break; } From 8b601e7952b834b64fef41e209a49e35e0270fb5 Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Fri, 8 Aug 2025 14:38:13 +0200 Subject: [PATCH 5/8] Made suggested changes --- packages/base/src/commands/index.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/base/src/commands/index.ts b/packages/base/src/commands/index.ts index 30f18cde7..10c76d41e 100644 --- a/packages/base/src/commands/index.ts +++ b/packages/base/src/commands/index.ts @@ -179,7 +179,6 @@ export function addCommands( 'VectorLayer', 'ShapefileLayer', 'WebGlLayer', - 'VectorTileLayer', ].includes(selectedLayer.type); }, From d2c9cf17667519524b541f5411b784906e16de11 Mon Sep 17 00:00:00 2001 From: Gauss_Taylor Date: Mon, 11 Aug 2025 12:50:43 +0200 Subject: [PATCH 6/8] Better highlighting logic --- packages/base/src/mainview/mainView.tsx | 38 +++++++++++++++---------- 1 file changed, 23 insertions(+), 15 deletions(-) diff --git a/packages/base/src/mainview/mainView.tsx b/packages/base/src/mainview/mainView.tsx index 2166de3a9..69b4caba5 100644 --- a/packages/base/src/mainview/mainView.tsx +++ b/packages/base/src/mainview/mainView.tsx @@ -72,7 +72,7 @@ import { transformExtent, } from 'ol/proj'; import { register } from 'ol/proj/proj4.js'; -import RenderFeature from 'ol/render/Feature'; +import RenderFeature, { toGeometry } from 'ol/render/Feature'; import { GeoTIFF as GeoTIFFSource, ImageTile as ImageTileSource, @@ -2105,23 +2105,26 @@ export class MainView extends React.Component { switch (jgisLayer?.type) { case 'VectorTileLayer': { + const geometries: Geometry[] = []; const features: any[] = []; this._Map.forEachFeatureAtPixel(e.pixel, (feature: FeatureLike) => { + let geom: Geometry | undefined = undefined; + + if (feature instanceof RenderFeature) { + geom = toGeometry(feature); + } else { + geom = feature.getGeometry ? feature.getGeometry() : undefined; + } + const props = feature.getProperties(); - const geom = feature.getGeometry(); - console.log(geom); if (geom) { - features.push({ - ...props, - geom, - }); - } else { - features.push({ - ...props, - }); + geometries.push(geom); } + features.push({ + ...props, + }); return true; }); @@ -2130,10 +2133,15 @@ export class MainView extends React.Component { this._model.syncIdentifiedFeatures(features, this._mainViewModel.id); } - const coordinate = this._Map.getCoordinateFromPixel(e.pixel); - const point = new Point(coordinate); - - this._model.highlightFeatureSignal.emit(point); + if (geometries.length > 0) { + for (const geom of geometries) { + this._model.highlightFeatureSignal.emit(geom); + } + } else { + const coordinate = this._Map.getCoordinateFromPixel(e.pixel); + const point = new Point(coordinate); + this._model.highlightFeatureSignal.emit(point); + } break; } From a327a200fbb406335651f3ad6516372e9e8e8da4 Mon Sep 17 00:00:00 2001 From: Arjun Verma Date: Wed, 13 Aug 2025 17:13:35 +0530 Subject: [PATCH 7/8] Update packages/base/src/mainview/mainView.tsx --- packages/base/src/mainview/mainView.tsx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/base/src/mainview/mainView.tsx b/packages/base/src/mainview/mainView.tsx index 69b4caba5..267209569 100644 --- a/packages/base/src/mainview/mainView.tsx +++ b/packages/base/src/mainview/mainView.tsx @@ -2109,13 +2109,13 @@ export class MainView extends React.Component { const features: any[] = []; this._Map.forEachFeatureAtPixel(e.pixel, (feature: FeatureLike) => { - let geom: Geometry | undefined = undefined; + let geom: Geometry | undefined; - if (feature instanceof RenderFeature) { - geom = toGeometry(feature); - } else { - geom = feature.getGeometry ? feature.getGeometry() : undefined; - } + if (feature instanceof RenderFeature) { + geom = toGeometry(feature); + } else if ("getGeometry" in feature) { + geom = feature.getGeometry(); + } const props = feature.getProperties(); From afcf34f01ea574a52b41249edf44e9de736c4df7 Mon Sep 17 00:00:00 2001 From: arjxn-py Date: Wed, 13 Aug 2025 17:33:41 +0530 Subject: [PATCH 8/8] lint --- packages/base/src/mainview/mainView.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/base/src/mainview/mainView.tsx b/packages/base/src/mainview/mainView.tsx index 267209569..82caddef6 100644 --- a/packages/base/src/mainview/mainView.tsx +++ b/packages/base/src/mainview/mainView.tsx @@ -2111,11 +2111,11 @@ export class MainView extends React.Component { this._Map.forEachFeatureAtPixel(e.pixel, (feature: FeatureLike) => { let geom: Geometry | undefined; - if (feature instanceof RenderFeature) { - geom = toGeometry(feature); - } else if ("getGeometry" in feature) { - geom = feature.getGeometry(); - } + if (feature instanceof RenderFeature) { + geom = toGeometry(feature); + } else if ('getGeometry' in feature) { + geom = feature.getGeometry(); + } const props = feature.getProperties();