16.1. Configurar PostGIS ILSI

La configuración de funciones de PostGIS le permitirá acceder a funciones espaciales desde dentro de PostgreSQL.

El objetivo de esta lección: instalar funciones espaciales y una breve demostración de sus efectos.

Nota

Asumiremos el uso de PostGIS versión 2.1 o posterior en este ejercicio. La instalación y la configuración de la base de datos son diferentes para las versiones anteriores, pero el resto de este material en este módulo seguirá funcionando. Consulte la documentación de su plataforma para obtener ayuda con la instalación y la configuración de la base de datos.

16.1.1. Instalando bajo Ubuntu

Postgis se instala fácilmente desde apt.

$ sudo apt install postgresql
$ sudo apt install postgis

En serio, es así de fácil…

Nota

Las versiones exactas que se instalarán dependerán de la versión de Ubuntu que esté utilizando y de los repositorios que haya configurado. Después de la instalación, puede verificar la versión emitiendo una consulta select PostGIS_full_version(); con psql u otra herramienta.

Para instalar una versión específica (por ejemplo, PostgreSQL versión 13 y PostGIS 3), puede usar los siguientes comandos.

$ sudo apt install wget ca-certificates
$ sudo lsb_release -a
$ wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
$ sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -cs`-pgdg main" >> /etc/apt/sources.list.d/pgdg.list'
$ sudo apt-get update
$ sudo apt install postgis postgresql-13-postgis-3

16.1.2. Instalando bajo Windows

La instalación en Windows se puede realizar desde paquetes binarios mediante los cuadros de diálogo de instalación de Windows normales.

Primero Visite la página de descargas. Luego siga esta guía.

Puede encontrar más información sobre la instalación en Windows en el sitio web de PostGIS.

16.1.3. Instalar en Otras Plataformas

El website de descargas PostGIS tiene información sobre la instalación en otras plataformas, incluido macOS y en otras distribuciones de Linux

16.1.4. Configurar Bases de Datos para usar PostGIS

Una vez que PostGIS esté instalado, deberá configurar su base de datos para usar las extensiones. Si ha instalado PostGIS versión> 2.0, esto es tan simple como emitir el siguiente comando con psql usando la base de datos de direcciones de nuestro ejercicio anterior.

$ psql -d address -c "CREATE EXTENSION postgis;"

Nota

Dependiendo de su versión, puede encontrar mas instrucciones de como habilitar espacialmente una base de datos en https://postgis.net/docs/postgis_administration.html#create_spatial_db.

16.1.5. Mirando las funciones de PostGIS instaladas

PostGIS se puede considerar como una colección de funciones en la base de datos que amplían las capacidades centrales de PostgreSQL para que pueda manejar datos espaciales. Por “tratar con”, nos referimos a almacenar, recuperar, consultar y manipular. Para hacer esto, se instalan varias funciones en la base de datos.

Nuestra base de datos de direcciones de PostgreSQL ahora está habilitada geoespacialmente, gracias a PostGIS. Vamos a profundizar mucho más en esto en las próximas secciones, pero le daremos una pequeña muestra. Digamos que queremos crear un punto a partir del texto. Primero usamos el comando psql para encontrar funciones relacionadas con el punto. Si aún no está conectado a la base de datos address, hágalo ahora. Entonces ejecute:

\df *point*

Este es el comando que estamos buscando: st_pointfromtext. Para desplazarse por la lista, use la flecha hacia abajo y luego presione Q para volver al shell psql.

Intente ejecutar este comando:

select st_pointfromtext('POINT(1 1)');

Resultado:

st_pointfromtext
--------------------------------------------
0101000000000000000000F03F000000000000F03F
(1 row)

Tres cosas a anotar:

  • Nosotros definimos un punto en la posición 1,1 (EPSG:4326 es asumido) usando POINT(1 1),

  • Ejecutamos una declaración SQL, pero no en ninguna tabla, solo en los datos ingresados desde el indicador SQL,

  • La fila resultante no tiene mucho sentido.

La fila resultante tiene el formato OGC llamado “Binario bien conocido” (WKB). Veremos este formato en detalle en la siguiente sección.

Para recuperar los resultados como texto, podemos hacer un escaneo rápido a través de la lista de funciones en busca de algo que devuelva texto:

\df *text

La consulta que estamos buscando ahora es st_astext. Combinémoslo con la consulta anterior:

select st_astext(st_pointfromtext('POINT(1 1)'));

Resultado:

 st_astext
------------
  POINT(1 1)
  (1 row)

Aquí, ingresamos la cadena POINT(1,1), la convertimos en un punto usando st_pointfromtext(), y lo convirtió de nuevo en una forma legible para humanos con st_astext(), que nos devolvió nuestra cadena original.

Un último ejemplo antes de entrar realmente en los detalles del uso de PostGIS:

select st_astext(st_buffer(st_pointfromtext('POINT(1 1)'),1.0));

¿Qué hizo eso? Creó un búfer de 1 grado alrededor de nuestro punto y devolvió el resultado como texto.

16.1.6. Sistemas de referencia espacial

Además de las funciones de PostGIS, la extensión contiene una colección de definiciones de sistemas de referencia espacial (SRS) tal como las define el European Petroleum Survey Group (EPSG). Se utilizan durante operaciones como las conversiones del sistema de referencia de coordenadas (SRC).

Podemos inspeccionar estas definiciones de SRS en nuestra base de datos, ya que están almacenadas en tablas de bases de datos normales.

Primero, veamos el esquema de la tabla ingresando el siguiente comando en el indicador psql:

\d spatial_ref_sys

El resultado debería ser este:

Table "public.spatial_ref_sys"
   Column   |          Type           | Modifiers
 -----------+-------------------------+-----------
  srid      | integer                 | not null
  auth_name | character varying(256)  |
  auth_srid | integer                 |
  srtext    | character varying(2048) |
  proj4text | character varying(2048) |
  Indexes:
"spatial_ref_sys_pkey" PRIMARY KEY, btree (srid)

Puede usar consultas SQL estándar (como hemos aprendido en nuestras secciones introductorias) para ver y manipular esta tabla, aunque no es una buena idea actualizar o eliminar ningún registro a menos que sepa lo que está haciendo.

Un SRID que puede interesarle es EPSG: 4326 - el sistema de referencia geográfica / lat lon que utiliza el elipsoide WGS 84. Echemos un vistazo a esto:

select * from spatial_ref_sys where srid=4326;

Resultado:

srid      | 4326
auth_name | EPSG
auth_srid | 4326
srtext    | GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS
84",6378137,298.257223563,AUTHORITY["EPSG","7030"]],TOWGS84[0,
0,0,0,0,0,0],AUTHORITY["EPSG","6326"]],PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],AUTHORITY["EPSG","4326"]]
proj4text | +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs

El srtext es la definición de proyección en texto bien conocido (puede reconocer esto de los archivos .prj en su colección de shapefile).

16.1.7. In Conclusion

Ahora tiene las funciones de PostGIS instaladas en su copia de PostgreSQL. Con esto, podrá hacer uso de las amplias funciones espaciales de PostGIS.

16.1.8. What’s Next?

A continuación, aprenderá cómo se representan los objetos espaciales en una base de datos.