- {tool.parameters.filter(isParamVisible).map((param) => (
-
handleParamChange(param.id, value)}
- />
- ))}
+ {tool.parameters.filter(isParamVisible).map((param) => {
+ // Narrow the resolution spinner to the selected DGGS type's range.
+ const fieldParam =
+ (tool.id === "dggs-grid" ||
+ tool.id === "dggs-bin" ||
+ tool.id === "dggs-compact") &&
+ param.id === "resolution"
+ ? (() => {
+ const dggsType =
+ params.dggsType === "s2" ||
+ params.dggsType === "a5" ||
+ params.dggsType === "dggrid" ||
+ params.dggsType === "dggal"
+ ? params.dggsType
+ : "h3";
+ const rawSubtype =
+ dggsType === "dggal" ? params.dggalType : params.dggridType;
+ const subtype = typeof rawSubtype === "string" ? rawSubtype : undefined;
+ const max = maxResolutionForDggs(dggsType, subtype);
+ return {
+ ...param,
+ max,
+ label: t("processing.vectorTools.resolutionRange", { max }),
+ };
+ })()
+ : param;
+ return (
+ handleParamChange(param.id, value)}
+ />
+ );
+ })}
{tool.supportsSidecar || tool.requiresSidecar ? (
diff --git a/apps/geolibre-desktop/src/i18n/locales/ar.json b/apps/geolibre-desktop/src/i18n/locales/ar.json
index 40fa6ace7..59d27a09c 100644
--- a/apps/geolibre-desktop/src/i18n/locales/ar.json
+++ b/apps/geolibre-desktop/src/i18n/locales/ar.json
@@ -2405,8 +2405,6 @@
"grid": "شبكة منتظمة",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "تغطية المواقع الخلوية",
- "h3Grid": "إنشاء شبكة H3",
- "h3BinPoints": "تجميع النقاط في خلايا H3",
"trajectorySpeed": "سرعة مسار الحركة",
"detectStops": "اكتشاف التوقفات",
"spaceTimeProximity": "التقارب الزماني المكاني",
diff --git a/apps/geolibre-desktop/src/i18n/locales/de.json b/apps/geolibre-desktop/src/i18n/locales/de.json
index 9859150e5..91b78b75b 100644
--- a/apps/geolibre-desktop/src/i18n/locales/de.json
+++ b/apps/geolibre-desktop/src/i18n/locales/de.json
@@ -2234,8 +2234,6 @@
"grid": "Regelmäßiges Raster",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Mobilfunkzellen-Abdeckung",
- "h3Grid": "H3-Raster erstellen",
- "h3BinPoints": "Punkte zu H3 binnen",
"trajectorySpeed": "Trajektoriengeschwindigkeit",
"detectStops": "Stopps erkennen",
"spaceTimeProximity": "Raum-Zeit-Nähe",
diff --git a/apps/geolibre-desktop/src/i18n/locales/en.json b/apps/geolibre-desktop/src/i18n/locales/en.json
index 14ccbf6a4..d9545feb5 100644
--- a/apps/geolibre-desktop/src/i18n/locales/en.json
+++ b/apps/geolibre-desktop/src/i18n/locales/en.json
@@ -2235,8 +2235,9 @@
"grid": "Regular grid",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Cell-site coverage",
- "h3Grid": "Create H3 grid",
- "h3BinPoints": "Bin points to H3",
+ "dggsGenerator": "DGGS Generator",
+ "dggsBinning": "DGGS Binning",
+ "dggsCompact": "DGGS Compact",
"trajectorySpeed": "Trajectory speed",
"detectStops": "Detect stops",
"spaceTimeProximity": "Space-time proximity",
@@ -2421,7 +2422,8 @@
"subGroupOverlay": "Overlay",
"subGroupJoin": "Join",
"subGroupSelect": "Select",
- "subGroupH3": "H3",
+ "subGroupDggs": "DGGS",
+ "subGroupH3": "DGGS",
"subGroupMovement": "Movement & time",
"subGroupDataQuality": "Data quality",
"subGroupTerrain": "Terrain",
@@ -3002,9 +3004,9 @@
"title": "OLC",
"controlTitle": "OLC settings",
"autoResolution": "Automatic resolution",
- "resolution": "Code length",
+ "resolution": "Resolution",
"cellCount": "{{count}} cells in view",
- "tooManyCells": "This view exceeds the {{limit}} cell limit. Zoom in or lower the code length.",
+ "tooManyCells": "This view exceeds the {{limit}} cell limit. Zoom in or lower the resolution.",
"fillColor": "Fill color",
"fillOpacity": "Fill opacity",
"lineColor": "Outline color",
@@ -3029,9 +3031,9 @@
"title": "Geohash",
"controlTitle": "Geohash settings",
"autoResolution": "Automatic resolution",
- "resolution": "Precision",
+ "resolution": "Resolution",
"cellCount": "{{count}} cells in view",
- "tooManyCells": "This view exceeds the {{limit}} cell limit. Zoom in or lower the precision.",
+ "tooManyCells": "This view exceeds the {{limit}} cell limit. Zoom in or lower the resolution.",
"fillColor": "Fill color",
"fillOpacity": "Fill opacity",
"lineColor": "Outline color",
@@ -3056,9 +3058,9 @@
"title": "Tilecode",
"controlTitle": "Tilecode settings",
"autoResolution": "Automatic resolution",
- "resolution": "Zoom level",
+ "resolution": "Resolution",
"cellCount": "{{count}} tiles in view",
- "tooManyCells": "This view exceeds the {{limit}} tile limit. Zoom in or lower the zoom level.",
+ "tooManyCells": "This view exceeds the {{limit}} tile limit. Zoom in or lower the resolution.",
"fillColor": "Fill color",
"fillOpacity": "Fill opacity",
"lineColor": "Outline color",
@@ -3993,7 +3995,8 @@
"sidecarUnavailablePyodide": "The GeoPandas sidecar is not available. Start the sidecar with the vector extra, or switch to Python (Pyodide).",
"pyodideNote": "Runs GeoPandas in your browser. The first run downloads the Python runtime (one-time, needs an internet connection).",
"run": "Run",
- "outputPlaceholder": "Output will appear here."
+ "outputPlaceholder": "Output will appear here.",
+ "resolutionRange": "Resolution (0-{{max}})"
}
},
"segmentation": {
diff --git a/apps/geolibre-desktop/src/i18n/locales/es.json b/apps/geolibre-desktop/src/i18n/locales/es.json
index 8578c1bab..08832516b 100644
--- a/apps/geolibre-desktop/src/i18n/locales/es.json
+++ b/apps/geolibre-desktop/src/i18n/locales/es.json
@@ -2234,8 +2234,6 @@
"grid": "Cuadrícula regular",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Cobertura de sitios celulares",
- "h3Grid": "Crear cuadrícula H3",
- "h3BinPoints": "Agrupar puntos en H3",
"trajectorySpeed": "Velocidad de trayectoria",
"detectStops": "Detectar paradas",
"spaceTimeProximity": "Proximidad espacio-temporal",
diff --git a/apps/geolibre-desktop/src/i18n/locales/fr.json b/apps/geolibre-desktop/src/i18n/locales/fr.json
index e34ae0dec..0d44e9aad 100644
--- a/apps/geolibre-desktop/src/i18n/locales/fr.json
+++ b/apps/geolibre-desktop/src/i18n/locales/fr.json
@@ -2234,8 +2234,6 @@
"grid": "Grille régulière",
"voronoi": "Voronoï / Delaunay",
"cellSectors": "Couverture de site cellulaire",
- "h3Grid": "Créer une grille H3",
- "h3BinPoints": "Regrouper les points en H3",
"trajectorySpeed": "Vitesse de trajectoire",
"detectStops": "Détecter les arrêts",
"spaceTimeProximity": "Proximité spatio-temporelle",
diff --git a/apps/geolibre-desktop/src/i18n/locales/hi.json b/apps/geolibre-desktop/src/i18n/locales/hi.json
index c6c2b4981..ec789bfe3 100644
--- a/apps/geolibre-desktop/src/i18n/locales/hi.json
+++ b/apps/geolibre-desktop/src/i18n/locales/hi.json
@@ -2234,8 +2234,6 @@
"grid": "नियमित ग्रिड",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "सेल-साइट कवरेज",
- "h3Grid": "H3 ग्रिड बनाएं",
- "h3BinPoints": "बिंदुओं को H3 में बिन करें",
"trajectorySpeed": "प्रक्षेपवक्र गति",
"detectStops": "रुकावटें पहचानें",
"spaceTimeProximity": "स्थान-समय निकटता",
diff --git a/apps/geolibre-desktop/src/i18n/locales/id.json b/apps/geolibre-desktop/src/i18n/locales/id.json
index 910af0db2..c3588d319 100644
--- a/apps/geolibre-desktop/src/i18n/locales/id.json
+++ b/apps/geolibre-desktop/src/i18n/locales/id.json
@@ -2191,8 +2191,6 @@
"grid": "Grid teratur",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Cakupan sel BTS",
- "h3Grid": "Buat grid H3",
- "h3BinPoints": "Bin titik ke H3",
"trajectorySpeed": "Kecepatan lintasan",
"detectStops": "Deteksi pemberhentian",
"spaceTimeProximity": "Kedekatan ruang-waktu",
diff --git a/apps/geolibre-desktop/src/i18n/locales/it.json b/apps/geolibre-desktop/src/i18n/locales/it.json
index e351cf80f..487371769 100644
--- a/apps/geolibre-desktop/src/i18n/locales/it.json
+++ b/apps/geolibre-desktop/src/i18n/locales/it.json
@@ -2234,8 +2234,6 @@
"grid": "Griglia regolare",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Copertura delle celle radio",
- "h3Grid": "Crea griglia H3",
- "h3BinPoints": "Assegna punti a celle H3",
"trajectorySpeed": "Velocità di traiettoria",
"detectStops": "Rileva soste",
"spaceTimeProximity": "Prossimità spazio-temporale",
diff --git a/apps/geolibre-desktop/src/i18n/locales/ja.json b/apps/geolibre-desktop/src/i18n/locales/ja.json
index 13fd0dba0..6a97f39cd 100644
--- a/apps/geolibre-desktop/src/i18n/locales/ja.json
+++ b/apps/geolibre-desktop/src/i18n/locales/ja.json
@@ -2191,8 +2191,6 @@
"grid": "正方格子",
"voronoi": "ボロノイ / ドロネー",
"cellSectors": "セルサイトのカバレッジ",
- "h3Grid": "H3グリッドを作成",
- "h3BinPoints": "ポイントをH3にビン化",
"trajectorySpeed": "軌跡速度",
"detectStops": "停止を検出",
"spaceTimeProximity": "時空間近接",
diff --git a/apps/geolibre-desktop/src/i18n/locales/ka.json b/apps/geolibre-desktop/src/i18n/locales/ka.json
index 6a03c9f57..ba00f87ad 100644
--- a/apps/geolibre-desktop/src/i18n/locales/ka.json
+++ b/apps/geolibre-desktop/src/i18n/locales/ka.json
@@ -2234,8 +2234,6 @@
"grid": "რეგულარული ბადე",
"voronoi": "ვორონოი / დელონე",
"cellSectors": "ფიჭური საიტის დაფარვა",
- "h3Grid": "H3 ბადის შექმნა",
- "h3BinPoints": "წერტილების დაჯგუფება H3-ში",
"trajectorySpeed": "ტრაექტორიის სიჩქარე",
"detectStops": "გაჩერებების ამოცნობა",
"spaceTimeProximity": "სივრცე-დროითი სიახლოვე",
diff --git a/apps/geolibre-desktop/src/i18n/locales/ko.json b/apps/geolibre-desktop/src/i18n/locales/ko.json
index 3e088f0ba..bad3789e0 100644
--- a/apps/geolibre-desktop/src/i18n/locales/ko.json
+++ b/apps/geolibre-desktop/src/i18n/locales/ko.json
@@ -2191,8 +2191,6 @@
"grid": "정규 격자",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "기지국 커버리지",
- "h3Grid": "H3 격자 생성",
- "h3BinPoints": "포인트를 H3 셀로 구간화",
"trajectorySpeed": "궤적 속도",
"detectStops": "정지 지점 감지",
"spaceTimeProximity": "시공간 근접성",
diff --git a/apps/geolibre-desktop/src/i18n/locales/nl.json b/apps/geolibre-desktop/src/i18n/locales/nl.json
index ff7080f3c..05e9531f8 100644
--- a/apps/geolibre-desktop/src/i18n/locales/nl.json
+++ b/apps/geolibre-desktop/src/i18n/locales/nl.json
@@ -2234,8 +2234,6 @@
"grid": "Regelmatig raster",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Dekkingsgebied zendmast",
- "h3Grid": "H3-raster maken",
- "h3BinPoints": "Punten binnen in H3",
"trajectorySpeed": "Trajectsnelheid",
"detectStops": "Stops detecteren",
"spaceTimeProximity": "Ruimte-tijdnabijheid",
diff --git a/apps/geolibre-desktop/src/i18n/locales/pt.json b/apps/geolibre-desktop/src/i18n/locales/pt.json
index e6812924a..074d5d3e8 100644
--- a/apps/geolibre-desktop/src/i18n/locales/pt.json
+++ b/apps/geolibre-desktop/src/i18n/locales/pt.json
@@ -2234,8 +2234,6 @@
"grid": "Grade regular",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Cobertura de estações de célula",
- "h3Grid": "Criar grade H3",
- "h3BinPoints": "Agrupar pontos em H3",
"trajectorySpeed": "Velocidade da trajetória",
"detectStops": "Detectar paradas",
"spaceTimeProximity": "Proximidade espaço-temporal",
diff --git a/apps/geolibre-desktop/src/i18n/locales/ru.json b/apps/geolibre-desktop/src/i18n/locales/ru.json
index 2680e5414..70adaf5c7 100644
--- a/apps/geolibre-desktop/src/i18n/locales/ru.json
+++ b/apps/geolibre-desktop/src/i18n/locales/ru.json
@@ -2320,8 +2320,6 @@
"grid": "Регулярная сетка",
"voronoi": "Вороного / Делоне",
"cellSectors": "Зоны покрытия базовых станций",
- "h3Grid": "Создать сетку H3",
- "h3BinPoints": "Группировать точки в H3",
"trajectorySpeed": "Скорость траектории",
"detectStops": "Определить остановки",
"spaceTimeProximity": "Пространственно-временная близость",
diff --git a/apps/geolibre-desktop/src/i18n/locales/th.json b/apps/geolibre-desktop/src/i18n/locales/th.json
index 2947f7ec8..554468e2e 100644
--- a/apps/geolibre-desktop/src/i18n/locales/th.json
+++ b/apps/geolibre-desktop/src/i18n/locales/th.json
@@ -2192,8 +2192,6 @@
"grid": "กริดสม่ำเสมอ",
"voronoi": "โวโรนอย / เดอโลเน",
"cellSectors": "พื้นที่ครอบคลุมของสถานีฐาน",
- "h3Grid": "สร้างกริด H3",
- "h3BinPoints": "จัดกลุ่มจุดลงกริด H3",
"trajectorySpeed": "ความเร็วตามเส้นทางการเคลื่อนที่",
"detectStops": "ตรวจหาจุดหยุด",
"spaceTimeProximity": "ความใกล้เคียงเชิงพื้นที่และเวลา",
diff --git a/apps/geolibre-desktop/src/i18n/locales/tr.json b/apps/geolibre-desktop/src/i18n/locales/tr.json
index 3ba0ed3cc..25ce3e231 100644
--- a/apps/geolibre-desktop/src/i18n/locales/tr.json
+++ b/apps/geolibre-desktop/src/i18n/locales/tr.json
@@ -2234,8 +2234,6 @@
"grid": "Düzenli ızgara",
"voronoi": "Voronoi / Delaunay",
"cellSectors": "Baz istasyonu kapsama alanı",
- "h3Grid": "H3 ızgarası oluştur",
- "h3BinPoints": "Noktaları H3'e grupla",
"trajectorySpeed": "Güzergah hızı",
"detectStops": "Durakları algıla",
"spaceTimeProximity": "Uzay-zaman yakınlığı",
diff --git a/apps/geolibre-desktop/src/i18n/locales/zh.json b/apps/geolibre-desktop/src/i18n/locales/zh.json
index f23660a6f..c2bd84a3d 100644
--- a/apps/geolibre-desktop/src/i18n/locales/zh.json
+++ b/apps/geolibre-desktop/src/i18n/locales/zh.json
@@ -2191,8 +2191,6 @@
"grid": "规则格网",
"voronoi": "泰森多边形 / 德劳内三角网",
"cellSectors": "基站覆盖扇区",
- "h3Grid": "创建 H3 网格",
- "h3BinPoints": "将点聚合到 H3",
"trajectorySpeed": "轨迹速度",
"detectStops": "检测停留点",
"spaceTimeProximity": "时空邻近性",
diff --git a/apps/geolibre-desktop/src/lib/duckdb-processing.ts b/apps/geolibre-desktop/src/lib/duckdb-processing.ts
index a028d5180..5409a3488 100644
--- a/apps/geolibre-desktop/src/lib/duckdb-processing.ts
+++ b/apps/geolibre-desktop/src/lib/duckdb-processing.ts
@@ -2,6 +2,8 @@ import type { DuckDbCapability, DuckDbGeoJsonSource } from "@geolibre/processing
import type { FeatureCollection } from "geojson";
import { stripAutoFidColumn } from "./duckdb-geometry";
import {
+ ensureA5Extension,
+ ensureDuckDggsExtension,
ensureH3Extension,
ensureSpatialExtension,
getDatabase,
@@ -25,6 +27,8 @@ export function createDuckDbCapability(): DuckDbCapability {
try {
if (names.includes("spatial")) await ensureSpatialExtension(db, connection);
if (names.includes("h3")) await ensureH3Extension(connection);
+ if (names.includes("a5")) await ensureA5Extension(connection);
+ if (names.includes("duck_dggs")) await ensureDuckDggsExtension(connection);
} finally {
await connection.close();
}
diff --git a/apps/geolibre-desktop/src/lib/duckdb-vector-loader.ts b/apps/geolibre-desktop/src/lib/duckdb-vector-loader.ts
index c20bdeb1d..45c20403d 100644
--- a/apps/geolibre-desktop/src/lib/duckdb-vector-loader.ts
+++ b/apps/geolibre-desktop/src/lib/duckdb-vector-loader.ts
@@ -238,30 +238,47 @@ export async function ensureSpatialExtension(
}
}
-let h3ExtensionPromise: Promise