PostGIS

Para criar uma coluna com dados sobre um mapa você tem duas escolhas:
GEOGRAPHY
GEOMETRY

Geography é realmente um ponto na terra. O problema é que existem funções limitadas para operar sobre ele. Como a terra é uma elipse (em termos cartográficos) esses cálculos são bem mais pesados, complexos e levemente precisos que o Geometry.

Geometry é um ponto em uma projeção plana. A projeção plana é uma aproximação em 2d da terra. Como é uma aproximação, podem haver distorções nos cálculos, então escolha sempre a projeção que menos distorcerá seu dado. Existem muitas funções para operar em um geometry. Como é um plano cartesiano simples, as operações são muito mais rápidas.

Tanto o Geography e o Geometry devem usar um formato de representação.

O formato mais comum de Geography é o WGS84, é o formato usado pelos GPS. O código dessa representação geográfica (SRID ou EPSG) é 4326.

Já em Geometry, existem muitos. Para cada ponto da terra, existe uma projeção cartográfica mais adequada que a representa.

Para Curitiba, o mais recomendado é o SIRGAS 2000 UTM 22s código (SRID ou EPSG) 31982.

A projeção mais famosa hoje em dia, usada no GoogleMaps é o Web Mercator, ou WGS 84 Web Mercator de código (SRID ou EPSG) 3857.

Um bom site para ver as distorções dos planos cartesianos é esse:
https://epsg.io/

Ao criar uma coluna do tipo GEOMETRY, você precisa dizer ao Postgre em qual plano cartesiano ele está. Atualize ele com o UpdateGeometrySRID:

SELECT UpdateGeometrySRID(varchar schema_name, varchar table_name, varchar column_name, integer srid);SELECT UpdateGeometrySRID('public', 'vehicles', 'position', 4326);

Para inserir um ponto (tanto em GEOGRAPHY como em GEOMETRY) em uma tabela você pode usar o ST_Point.
Atenção! Ao inserir um dado assim, o SRID do que você tiver inserindo deve ser igual ao SRID da coluna cadastrada no código acima, senão você receberá um erro do PostGIS (resolvemos isso no exemplo abaixo).

-- Para GEOMETRYSELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)-- Para GEOGRAPHYSELECT ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326)::GEOGRAPHY;

Caso queria converter planos cartesianos diferentes você pode usar:

-- Modelo da funçãoSELECT ST_Transform(coluna_geometria, srid);-- Pegando uma coordenada em GPS puro (WGS84) e transformando em SIRGAS 2000 UTM 22sSELECT ST_Transform(ST_SetSRID(ST_Point(-71.1043443253471, 42.3150676015829),4326),31982)

Instalando PostGIS

No Linux

Você pode instalar o PostGIS pelo próprio PPA do PostgreSQL. Descubra quais versões do PostGIS estão disponíveis pelo comando:

apt-cache search postgis

Referências

Instalando PostGIS
https://kitcharoenp.github.io/postgresql/postgis/2018/05/28/set_up_postgreSQL_postgis.html

Site Oficial PostGIS
https://postgis.net/install/

Documentação oficial do PostGIS
https://postgis.net/documentation/