Teselas vectoriales dinámicas desde PostGIS.

Pega la URL de una base de datos y obtén una URL de teselas vectoriales dinámicas que se actualiza segundos después de que cambie una fila. Luego convierte esos mismos polígonos en geocercas que te avisan cuando llega la gente.

Sandbox gratis, sin tarjeta. Funciona con RDS, Cloud SQL, Supabase, Neon, Crunchy Bridge o tu propio servidor.

14/8235/5419 y 14/8236/5419 renderizadas de nuevo en 0,9 s. Las otras 22 teselas no se movieron.

De la cadena de conexión al mapa en tres pasos

  1. Pega la URL de tu base de datos

    Comprobamos la conexión, la versión de PostGIS y los permisos, y te avisamos si la URL pasa por un pooler que no puede transmitir actualizaciones en vivo.

  2. Elige tablas y columnas

    Cada tabla con una columna de geometría aparece con su SRID, una estimación de filas y sus columnas. Elige las propiedades que deben ir en las teselas y el rango de zoom.

  3. Pega la URL de teselas en tu mapa

    Obtienes una URL TileJSON y una plantilla z/x/y con una clave pública, restringida a los orígenes que permitas. Funciona en cualquier sitio donde funcionen las teselas vectoriales.

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 },
    }],
  },
});

Los cambios llegan al mapa sin reconstruir

MapSocket escucha tu base de datos con LISTEN/NOTIFY de Postgres. Cuando cambia una fila, solo se reescriben las teselas que contenían su forma antigua o nueva. Una edición de mil filas vuelve a renderizar cada tesela afectada una sola vez.

  1. Fila confirmada

    INSERT, UPDATE o DELETE en una tabla publicada

  2. El trigger envía NOTIFY

    Capa, id de fila, operación y los límites anteriores

  3. Agrupado

    Las ráfagas se agrupan y se deduplican por tesela

  4. Teselas recodificadas

    Solo las teselas que tocan la geometría antigua o nueva, en cada zoom

  5. Tu mapa se actualiza

    update_complete llega por SSE; los webhooks también se disparan

Dos formas de mantenerte al día

En vivo
El panel genera un trigger para cada tabla, con tus columnas reales de id y geometría. Lo ejecutas una vez; las actualizaciones llegan en uno a tres segundos. Necesita una conexión directa, no un pooler en modo transacción.
Snapshot
Para roles de solo lectura, URL con pooling o bases de datos a las que no puedes añadir triggers. Reconstruimos según un horario, desde cada 5 minutos hasta una vez por semana. Cambia a en vivo cuando quieras.
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 sobre los mismos datos

Envía una ubicación y recibe las geocercas en las que está y lo que ha cambiado desde la anterior. Los eventos de entrada, salida y permanencia, las visitas a lugares, los cambios de país y región y las llegadas de viajes van a tus webhooks, firmados para que puedas confiar en ellos.

De dónde salen las geocercas

  • Sincronizadas desde una tabla PostGIS. Apunta a public.delivery_zones, elige las columnas de id y de tag, y los polígonos se mantienen al día con la tabla. Los puntos y las líneas se pueden convertir en zonas con un buffer.
  • Dibujadas en el panel. Círculos y polígonos sobre el mapa, con un tiempo de permanencia por geocerca.
  • Creadas a través de la API. Upsert por tag y externalId, o importa GeoJSON o un CSV en formato Radar.
POST /v1/track
Entra una ubicación, salen eventos de geocerca
GET /v1/context
Qué geocercas contienen un punto, sin guardar estado
GET /v1/search/geofences
Geocercas más cercanas por distancia y tag
POST /v1/trips
ETA, aproximación y llegada para entregas y recogidas

Cada track también identifica el lugar (de OpenStreetMap), el país y la región, y detecta fraude por saltos imposibles y ubicaciones simuladas. Las claves públicas pueden hacer tracking desde navegadores y móviles; las claves secretas gestionan geocercas y leen eventos. Las posiciones de baja precisión se guardan pero no disparan eventos.

Petición
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}'
Respuesta
{
  "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"
  }]
}

Cada evento también se envía a tus webhooks con una cabecera MapSocket-Signature (HMAC-SHA256). Verificar una firma

Cómo se compara

Si necesitas teselas generadas en cada petición a partir de funciones SQL parametrizadas, pg_tileserv o Martin encajan mejor. MapSocket es para tablas que cambian a lo largo del día y mapas que tienen que seguirles el ritmo.

Enfoque Cómo se generan las teselas Cuando cambia una fila Qué tienes que operar
pg_tileserv Una consulta SQL por petición de tesela, al vuelo Visible en la siguiente petición, pero cada petición golpea tu base de datos Un servidor junto a tu base de datos
Martin Al vuelo desde PostGIS, o desde archivos MBTiles y PMTiles En vivo en modo dinámico, al coste de las consultas; los archivos necesitan reconstruirse Un servidor, más tu propia caché delante
Tippecanoe con un cron Una reconstrucción completa a MBTiles o PMTiles Esperar a la siguiente ejecución, que lo reconstruye todo Un planificador, almacenamiento y una CDN
MapSocket MBTiles precompilados, servidos desde caché Solo se vuelven a renderizar las teselas afectadas, en segundos Nada. Pega una URL.

Tu base de datos, tus reglas

Nos das una cadena de conexión, así que esto es exactamente lo que hacemos con ella.

¿Qué acceso necesita MapSocket a mi base de datos?

