Tots els articles

Construint un bessó digital del Val d'Aran

Publicat 7 d’ag. del 20267 min de lectura
  • Enginyeria
  • Muntanya
  • SIG

Idees clau

  • aran-twin ajunta diversos dels altres projectes de l'estudi — Guidaran, una instància pròpia d'Open-Meteo — com a fonts de dades en directe per a un únic model geoespacial del Val d'Aran.
  • Cada font de dades externa (ICGC, INE, Cadastre, OSM, Lauegi) és en una etapa diferent de maduresa, i les pròpies regles del projecte prohibeixen inventar dades de farciment per tapar els forats.
  • El pipeline de splats gaussians per dron — GPU efímera, COLMAP, entrenament de l'splat, lliurament per CDN — està totalment construït però encara no té captures reals per renderitzar.

El Val d'Aran és la raó per la qual Maladeta Studio existeix on existeix. La majoria del que construïm per a altres viu en un altre lloc — un flux de reserves per a un resort, una capa de traducció per a un museu, un motor de comunicacions que enruta missatges en silenci darrere les escenes. aran-twin és el primer projecte en què construïm un model del propi lloc: un bessó digital geoespacial de la vall, que combina terreny 3D, dades municipals i ambientals, zones d'exposició a allaus, intel·ligència de camins, clima en directe i — la part que més m'entusiasma — reconstruccions 3D amb splats gaussians a partir de les nostres pròpies captures per dron.

Escric sobre això ara, amb unes sis setmanes d'historial de git, en lloc d'esperar a un llançament polit. En part perquè l'arquitectura val la pena documentar-la mentre és fresca, i en part perquè crec que hi ha més valor a mostrar com és de debò un projecte de dades jove i ambiciós que a fingir que va arribar acabat. Bona part d'aran-twin avui és infraestructura real i funcional que apunta a fonts de dades que encara no estan del tot connectades. Això no és un estat de fracàs — és simplement com es veu la setmana sis.

1. Una vall feta de molts altres projectes

La feina d'aran-twin és respondre bé a una sola pregunta: què està passant, ara mateix, en aquest lloc concret? "Aquest lloc" està definit amb precisió — una capsa delimitadora al voltant del Val d'Aran, centrada a prop de Vielha, que cobreix els nou municipis de la vall: Arres, Bausen, Bossòst, Canejan, Es Bòrdes, Les, Naut Aran, Vielha e Mijaran, i Vilamòs.

El que fa satisfactori construir-lo és que és un punt de convergència de coses que l'estudi ja estava fent. Guidaran, l'app de turisme que vaig construir abans que existís Maladeta Studio (vaig escriure sobre el seu origen al post "Fundant Maladeta Studio"), ara és simplement una altra font de dades que alimenta el bessó — les dades de camins i punts d'interès flueixen a través de la seva pròpia API en lloc de viure en el seu propi sitjar. La instància pròpia d'Open-Meteo que gestionem per al clima n'és una altra. Cap de les dues integracions va requerir inventar res de nou; van requerir tractar una app en producció com a infraestructura d'una de més gran.

