Mosaicos vetoriais dinâmicos a partir do PostGIS.

Cole o URL de uma base de dados e obtenha um URL de mosaicos vetoriais dinâmicos que se atualiza segundos após uma linha mudar. Depois, transforme os mesmos polígonos em geofences que lhe dizem quando as pessoas chegam.

Sandbox gratuita, sem cartão. Funciona com RDS, Cloud SQL, Supabase, Neon, Crunchy Bridge ou o seu próprio servidor.

14/8235/5419 e 14/8236/5419 renderizados de novo em 0,9 s. Os outros 22 mosaicos não mudaram.

Da connection string ao mapa em três passos

  1. Cole o URL da sua base de dados

    Verificamos a ligação, a versão do PostGIS e as permissões, e avisamos se o URL passa por um pooler que não suporta atualizações em tempo real.

  2. Escolha tabelas e colunas

    Cada tabela com uma coluna de geometria é listada com o SRID, uma estimativa de linhas e as colunas. Escolha as propriedades que entram nos mosaicos e o intervalo de zoom.

  3. Cole o URL dos mosaicos no seu mapa

    Recebe um URL TileJSON e um template z/x/y com uma chave publicável, restrita às origens que autorizar. Funciona em qualquer lado onde funcionem mosaicos vetoriais.

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

As alterações chegam ao mapa sem reconstrução

A MapSocket escuta a sua base de dados com o LISTEN/NOTIFY do Postgres. Quando uma linha muda, só são reescritos os mosaicos que continham a forma antiga ou a nova. Uma edição de mil linhas volta a renderizar cada mosaico afetado uma única vez.

  1. Linha confirmada

    INSERT, UPDATE ou DELETE numa tabela publicada

  2. O trigger envia NOTIFY

    Camada, id da linha, operação e os limites antigos

  3. Agrupado

    Picos de alterações são agregados e desduplicados por mosaico

  4. Mosaicos recodificados

    Só os mosaicos que tocam a geometria antiga ou nova, em todos os níveis de zoom

  5. O seu mapa atualiza-se

    update_complete chega por SSE; os webhooks também são disparados

Duas formas de se manter atualizado

Em tempo real
O dashboard gera um trigger para cada tabela, com as suas colunas reais de id e geometria. Executa-o uma vez; as atualizações chegam em um a três segundos. Requer uma ligação direta, não um transaction pooler.
Snapshot
Para roles só de leitura, URLs com pooler ou bases de dados onde não pode adicionar triggers. Reconstruímos de forma agendada, desde a cada 5 minutos até uma vez por semana. Mude para tempo real quando estiver pronto.
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 os mesmos dados

Envie uma localização e receba as geofences onde ela se encontra e o que mudou desde a anterior. Eventos de entrada, saída e permanência, visitas a locais, mudanças de país e de região e chegadas de viagens são enviados para os seus webhooks, assinados para que possa confiar neles.

De onde vêm as geofences

  • Sincronizadas a partir de uma tabela PostGIS. Aponte para public.delivery_zones, escolha as colunas de id e de tag, e os polígonos mantêm-se em sincronia com a tabela. Pontos e linhas podem ser convertidos em zonas com um buffer.
  • Desenhadas no dashboard. Círculos e polígonos no mapa, com um tempo de permanência por geofence.
  • Criadas através da API. Upsert por tag e externalId, ou importe GeoJSON ou um CSV no formato Radar.
POST /v1/track
Localização à entrada, eventos de geofence à saída
GET /v1/context
Que geofences contêm um ponto, sem guardar estado
GET /v1/search/geofences
Geofences mais próximas por distância e tag
POST /v1/trips
ETAs, aproximação e chegada para entregas e recolhas

Cada track identifica também o local (a partir do OpenStreetMap), o país e a região, e faz verificações de fraude para saltos impossíveis e localizações simuladas. As chaves publicáveis permitem fazer tracking a partir de browsers e telemóveis; as chaves secretas gerem geofences e leem eventos. Posições de baixa precisão são guardadas mas não disparam eventos.

