---
title: "¿Qué es PostGIS? ¿Cuándo y cómo debería usarlo?"
slug: "what-is-postgis-and-when-should-i-use-it"
published_at: "2022-11-24T07:45:44.000Z"
categories: "SQL Avanzado, PostgreSQL, Tutoriales de SQL, Tutoriales de SQL para principiantes"
tags: "Geografía, Geometría, Instalación, Mapa, PostGIS, PostgreSQL, SRID"
---

# ¿Qué es PostGIS? ¿Cuándo y cómo debería usarlo?

> PostGIS es esencialmente un complemento de código abierto para la base de datos PostgreSQL que agrega soporte para objetos geográficos y convierte a PostgreSQL en una base de datos espacial.

![](/blog/creating-a-view-in-postgresql/image-2.png)

## ¿Qué es PostGIS?

PostGIS es esencialmente un complemento de código abierto para la base de datos PostgreSQL que agrega soporte para objetos geográficos y convierte a PostgreSQL en una base de datos espacial.

## ¿Cuándo debería usar PostGIS?

Si tenés bases de datos con direcciones que querés ubicar en un mapa o bases de datos que guardan valores geométricos complejos, PostGIS es tu opción.

## ¿Cómo instalo PostGIS?

Esto va a depender de tu entorno de trabajo, si estás usando docker, acá tenés un [pequeño tutorial](/es/how-to-install-postgis-pgadmin-postgresql-in-docker).

En caso de que tengas un PostgreSQL corriendo en Linux, deberías usar los siguientes comandos en tu consola:

```sql
# Por favor revisá si esta es la última versión acá
wget http://postgis.net/stuff/postgis-3.3.3dev.tar.gz
tar -xvzf postgis-3.3.3dev.tar.gz
cd postgis-3.3.3dev
./configure
make
make install
```

## Habilitando PostGIS en mi base de datos

Después de instalar PostGIS, tenés que habilitarlo en tu base de datos (tranquilo, podés hacerlo en PgAdmin)

Para lograr esto, consultemos los siguientes comandos:

```sql
      CREATE EXTENSION IF NOT EXISTS plpgsql;
      CREATE EXTENSION postgis;
      CREATE EXTENSION postgis_raster; -- OPCIONAL
      CREATE EXTENSION postgis_topology; -- OPCIONAL
```

![Crear extensión PostGIS](/blog/what-is-postgis-and-when-should-i-use-it/image-25-1024x274.png)

Después de hacer esto, vas a notar que cuando creás una tabla, ahora tenés disponibles las columnas geometry y geography.

![Geography disponible en la tabla](/blog/what-is-postgis-and-when-should-i-use-it/image-26-1024x512.png)

## ¿Cómo actualizo PostGIS?

A partir de la versión 3 en adelante, si instalaste PostGIS usando extensiones, actualizarlo es tan simple como ejecutar la siguiente consulta:

```sql
SELECT postgis_extensions_upgrade();
```

Para versiones anteriores que también fueron instaladas con extensiones:

```sql
ALTER EXTENSION postgis UPDATE;
SELECT postgis_extensions_upgrade();
-- Esta segunda llamada es necesaria para reempaquetar la extensión postgis_raster
SELECT postgis_extensions_upgrade();
```

En caso de que no hayas usado ninguna de estas opciones o tengas múltiples versiones de PostGIS, podés [revisar la documentación acá.](https://postgis.net/docs/manual-3.3/postgis_administration.html#soft_upgrade "PostGIS Soft Update")

## El tipo de dato geometry, el modelo abstracto

El tipo de dato geometry es un modelo abstracto que acepta los siguientes [Features Access](https://www.ogc.org/standards/sfa) para generar valores geométricos:

```sql
Point
LineString
LinearRing
Polygon
MultiPoint
MultiLineString
MultiPolygon
GeometryCollection
PolyhedralSurface
Triangle
TIN
```

### ¿Cómo uso el tipo de dato geometry?

```sql
-- Crear tabla para valores geométricos
CREATE TABLE geometrical_values (name varchar, geom geometry);

-- Insertar algunos valores geométricos
INSERT INTO geometrical_values VALUES
  ('Point', 'POINT(0 0)'),
  ('Linestring', 'LINESTRING(1 1, 2 2, 3 2, 3 3)'),
  ('Polygon', 'POLYGON((4 4, 5 4, 5 5, 4 5, 4 4))');

-- Seleccionar los valores geométricos
SELECT name,geom FROM geometrical_values;
```

En PgAdmin 4 (que soporta la extensión PostGIS) vas a ver el siguiente ícono después de hacer estas consultas:

![Ícono geométrico](/blog/what-is-postgis-and-when-should-i-use-it/image-27.png)

Si hacés clic en él, te va a dar la representación geométrica de nuestra consulta SELECT:

![Visor de geometría](/blog/what-is-postgis-and-when-should-i-use-it/image-28-1024x241.png)

## El tipo de dato geography

El tipo de dato geography **no soporta TINS, POLYHEDRALSURFACEs, ni curvas**, ya que asume que estás usando un mapa mundial como lienzo.

### ¿Cómo uso el tipo de dato geography?

**Marcando puntos en un mapa con PostGIS**

```sql
-- Crear tabla para valores de geography

CREATE TABLE geographycal_values (name varchar, geof geography);

INSERT INTO geographycal_values (name, geof) VALUES ('USA', ST_GeogFromText('SRID=4326;POINT(-100 40)') );
INSERT INTO geographycal_values (name, geof) VALUES ('Mexico', ST_GeogFromText('SRID=4326;POINT(-100 20)') );
INSERT INTO geographycal_values (name, geof) VALUES ('France', ST_GeogFromText('SRID=4326;POINT(0 49)') );

SELECT name,geof FROM geographycal_values;
```

Si hacés clic en tu ícono de nuevo, podrías ver algo así en tu visor de geometría:

![Visor de geometría usando mapa](/blog/what-is-postgis-and-when-should-i-use-it/image-29-1024x271.png)

Como podés ver, ahora los puntos están ubicados en un mapa.

Fíjate que en nuestro código usamos POINT con algunos valores adentro, bueno, esos son longitud y latitud, mirá cómo funciona este código (y por favor notá que Google te da latitud y longitud y no al revés, te va a ahorrar algunos dolores de cabeza):

```sql
INSERT INTO geographycal_values (name, geof) VALUES ('Argentina', ST_GeogFromText('SRID=4326;POINT(-58.480599 -34.626677)') );
```

También podrías usar LINESTRING para trazar una línea entre estados, POLYGON para definir el área de un estado, o cualquier otro tipo de dato (excepto los que dijimos antes).

## Conclusión

**PostGIS es una herramienta poderosa para convertir las tablas de tu base de datos en una gestión Geométrica o Geográfica potente.** También podés crear tus propios mapas con él y mostrarlos usando [Leaflet](https://leafletjs.com/) o cualquier otra librería de mapas.

¡Te invito a probarlo!

¡Nos vemos en el próximo!

