← Tutte le idee Gestionali per aziende

Analisi LiDAR per l'archeologia

Software che trova tracce archeologiche nei rilievi del terreno

Incasso mensile: 242 USD (fonte indicata nella scheda)

Cosa fa

Programma che analizza con l'AI i dati LiDAR (rilievi laser del terreno) e trova in pochi minuti possibili resti archeologici, per enti, studi di archeologia e ricercatori.

Come guadagna

Incasso annuo dichiarato di circa 2.900 $ nell'annuncio di vendita su Microns, che verifica i dati. Il nome del progetto non è pubblico.

Rendilo tuo

  • L'Italia ha più patrimonio archeologico di chiunque: università e soprintendenze sono clienti naturali.
  • Lo stesso tipo di analisi per altri usi: frane, alberi caduti, abusi edilizi.

Le frasi da scrivere all'AI

1. Base del sito e grafica

Crea un'app web in italiano chiamata "Rilievo Nascosto": aiuta archeologi, studi professionali ed enti a vedere possibili strutture sepolte nei rilievi laser del terreno (LiDAR): visualizzazioni che fanno risaltare i piccoli dislivelli e segnalazione delle anomalie da verificare. Usa React, Vite, TypeScript e Tailwind CSS.

Pagine da creare:
1. Pagina iniziale con esempi prima/dopo e prezzi per enti e studi
2. Registrazione e accesso
3. Nuovo progetto: carica il modello del terreno (GeoTIFF) o scegli l'area
4. Visualizzatore con le diverse elaborazioni e la mappa
5. Anomalie segnate, note e report PDF

Stile: scientifico e pulito: sfondo bianco, marrone terra #78350F, verde muschio #3F6212, carattere "IBM Plex Sans", mappa grande con i livelli a destra. Nessuna immagine generica di stock.

Tutto deve funzionare perfettamente da telefono. Tutti i testi in italiano, chiari e senza parole tecniche.

2. Database, account e sicurezza

Collega il progetto a Supabase e attiva la registrazione con email e password.

Crea queste tabelle:
- "progetti": nome, area, file del modello del terreno nello Storage, sistema di coordinate, collegati all'utente
- "anomalie": posizione, forma, tipo ipotizzato (tumulo, fossato, strada, muro), affidabilità, note, stato (da verificare, verificata, scartata)

Regole di sicurezza obbligatorie:
- ogni utente o ente vede solo i suoi progetti e anomalie
- le posizioni delle anomalie non sono mai pubbliche

Usa esattamente il codice SQL che trovi nei "Dettagli tecnici" di questa scheda: eseguilo nel SQL Editor di Supabase prima di continuare, poi collega le pagine alle tabelle.

3. Far risaltare i dislivelli

L'utente carica un modello digitale del terreno (DTM) in GeoTIFF, per esempio dai dati LiDAR del Geoportale Nazionale o della sua regione. Il file si legge nel browser con geotiff.js e si mostrano più elaborazioni:
- ombreggiatura da 8 direzioni del sole (codice nei Dettagli tecnici);
- rilievo locale: differenza tra il terreno e la sua media dei dintorni, che fa risaltare dossi e fossi di pochi centimetri;
- pendenza.

L'utente scorre tra le elaborazioni, regola il contrasto e segna sulla mappa le anomalie con forma e tipo ipotizzato. Un'analisi automatica facoltativa propone zone con forme regolari (cerchi, linee dritte) da controllare: sono solo indizi.

4. Anomalie e report

Le anomalie hanno stato (da verificare, verificata sul campo, scartata), affidabilità e note. Esportazione in GeoJSON e in un report PDF con mappe e schede delle anomalie.

Avviso legale ben visibile: "Le anomalie sono ipotesi da verificare. In Italia ogni ricerca sul campo richiede l'autorizzazione della Soprintendenza: non scavare e non usare metal detector". Le posizioni non vengono mai rese pubbliche.

5. Pagamenti con Stripe

Aggiungi un abbonamento a 49 € al mese per studio o ente. Gratis l'utente ha: un progetto fino a 1 km². Con il piano Pro sblocca: progetti illimitati, aree grandi, analisi automatica delle forme, report ed esportazione GeoJSON.

A pagamento riuscito il webhook porta l'utente al piano Pro; se l'abbonamento viene disdetto o non rinnovato lo riporta al piano gratuito.

Per la sessione di pagamento e il webhook segui la guida "Pagamenti con Stripe" di Fattibile.

6. Controlli specifici di questo progetto

