Nos últimos posts falamos bastante sobre vector tiles, que mapas belos e responsivos são melhor construídos usando essa tecnologia e que o PostgreSQL com PostGIS podem produzir vector tiles “on-the-fly“.
No entanto, para usar vector tiles em um mapa bonito e responsivo, você precisa acessar esses tiles através do protocolo HTTP e solicitá-los usando uma URL no formato XYZ.

É possível você escrever seu próprio wrapper HTTP para o gerador de vector tiles do PostGIS, mas você não precisa, pois a Crunchy Data já fez isso por você.
O pg_tileserv é um servidor de vector tiles leve, criado especificamente para publicar tiles de um banco de dados PostgreSQL/PostGIS, que possui os seguintes recursos:
- Escrito em Go para permitir a implantação simples de binários sem cadeias de dependência complexas ou problemas de versão de biblioteca.
- Padrões prontos para execução, para que a implantação básica exija apenas definir uma sequência de configurações do banco de dados e executar o programa.
- Interface web simples para explorar os serviços de tiles publicados e visualizar os serviços como mapas.
- Filtragem de atributos em tempo real para remover as colunas que você não deseja recuperar do servidor, para tiles menores e mais rápidos.
- Geração de tiles com base em funções, para que você possa gerar tiles a partir de qualquer função que capte as coordenadas XYZ e produza tiles MVT.

Deseja ver o pg_tileserv em ação? Aqui está uma demonstração em cinco etapas! (A maioria das etapas envolve apenas a obtenção de alguns dados espaciais em um banco de dados: se você já possui um banco de dados, pule para a etapa 3 e insira suas próprias informações de conexão com o banco de dados).
1. Crie um banco de dados e ative o PostGIS.
createdb postgisftw psql -d postgisftw -c 'create extension postgis'
2. Faça o download de alguns dados espaciais e carregue-os no PostGIS.
curl -L -o https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip unzip ne_50m_admin_0_countries.zip shp2pgsql -s 4326 -D -I ne_50m_admin_0_countries | psql -d postgisftw
3. Baixe e descompacte o binário pg_tileserv para sua plataforma:
4. Defina a variável de ambiente DATABASE_URL para apontar para seu banco de dados e inicie o serviço.
export DATABASE_URL=postgresql://postgres@localhost:5432/postgisftw ./pg_tileserv --debug
5. Acesse pelo seu navegador a URL da interface web do serviço.
http://localhost:7800
6. Agora explore os dados.
O serviço inclui uma interface visualizável e uma API baseada em JSON. O ponto de partida da API JSON é:
http://localhost:7800/index.json
Você pode ver exemplos de mapas configurados usando a API JSON, através da interface web:

Usando os dados carregados neste exemplo, a construção de um mapa na web que visualiza os tiles é tão simples quanto apontar para a URL de origem da tile. Um mapa na web pode ser tão pequeno quanto estes exemplos ( Leaflet, Openlayers, Mapbox GL JS):
<html lang="en">
<head>
<meta charset="utf-8">
<title>Vector Tiles in Leaflet</title>
<!-- CSS for Leaflet map -->
<link rel="stylesheet" href="https://unpkg.com/leaflet@1.5.1/dist/leaflet.css"
integrity="sha512-xwE/Az9zrjBIphAcBb3F6JVqxf46+CDLwfLMHloNu6KEQCAWi6HcDUbeOfBIptF7tcCzusKFjFw2yuvEpDL9wQ=="
crossorigin="" />
<!-- JS for Leaflet map -->
<script src="https://unpkg.com/leaflet@1.5.1/dist/leaflet.js"
integrity="sha512-GffPMF3RvMeYyc1LWMHtK8EbPv0iNZ8/oTtHPx9/cc2ILxQ+u905qIwdpULaqDkyBKgOaB57QTMg7ztg8Jm2Og=="
crossorigin=""></script>
<!-- Leaflet plugin for vector tiles support -->
<script type="text/javascript" src="https://unpkg.com/leaflet.vectorgrid@1.2.0"></script>
<!-- Set up a full-screen map -->
<style>
html, body, #map { height: 100%; width: 100%; }
body { padding: 0; margin: 0; }
#map { z-index: 1; }
</style>
</head>
<body>
<!-- Put the map in this element -->
<div id="map"></div>
<script>
// Leaflet map object
var map = L.map('map').setView([0, 0], 2);
// Add a base map layer to the map
var baseUrl = "https://maps.wikimedia.org/osm-intl/{z}/{x}/{y}.png";
var baseLayer = L.tileLayer(baseUrl).addTo(map);
// Add the tile layer to the map
// https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/50m/cultural/ne_50m_admin_0_countries.zip
var vectorServer = "http://localhost:7800/";
var vectorLayerId = "public.ne_50m_admin_0_countries";
var vectorUrl = vectorServer + vectorLayerId + "/{z}/{x}/{y}.pbf";
var vectorTileStyling = {};
// Rendering options
vectorTileStyling[vectorLayerId] = {
"fill": true,
"fillColor": "green",
"fillOpacity": 0.1,
"color": "green",
"opacity": 0.7,
"weight": 2
};
var vectorTileOptions = {
"rendererFactory": L.canvas.tile,
"vectorTileLayerStyles": vectorTileStyling
};
var vectorLayer = L.vectorGrid.protobuf(vectorUrl, vectorTileOptions).addTo(map);
</script>
</body>
</html>
O código acima, vai gerar um mapa assim:

Fonte: Crunchy Data Blog