Tile vettoriali dinamiche da PostGIS.

Incolla l'URL di un database e ottieni un URL di tile vettoriali dinamiche che si aggiorna pochi secondi dopo la modifica di una riga. Poi trasforma gli stessi poligoni in geofence che ti avvisano quando arrivano le persone.

Sandbox gratuita, nessuna carta richiesta. Funziona con RDS, Cloud SQL, Supabase, Neon, Crunchy Bridge o il tuo server.

14/8235/5419 e 14/8236/5419 rigenerate in 0,9 s. Le altre 22 tile non sono cambiate.

Dalla stringa di connessione alla mappa in tre passaggi

  1. Incolla l'URL del tuo database

    Verifichiamo la connessione, la versione di PostGIS e i permessi, e ti diciamo se l'URL passa da un pooler che non può trasportare gli aggiornamenti live.

  2. Scegli tabelle e colonne

    Ogni tabella con una colonna geometrica è elencata con SRID, stima delle righe e colonne. Scegli le proprietà da includere nelle tile e l'intervallo di zoom.

  3. Incolla l'URL delle tile nella tua mappa

    Ottieni un URL TileJSON e un template z/x/y con una chiave pubblica, limitata alle origini che consenti. Funziona ovunque funzionino le tile vettoriali.

map.js
import maplibregl from "maplibre-gl";

const map = new maplibregl.Map({
  container: "map",
  style: {
    version: 8,
    sources: {
      parcels: {
        type: "vector",
        url: "https://tiles.mapsocket.com/t/acme/parcels.json?key=pk_live_…",
      },
    },
    layers: [{
      id: "parcels",
      type: "fill",
      source: "parcels",
      "source-layer": "parcels",
      paint: { "fill-color": "#2D6E9E", "fill-opacity": 0.3 },
    }],
  },
});

Le modifiche arrivano sulla mappa senza rigenerare tutto

MapSocket ascolta il tuo database con LISTEN/NOTIFY di Postgres. Quando una riga cambia, vengono riscritte solo le tile che contenevano la sua forma vecchia o nuova. Una modifica di mille righe rigenera ogni tile interessata una sola volta.

  1. Riga confermata

    INSERT, UPDATE o DELETE su una tabella pubblicata

  2. Il trigger invia NOTIFY

    Layer, id della riga, operazione e i vecchi limiti

  3. Raggruppato

    Le raffiche vengono accorpate e deduplicate per tile

  4. Tile ricodificate

    Solo le tile che toccano la geometria vecchia o nuova, a ogni livello di zoom

  5. La tua mappa si aggiorna

    update_complete arriva via SSE; partono anche i webhook

Due modi per restare aggiornati

Live
La dashboard genera un trigger per ogni tabella, usando le tue vere colonne di id e geometria. Lo esegui una volta; gli aggiornamenti arrivano in uno-tre secondi. Richiede una connessione diretta, non un pooler in modalità transaction.
Snapshot
Per ruoli in sola lettura, URL con pooling o database a cui non puoi aggiungere trigger. Rigeneriamo secondo una pianificazione, da ogni 5 minuti a una volta a settimana. Passa al live quando vuoi.
trigger.sql
-- Generated for public.parcels; run once as the table owner
CREATE TRIGGER mapsocket_parcels
  AFTER INSERT OR UPDATE OR DELETE ON public.parcels
  FOR EACH ROW EXECUTE FUNCTION
    mapsocket_notify_tile_update('parcels', 'id', 'geom');
live-refresh.js
const tiles = "https://tiles.mapsocket.com/t/acme/parcels/{z}/{x}/{y}.pbf?key=pk_live_…";
const events = new EventSource("https://tiles.mapsocket.com/t/acme/parcels/events?key=pk_live_…");

// Sent after tilefeed rewrites the affected tiles
events.addEventListener("update_complete", (e) => {
  const { tiles_updated, affected_zooms } = JSON.parse(e.data);
  map.getSource("parcels").setTiles([`${tiles}&_t=${Date.now()}`]);
});

Geofencing sugli stessi dati

Invia una posizione e ricevi le geofence in cui si trova e cosa è cambiato rispetto all'ultima. Eventi di ingresso, uscita e permanenza, visite ai luoghi, cambi di paese e regione e arrivi dei viaggi vengono inviati ai tuoi webhook, firmati per poterti fidare.

