feat: add Geoportal module with MapLibre GL JS + Martin vector tiles

Phase 1 of the geoportal implementation:

Infrastructure:
- Martin vector tile server in docker-compose (port 3010)
- PostGIS setup SQL for GisUat: native geom column, Esri→PostGIS
  trigger, GiST index, gis_uats view for Martin auto-discovery

Geoportal module (src/modules/geoportal/):
- map-viewer.tsx: MapLibre GL JS canvas with OSM base, Martin MVT
  sources (gis_uats, gis_terenuri, gis_cladiri), click-to-inspect,
  zoom-level-aware layer visibility, layer styling
- layer-panel.tsx: collapsible sidebar with layer toggles
- geoportal-module.tsx: standalone page wrapper
- Module registered in config/modules.ts, flags.ts, i18n

ParcelSync integration:
- 6th tab "Harta" with lazy-loaded MapViewer (ssr: false)
- Centered on selected UAT

Dependencies: maplibre-gl v5.21.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
AI Assistant
2026-03-23 14:21:37 +02:00
parent 53595fdf94
commit c297a2c5f7
15 changed files with 1227 additions and 2 deletions
+8
View File
@@ -122,6 +122,14 @@ export const DEFAULT_FLAGS: FeatureFlag[] = [
category: "module",
overridable: true,
},
{
key: "module.geoportal",
enabled: true,
label: "Geoportal",
description: "Harta interactiva cu parcele, cladiri si limite UAT",
category: "module",
overridable: true,
},
// System flags
{
+2
View File
@@ -16,6 +16,7 @@ import { aiChatConfig } from "@/modules/ai-chat/config";
import { hotDeskConfig } from "@/modules/hot-desk/config";
import { visualCopilotConfig } from "@/modules/visual-copilot/config";
import { parcelSyncConfig } from "@/modules/parcel-sync/config";
import { geoportalConfig } from "@/modules/geoportal/config";
/**
* Toate configurările modulelor ArchiTools, ordonate după navOrder.
@@ -34,6 +35,7 @@ export const MODULE_CONFIGS: ModuleConfig[] = [
tagManagerConfig, // navOrder: 40 | tools
miniUtilitiesConfig, // navOrder: 41 | tools
parcelSyncConfig, // navOrder: 42 | tools
geoportalConfig, // navOrder: 43 | tools
promptGeneratorConfig, // navOrder: 50 | ai
aiChatConfig, // navOrder: 51 | ai
visualCopilotConfig, // navOrder: 52 | ai