Un rol que pueda hacer SELECT sobre las tablas que publicas. Recomendamos un rol dedicado de solo lectura; el panel te da las sentencias CREATE ROLE y GRANT exactas. Para las actualizaciones en vivo, eres tú (no nosotros) quien ejecuta una pequeña función trigger en cada tabla, lo que requiere permisos de propietario de la tabla una sola vez.

¿Cómo se guarda mi cadena de conexión?

Cifrada con AES-256-GCM antes de llegar a nuestra base de datos, con la clave guardada fuera de ella. Solo se descifra dentro del worker que construye tus teselas, y nunca vuelve a mostrarse en el panel ni en la API, solo el host, la base de datos y el usuario.

¿Puedo añadir vuestras IP a una allowlist?

Sí. Todas las conexiones a tu base de datos salen de un conjunto fijo de IP de salida por región, que aparecen en el panel junto a cada conexión. Añádelas a tu grupo de seguridad o a pg_hba.conf y no hace falta abrir nada más.

¿La conexión está cifrada?

Nos conectamos con sslmode=require por defecto y rechazamos conexiones en texto plano, salvo que lo desactives explícitamente para una red privada.

¿Copiáis mis tablas?

No. Las filas se leen y se codifican directamente en teselas vectoriales; el archivo de teselas (MBTiles) es la única copia que guardamos. Si eliminas una fuente, sus teselas se eliminan con ella. Las geocercas que sincronizas desde una tabla se guardan como geometrías más las columnas que elijas.

¿Puedo proteger mi cuenta con autenticación en dos pasos?

Sí. Actívala en Ajustes y seguridad: escanea un código QR con cualquier app de autenticación (Google Authenticator, 1Password, Authy, Microsoft Authenticator) y a partir de ahí iniciar sesión pedirá un código de 6 dígitos además de tu contraseña. Recibes diez códigos de recuperación de un solo uso por si pierdes el móvil.

Precios

Paga por las fuentes que ejecutas y las peticiones que sirves. Tu base de datos sigue siendo tuya; nunca cobramos por filas.

Sandbox

Pruébalo en un proyecto personal

$0 / mes

  • 1 base de datos, 1 fuente de teselas
  • Reconstrucción cada 24 horas
  • 50.000 peticiones de teselas / mes
  • 100 geocercas, 100 usuarios con tracking
Empieza gratis

Starter

Para un producto con un mapa dentro

$29 / mes

  • Actualizaciones en vivo con LISTEN/NOTIFY
  • 5 fuentes de teselas, 2 bases de datos
  • 1 M de peticiones de teselas / mes
  • 5000 geocercas, 5000 usuarios con tracking
  • Webhooks
  • Descarga de MBTiles
Elegir Starter

Pro

Para equipos cuyos datos se mueven todo el día

$149 / mes

  • Todo lo de Starter
  • 25 fuentes, 10 bases de datos
  • 10 M de peticiones de teselas / mes
  • Geocercas sincronizadas desde PostGIS
  • Dominio de teselas propio
  • Exportación a PMTiles para hosting estático
Elegir Pro

Enterprise

Workers dedicados, en tu nube o en la nuestra

Hablemos

  • Workers de tilefeed dedicados
  • VPC peering / PrivateLink
  • SSO y registro de auditoría
  • SLA de disponibilidad del 99,95 %
Contáctanos
Comparativa de límites de los planes
Límite SandboxStarterProEnterprise
Fuentes de teselas 1525Ilimitado
Bases de datos 1210Ilimitado
Peticiones de teselas 50k / mes1M / mes10M / mesA medida
Geocercas 1005000100.000Ilimitado
Usuarios con tracking 100 / mes5k / mes50k / mesA medida
Mapas georreferenciados 110100A medida
Actualizaciones Reconstrucción cada 24 horasEn vivo, segundos después de una escrituraEn vivo, segundos después de una escrituraEn vivo, segundos después de una escritura
Dominio de teselas propio NoNoSíSí

Si superas tu límite de teselas en un plan de pago, las teselas se siguen sirviendo; te escribimos antes de que cambie nada. El Sandbox se pausa al llegar a su límite.

Preguntas

¿Funciona con Supabase, Neon, RDS o Cloud SQL?

Sí, con un matiz: las actualizaciones en vivo usan LISTEN de Postgres, que no funciona a través de poolers en modo transacción. Usa la cadena de conexión directa (puerto 5432 en Supabase, el host sin pooling en Neon). Si solo puedes usar una URL con pooling, elige el modo snapshot y reconstruiremos según un horario.

¿Qué tan rápidas son las actualizaciones en vivo?

Normalmente de uno a tres segundos desde el COMMIT hasta una tesela nueva. Las notificaciones se agrupan en pequeños lotes, así que una edición masiva de 10.000 filas vuelve a renderizar cada tesela afectada una vez en lugar de 10.000.

¿Qué librerías de mapas pueden usar las teselas?

Cualquiera que lea Mapbox Vector Tiles y TileJSON: MapLibre GL, Mapbox GL, OpenLayers, Leaflet con un plugin de teselas vectoriales, deck.gl, QGIS.

¿Puedo irme y ejecutarlo yo mismo?

Sí. MapSocket ejecuta tilefeed, que tiene licencia MIT. Cada fuente tiene un botón Export config que te da el TOML de tilefeed, y puedes descargar los MBTiles o un archivo PMTiles en cualquier momento.

¿Qué cuenta como usuario con tracking?

Un userId distinto que haya enviado al menos una llamada a /v1/track en el mes. Las llamadas a /v1/context y la búsqueda de geocercas no cuentan.

Apúntalo a una tabla que ya tengas.

La mayoría tiene una URL de teselas en vivo en menos de cinco minutos tras registrarse.