Oltre ai controlli della guida "Controllo finale", verifica in particolare:
1. Coordinate: carica un file di un'area nota e controlla che le anomalie esportate in GeoJSON cadano nel punto giusto su una mappa esterna.
Correggi quello che non va e scrivimi cosa hai cambiato.

Dettagli tecnici

Ombreggiatura del terreno

Calcola l'ombreggiatura (hillshade) da una griglia di altezze: simula il sole che illumina il terreno da una direzione, facendo vedere anche i piccoli rilievi.

// altezze: griglia di quote in metri (righe x colonne), cella: dimensione del pixel in metri
export function ombreggiatura(
  altezze: Float32Array, colonne: number, righe: number, cella: number,
  azimutGradi = 315, altezzaSoleGradi = 35, esagerazione = 2,
): Uint8ClampedArray {
  const risultato = new Uint8ClampedArray(colonne * righe);
  const zenit = ((90 - altezzaSoleGradi) * Math.PI) / 180;
  const azimut = ((360 - azimutGradi + 90) * Math.PI) / 180;
  const z = (r: number, c: number) => altezze[r * colonne + c] * esagerazione;

  for (let r = 1; r < righe - 1; r++) {
    for (let c = 1; c < colonne - 1; c++) {
      // Pendenze nelle due direzioni (metodo di Horn)
      const dzdx = ((z(r - 1, c + 1) + 2 * z(r, c + 1) + z(r + 1, c + 1)) -
                    (z(r - 1, c - 1) + 2 * z(r, c - 1) + z(r + 1, c - 1))) / (8 * cella);
      const dzdy = ((z(r + 1, c - 1) + 2 * z(r + 1, c) + z(r + 1, c + 1)) -
                    (z(r - 1, c - 1) + 2 * z(r - 1, c) + z(r - 1, c + 1))) / (8 * cella);
      const pendenza = Math.atan(Math.hypot(dzdx, dzdy));
      const esposizione = Math.atan2(dzdy, -dzdx);
      const luce = Math.cos(zenit) * Math.cos(pendenza) +
                   Math.sin(zenit) * Math.sin(pendenza) * Math.cos(azimut - esposizione);
      risultato[r * colonne + c] = Math.max(0, Math.round(255 * luce));
    }
  }
  return risultato;   // valori 0-255 da disegnare in scala di grigi
}

Anomalie con posizione

Le anomalie di ogni progetto con le coordinate, e la query che le esporta in GeoJSON pronto per i programmi GIS.

create table progetti (
  id uuid primary key default gen_random_uuid(),
  utente_id uuid not null references auth.users(id) on delete cascade,
  nome text not null,
  dtm_path text not null,
  epsg int not null default 32632            -- sistema di coordinate (es. UTM 32N)
);

create table anomalie (
  id uuid primary key default gen_random_uuid(),
  progetto_id uuid not null references progetti(id) on delete cascade,
  utente_id uuid not null references auth.users(id) on delete cascade,
  lon double precision not null,
  lat double precision not null,
  tipo text not null check (tipo in ('tumulo', 'fossato', 'strada', 'muro', 'altro')),
  affidabilita int not null check (affidabilita between 1 and 5),
  stato text not null default 'da_verificare' check (stato in ('da_verificare', 'verificata', 'scartata')),
  note text not null default ''
);

alter table progetti enable row level security;
create policy "le mie righe" on progetti
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

alter table anomalie enable row level security;
create policy "le mie righe" on anomalie
  for all using (auth.uid() = utente_id) with check (auth.uid() = utente_id);

-- Esportazione in GeoJSON
select jsonb_build_object(
  'type', 'FeatureCollection',
  'features', coalesce(jsonb_agg(jsonb_build_object(
    'type', 'Feature',
    'geometry', jsonb_build_object('type', 'Point', 'coordinates', jsonb_build_array(lon, lat)),
    'properties', jsonb_build_object('tipo', tipo, 'affidabilita', affidabilita, 'stato', stato, 'note', note)
  )), '[]'::jsonb)
) as geojson
from anomalie
where progetto_id = 'ID-PROGETTO';

Pezzi comuni a tutti i progetti

Glossario

Storage
Lo spazio di Supabase dove si salvano i file, come foto e audio, con le sue regole di accesso.
JSONB
Un tipo di colonna che contiene dati strutturati flessibili, come un piccolo documento.
LiDAR
Un rilievo fatto con un laser da aereo o drone che misura la forma del terreno anche sotto gli alberi.
DTM
Modello digitale del terreno: una griglia con l'altezza del suolo in ogni punto, senza alberi ed edifici.
GeoJSON
Un formato standard per scambiare punti e forme geografiche tra programmi di mappe.