Pedido
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}'
Resposta
{
  "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 é também enviado para os seus webhooks com um cabeçalho MapSocket-Signature (HMAC-SHA256). Verificar uma assinatura

Como se compara

Se precisa de mosaicos gerados a cada pedido a partir de funções SQL parametrizadas, o pg_tileserv ou o Martin são a melhor opção. A MapSocket é para tabelas que mudam ao longo do dia e mapas que devem acompanhar essas mudanças.

Abordagem Como são feitos os mosaicos Quando uma linha muda O que tem de operar
pg_tileserv Uma query SQL por pedido de mosaico, em tempo real Visível no pedido seguinte, mas cada pedido atinge a sua base de dados Um servidor junto à sua base de dados
Martin Em tempo real a partir do PostGIS, ou de ficheiros MBTiles e PMTiles Em tempo real quando dinâmico, com o custo das queries; os ficheiros precisam de reconstrução Um servidor, mais a sua própria cache à frente
Tippecanoe agendado com cron Uma reconstrução completa para MBTiles ou PMTiles Esperar pela próxima execução, que reconstrói tudo Um agendador, armazenamento e uma CDN
MapSocket MBTiles pré-construídos, servidos a partir de cache Só os mosaicos afetados voltam a ser renderizados, em segundos Nada. Cole um URL.

A sua base de dados, as suas regras

Entrega-nos uma connection string, por isso eis exatamente o que fazemos com ela.

Que acesso à minha base de dados precisa a MapSocket?

Uma role que possa fazer SELECT nas tabelas que publica. Recomendamos uma role dedicada só de leitura; o dashboard dá-lhe as instruções exatas de CREATE ROLE e GRANT. Para atualizações em tempo real, é o utilizador (não nós) que executa uma pequena função de trigger em cada tabela, o que requer permissões de proprietário da tabela uma única vez.

Como é guardada a minha connection string?

É cifrada com AES-256-GCM antes de chegar à nossa base de dados, com a chave guardada fora dela. Só é decifrada dentro do worker que constrói os seus mosaicos e nunca volta a ser mostrada no dashboard nem na API, apenas o host, a base de dados e o utilizador.

Posso adicionar os vossos IPs a uma allowlist?

Sim. Todas as ligações à sua base de dados vêm de um conjunto fixo de IPs de saída por região, indicados no dashboard junto a cada ligação. Adicione-os ao seu security group ou ao pg_hba.conf e não é preciso abrir mais nada.

A ligação é cifrada?

Ligamo-nos com sslmode=require por predefinição e recusamos ligações em texto simples, a menos que desative isso explicitamente para uma rede privada.

Copiam as minhas tabelas?

Não. As linhas são lidas e codificadas diretamente em mosaicos vetoriais; o arquivo de mosaicos (MBTiles) é a única cópia que guardamos. Se eliminar uma fonte, os respetivos mosaicos são eliminados com ela. As geofences sincronizadas a partir de uma tabela são guardadas como geometrias mais as colunas que escolher.

Posso proteger a minha conta com autenticação de dois fatores?

Sim. Ative-a em Definições e segurança: digitalize um código QR com qualquer aplicação de autenticação (Google Authenticator, 1Password, Authy, Microsoft Authenticator) e, a partir daí, iniciar sessão exige um código de 6 dígitos além da palavra-passe. Recebe dez códigos de recuperação de utilização única, para o caso de perder o telemóvel.

Preços

Paga pelas fontes que executa e pelos pedidos que serve. A sua base de dados continua a ser sua; nunca cobramos por linhas.

Sandbox

Experimente num projeto pessoal

$0 / mês

  • 1 base de dados, 1 fonte de mosaicos
  • Reconstrução a cada 24 horas
  • 50 mil pedidos de mosaicos / mês
  • 100 geofences, 100 utilizadores seguidos
Começar grátis

Starter

Para um produto com um mapa

$29 / mês

  • Atualizações em tempo real via LISTEN/NOTIFY
  • 5 fontes de mosaicos, 2 bases de dados
  • 1 milhão de pedidos de mosaicos / mês
  • 5000 geofences, 5000 utilizadores seguidos
  • Webhooks
  • Download de MBTiles
Escolher Starter

Pro

Para equipas cujos dados mudam o dia todo

$149 / mês

  • Tudo o que está no Starter
  • 25 fontes, 10 bases de dados
  • 10 milhões de pedidos de mosaicos / mês
  • Geofences sincronizadas a partir do PostGIS
  • Domínio de mosaicos personalizado
  • Exportação PMTiles para alojamento estático
Escolher Pro

Enterprise

Workers dedicados, na sua cloud ou na nossa

Fale connosco

  • Workers tilefeed dedicados
  • VPC peering / PrivateLink
  • SSO e registo de auditoria
  • SLA de 99,95% de disponibilidade
Contacte-nos
Comparação dos limites dos planos
Limite SandboxStarterProEnterprise
Fontes de mosaicos 1525Ilimitado
Bases de dados 1210Ilimitado
Pedidos de mosaicos 50k / mês1M / mês10M / mêsPersonalizado
Geofences 1005.000100.000Ilimitado
Utilizadores seguidos 100 / mês5k / mês50k / mêsPersonalizado
Mapas georreferenciados 110100Personalizado
Atualizações Reconstrução a cada 24 horasEm tempo real, segundos após uma escritaEm tempo real, segundos após uma escritaEm tempo real, segundos após uma escrita
Domínio de mosaicos personalizado NãoNãoSimSim

Se ultrapassar o limite de mosaicos num plano pago, os mosaicos continuam a ser servidos; enviamos-lhe um email antes de qualquer alteração. A Sandbox fica em pausa ao atingir o limite.

Perguntas

Funciona com Supabase, Neon, RDS ou Cloud SQL?

Sim, com uma ressalva: as atualizações em tempo real usam o LISTEN do Postgres, que não funciona através de poolers em modo de transação. Use a connection string direta (porta 5432 no Supabase, o host sem pooler no Neon). Se só puder usar um URL com pooler, escolha o modo snapshot e reconstruímos de forma agendada.

Quão rápidas são as atualizações em tempo real?

Normalmente um a três segundos entre o COMMIT e um mosaico atualizado. As notificações são agrupadas em pequenos lotes, por isso uma edição em massa de 10 000 linhas volta a renderizar cada mosaico afetado uma vez, em vez de 10 000 vezes.

Que bibliotecas de mapas podem usar os mosaicos?

Tudo o que leia Mapbox Vector Tiles e TileJSON: MapLibre GL, Mapbox GL, OpenLayers, Leaflet com um plugin de vector tiles, deck.gl, QGIS.

Posso sair e executar tudo por conta própria?

Sim. A MapSocket executa o tilefeed, que tem licença MIT. Cada fonte tem um botão Export config que lhe dá o TOML do tilefeed, e pode descarregar os MBTiles ou um arquivo PMTiles a qualquer momento.

O que conta como utilizador seguido?

Um userId distinto que tenha enviado pelo menos uma chamada /v1/track no mês. As chamadas a /v1/context e a pesquisa de geofences não contam.

Aponte-o para uma tabela que já tem.

A maioria das pessoas tem um URL de mosaicos em tempo real até cinco minutos depois de se registar.