La resta del pipeline és més convencional però no menys real: una capa d'ETL en Python extreu dades de l'ICGC (l'institut cartogràfic de Catalunya), l'INE (l'institut d'estadística d'Espanya), el Cadastre, OpenStreetMap i Lauegi (el servei de butlletí d'allaus de la regió), i les diposita totes a PostGIS. Des d'allà se serveixen de dues maneres — teseŀles de mapa vectorials a través de Martin, i una API en Go per a tot allò que necessiti consultes estructurades en lloc de teseŀles — totes dues consumides per un frontend en React i MapLibre. Les gravacions del dron segueixen un pipeline completament diferent, que acaba convertint-se en splats gaussians en un CDN:

ICGC ─────┐
INE ──────┤
Catastro ─┤      ┌─────────────┐      ┌───────────┐
OSM ──────┼─────▶│ Python ETL  │─────▶│  PostGIS  │
Lauegi ───┤      └─────────────┘      └─────┬─────┘
Guidaran ─┤                                  │
Weather ──┘                       ┌──────────┴──────────┐
                                   ▼                     ▼
                                Martin                Go API
                          (vector tiles)      (structured queries)
                                   └──────────┬──────────┘
                                              ▼
                                 React + MapLibre frontend

Drone footage ─▶ ephemeral GPU instance ─▶ COLMAP (SfM / camera pose)
                                                │
                                                ▼
                                  Gaussian-splat training
                                                │
                                                ▼
                                .spz / .ksplat model file
                                                │
                                                ▼
                        DigitalOcean Spaces (CDN) ─▶ frontend streams & renders

2. Dades desiguals, a propòsit, no per accident

Si miressis el codi font d'aran-twin avui esperant un sistema net i funcionant de manera uniforme, et decebries — i val la pena dir-ho sense embuts en lloc de maquillar-ho. Cada font de dades externa de la qual depèn el bessó és en una etapa diferent de ser realment a punt:

  • Els límits municipals de l'ICGC — en directe, funcionant, amb atribució de font. L'única peça que pots assenyalar ara mateix.
  • Les dades de població de l'INE — l'adaptador està escrit, però roman inactiu fins que tinguem una URL d'exportació aprovada pel mateix INE.
  • Les dades de parcel·les i edificis del Cadastre — el mateix tipus de problema: la integració existeix, però només s'activa un cop es té a la mà un paquet de dades municipal validat.
  • Camins, carreteres i POIs d'OpenStreetMap — la qualitat d'OSM varia molt segons qui hagi cartografiat per última vegada un camí donat, així que això només s'activa després que passi un pas de validació de qualitat de dades basat en Geofabrik.
  • Les dades d'allaus de Lauegi — la informació de butlletins i zones té adaptadors reals i funcionant avui. L'API més granular d'accidents i observacions està construïda però és darrere d'un token de servei que encara no tenim.
  • Guidaran i la instància de clima — totes dues funcionen avui, a través d'adaptadors d'API pública, amb atribució, perquè totes dues són nostres i ja estaven en producció abans que existís aran-twin.

Les regles de contribució del projecte són explícites sobre això, i podria ser la millor decisió d'enginyeria incorporada a aran-twin fins ara: no es permet inventar valors de farciment per a fets del món real — credencials, codis estadístics oficials, identificadors d'instàncies GPU, preus, esquemes de dades. El que és desconegut rep una convenció explícita de TODO en lloc d'una falsificació d'aparença plausible. On sí que existeix un contracte real — l'API de Guidaran, l'API de la instància de clima — està fixat i documentat, no simplement assumit com que continuarà funcionant perquè va funcionar l'última vegada que es va comprovar.

Seria fàcil falsejar això. Els números de població en particular són el tipus de cosa que podries al·lucinar de manera plausible i ningú fora de l'INE ho notaria de seguida. La disciplina consisteix a negar-s'hi, fins i tot sota la pressió silenciosa de fer que una demo sembli més acabada del que és.

3. Què és en realitat un splat gaussià, i per què esperem les gravacions del dron

El Gaussian splatting és la part d'aquest projecte que em va fer voler escriure'n abans que estigués a punt. És una tècnica de reconstrucció 3D relativament recent — el successor pràctic de la fotogrametria — que representa una escena no com una malla amb textura sinó com milions de petits "splats" 3D: taques toves, cadascuna amb la seva pròpia posició, color, opacitat i orientació. Renderitzats junts, des de qualsevol punt de vista, produeixen alguna cosa més propera a una fotografia que a un model 3D, sense les costures i errors de geometria que abans delataven la fotogrametria.

Per a aran-twin, el pipeline previst és: les gravacions de dron d'una zona concreta de la vall passen per ffmpeg per al processament, després per COLMAP per a l'estimació de la posa de càmera i structure-from-motion, després pel mateix entrenament de l'splat, tot això executant-se en una instància GPU efímera al núvol — que s'aixeca a demanda, es factura només mentre corre, i es destrueix quan acaba. El resultat és un model d'splat, en format .spz o .ksplat, pujat a un CDN a DigitalOcean Spaces, des d'on el frontend el transmet i renderitza directament.

Aquest pipeline existeix avui. El que encara no existeix és una captura de dron que l'alimenti — a data d'aquest post, les gravacions de dron figuren internament com "no disponibles, pendents de manifest de captura amb llicència", que és una manera precisa de dir que encara no hem fet el vol real, amb la cobertura legal corresponent. Així que no hi ha cap splat de la vall per ensenyar-te. Hi ha infraestructura real, provada i a punt, apuntant a unes gravacions que no existeixen. Prefereixo dir-t'ho clarament abans que deixar que un diagrama doni a entendre el contrari.

4. Mantenir la llengua pròpia de la vall al mapa

Els nou municipis del Val d'Aran — Arres, Bausen, Bossòst, Canejan, Es Bòrdes, Les, Naut Aran, Vielha e Mijaran, i Vilamòs — apareixen al bessó exactament així: en aranès, la varietat occitana pròpia de la vall, no traduïts al castellà ni al català per comoditat. Aquesta és una regla deliberada, no un descuit, coherent amb alguna cosa que a l'estudi li ha importat en altres llocs, incloses eines que hem construït específicament al voltant de la llengua aranesa. Un bessó digital de la vall que renomenés els propis llocs de la vall en la llengua d'algú altre seria una mena de traïció estranya per a un estudi amb seu aquí. És un detall petit en un codi ple de problemes sense resoldre més grans, però és un que vam encertar des del primer dia en lloc de prometre arreglar-lo més endavant.

aran-twin té, segons el seu propi historial de git, unes sis setmanes de vida mentre escric això. La major part de la part visualment més impressionant — els splats — encara no existeix en cap forma pública, i la meitat de les capes de dades estan connectades a fonts que encara no han dit que sí. El que sí que existeix és un pipeline real, una disciplina real de no falsejar el que no tenim, i una raó real per continuar: aquesta és la vall on treballem, representada amb honestedat, una font de dades confirmada cada vegada.