Da dove arrivano le geofence

  • Sincronizzate da una tabella PostGIS. Punta a public.delivery_zones, scegli le colonne di id e tag, e i poligoni restano allineati alla tabella. Punti e linee possono essere trasformati in zone con un buffer.
  • Disegnate nella dashboard. Cerchi e poligoni sulla mappa, con un tempo di permanenza per ogni geofence.
  • Create tramite l'API. Upsert per tag ed externalId, oppure importa GeoJSON o un CSV in formato Radar.
POST /v1/track
Entra una posizione, escono eventi di geofence
GET /v1/context
Quali geofence contengono un punto, senza salvare stato
GET /v1/search/geofences
Geofence più vicine per distanza e tag
POST /v1/trips
ETA, avvicinamento e arrivo per consegne e ritiri

Ogni track indica anche il luogo (da OpenStreetMap), il paese e la regione, ed esegue controlli antifrode su salti impossibili e posizioni simulate. Le chiavi pubbliche possono fare tracking da browser e telefoni; le chiavi segrete gestiscono le geofence e leggono gli eventi. Le posizioni poco precise vengono salvate ma non generano eventi.

Richiesta
curl https://api.mapsocket.com/v1/track \
  -H "Authorization: pk_live_…" \
  -H "Content-Type: application/json" \
  -d '{"userId":"driver-118","latitude":40.7411,"longitude":-73.9897,"accuracy":12}'
Risposta
{
  "user": {
    "userId": "driver-118",
    "geofenceIds": ["9c1e5a40-…"],
    "lastSeenAt": "2026-11-04T14:02:11Z"
  },
  "events": [{
    "type": "user.entered_geofence",
    "userId": "driver-118",
    "geofence": {
      "tag": "loading-bay",
      "externalId": "flatiron-02",
      "description": "Flatiron loading bay"
    },
    "confidence": 3,
    "createdAt": "2026-11-04T14:02:11Z"
  }]
}

Ogni evento viene inviato anche ai tuoi webhook con un header MapSocket-Signature (HMAC-SHA256). Verifica una firma

Il confronto

Se ti servono tile generate a ogni richiesta da funzioni SQL parametrizzate, pg_tileserv o Martin sono la scelta migliore. MapSocket è per tabelle che cambiano durante la giornata e mappe che devono stare al passo.

Approccio Come vengono create le tile Quando una riga cambia Cosa devi gestire
pg_tileserv Una query SQL per ogni richiesta di tile, al volo Visibile alla richiesta successiva, ma ogni richiesta colpisce il tuo database Un server accanto al tuo database
Martin Al volo da PostGIS, o da file MBTiles e PMTiles Live in modalità dinamica, al costo delle query; i file vanno rigenerati Un server, più una tua cache davanti
Tippecanoe con un cron Una rigenerazione completa in MBTiles o PMTiles Aspetti la prossima esecuzione, che rigenera tutto Uno scheduler, uno storage e una CDN
MapSocket MBTiles pre-generati, serviti dalla cache Solo le tile interessate vengono rigenerate, in pochi secondi Niente. Incolla un URL.

Il tuo database, le tue regole

Ci affidi una stringa di connessione, quindi ecco esattamente cosa ne facciamo.

Che accesso al mio database serve a MapSocket?

Un ruolo che possa fare SELECT sulle tabelle che pubblichi. Consigliamo un ruolo dedicato in sola lettura; la dashboard ti fornisce le istruzioni CREATE ROLE e GRANT esatte. Per gli aggiornamenti live sei tu (non noi) a eseguire una piccola funzione trigger su ogni tabella, il che richiede una sola volta i diritti di proprietario della tabella.

Come viene salvata la mia stringa di connessione?

Cifrata con AES-256-GCM prima di toccare il nostro database, con la chiave conservata al di fuori di esso. Viene decifrata solo all'interno del worker che genera le tue tile e non viene mai più mostrata nella dashboard o nell'API: solo host, database e utente.

Posso mettere i vostri IP in allowlist?

Sì. Tutte le connessioni al tuo database partono da un insieme fisso di IP di uscita per regione, elencati nella dashboard accanto a ogni connessione. Aggiungili al tuo security group o a pg_hba.conf e non serve aprire nient'altro.

La connessione è cifrata?

Ci colleghiamo con sslmode=require per impostazione predefinita e rifiutiamo le connessioni in chiaro, a meno che tu non lo disattivi esplicitamente per una rete privata.

Copiate le mie tabelle?

