Com o PostGIS 3.0, agora é possível gerar recursos diretamente com GeoJSON, sem nenhum código intermediário, usando a nova função ST_AsGeoJSON (record).

O GeoJSON é um formato de transporte comum, entre servidores e clientes da web, e até mesmo entre componentes de cadeias de processamento. Ser capaz de criar um GeoJSON é importante para integrar diferentes partes em um aplicativo de geoprocessamento moderno.

O PostGIS tem uma função chamada ST_AsGeoJSON(geometry), porém faz um pouco menos do que a maioria dos usuários realmente precisa: ele utiliza uma geometria PostGIS e gera um GeoJSON “geometry object”, ou seja, um arquivo contendo apenas as geometrias, sem os atributos.

O objeto de geometria GeoJSON é apenas a forma do recurso, ele não inclui nenhuma outra informação sobre o recurso que possa estar incluída na tabela ou na consulta. Como resultado, os desenvolvedores gastaram muito tempo escrevendo código para agrupar os resultados das ST_AsGeoJSON(geometry) com as colunas de uma tupla de resultado para criar “objetos de recurso” do GeoJSON.

A função ST_AsGeoJSON(record) examina a tupla de entrada e pega primeiro a coluna do tipo geometria para converter em uma geometria GeoJSON. O restante das colunas é adicionado a Feature GeoJSON no properties. Veja:

SELECT ST_AsGeoJSON(subq.*) AS geojson 
FROM ( 
  SELECT ST_Centroid(geom), type, admin 
  FROM countries 
  WHERE name = 'Canada' 
) AS subq
{"type": "Feature", 
 "geometry": { 
    "type":"Point", 
    "coordinates":[-98.2939042718784,61.3764628013483] 
  }, 
  "properties": { 
    "type": "Sovereign country", 
    "admin": "Canada" 
  } 
}

Usando esta nova função GeoJSON, é fácil transmitir recursos diretamente do banco de dados para um mapa da Web com OpenLayers ou Leaflet, ou até mesmo consumi-los com ogr2ogr para conversão em outros formatos geoespaciais.

Fonte: Clever Elephant Blog