No. Le righe vengono lette e codificate direttamente in tile vettoriali; l'archivio di tile (MBTiles) è l'unica copia che conserviamo. Elimina una sorgente e le sue tile vengono eliminate con lei. Le geofence sincronizzate da una tabella vengono salvate come geometrie più le colonne che scegli.

Posso proteggere il mio account con l'autenticazione a due fattori?

Sì. Attivala in Impostazioni e sicurezza: scansiona un codice QR con qualsiasi app di autenticazione (Google Authenticator, 1Password, Authy, Microsoft Authenticator) e da quel momento per accedere servirà un codice di 6 cifre oltre alla password. Ricevi dieci codici di recupero monouso nel caso perdessi il telefono.

Prezzi

Paghi per le sorgenti che usi e le richieste che servi. Il tuo database resta tuo; non fatturiamo mai in base alle righe.

Sandbox

Provalo su un progetto personale

$0 / mese

  • 1 database, 1 sorgente di tile
  • Rigenerazione ogni 24 ore
  • 50.000 richieste di tile / mese
  • 100 geofence, 100 utenti tracciati
Inizia gratis

Starter

Per un prodotto con una mappa dentro

$29 / mese

  • Aggiornamenti live da LISTEN/NOTIFY
  • 5 sorgenti di tile, 2 database
  • 1 mln di richieste di tile / mese
  • 5.000 geofence, 5.000 utenti tracciati
  • Webhook
  • Download MBTiles
Scegli Starter

Pro

Per team i cui dati si muovono tutto il giorno

$149 / mese

  • Tutto quello che c'è in Starter
  • 25 sorgenti, 10 database
  • 10 mln di richieste di tile / mese
  • Geofence sincronizzate da PostGIS
  • Dominio personalizzato per le tile
  • Export PMTiles per hosting statico
Scegli Pro

Enterprise

Worker dedicati, nel tuo cloud o nel nostro

Parliamone

  • Worker tilefeed dedicati
  • VPC peering / PrivateLink
  • SSO e audit log
  • SLA di uptime del 99,95%
Contattaci
Confronto dei limiti dei piani
Limite SandboxStarterProEnterprise
Sorgenti di tile 1525Illimitato
Database 1210Illimitato
Richieste di tile 50k / mese1M / mese10M / mesePersonalizzato
Geofence 1005000100.000Illimitato
Utenti tracciati 100 / mese5k / mese50k / mesePersonalizzato
Mappe georeferenziate 110100Personalizzato
Aggiornamenti Rigenerazione ogni 24 oreLive, pochi secondi dopo una scritturaLive, pochi secondi dopo una scritturaLive, pochi secondi dopo una scrittura
Dominio personalizzato per le tile NoNoSìSì

Se superi il limite di tile su un piano a pagamento, le tile continuano a essere servite; ti scriviamo prima che cambi qualcosa. La Sandbox si mette in pausa al raggiungimento del limite.

Domande

Funziona con Supabase, Neon, RDS o Cloud SQL?

Sì, con un'avvertenza: gli aggiornamenti live usano LISTEN di Postgres, che non funziona attraverso i pooler in modalità transaction. Usa la stringa di connessione diretta (porta 5432 su Supabase, l'host senza pooling su Neon). Se puoi usare solo un URL con pooling, scegli la modalità snapshot e rigenereremo secondo una pianificazione.

Quanto sono veloci gli aggiornamenti live?

Di solito da uno a tre secondi dal COMMIT a una tile aggiornata. Le notifiche vengono raggruppate in piccoli batch, quindi una modifica massiva di 10.000 righe rigenera ogni tile interessata una volta invece di 10.000.

Quali librerie di mappe possono usare le tile?

Qualsiasi cosa legga Mapbox Vector Tiles e TileJSON: MapLibre GL, Mapbox GL, OpenLayers, Leaflet con un plugin per tile vettoriali, deck.gl, QGIS.

Posso andarmene e gestirlo da solo?

Sì. MapSocket esegue tilefeed, che ha licenza MIT. Ogni sorgente ha un pulsante Export config che ti dà il TOML di tilefeed, e puoi scaricare gli MBTiles o un archivio PMTiles in qualsiasi momento.

Cosa conta come utente tracciato?

Un userId distinto che ha inviato almeno una chiamata a /v1/track nel mese. Le chiamate a /v1/context e la ricerca di geofence non vengono conteggiate.

Puntalo su una tabella che hai già.

La maggior parte delle persone ha un URL di tile live entro cinque minuti dalla registrazione.