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 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 postgis
$ sudo apt install postgresql-9.1-postgis
En serio, es así de fácil…
Nota
Según la versión de Ubuntu que esté usando y los repositorios que haya configurado, estos comandos instalarán PostGIS 1.5 o 2.x. Puede encontrar la versión instalada emitiendo una consulta select PostGIS_full_version ();
con psql u otra herramienta.
Para instalar la última versión absoluta de PostGIS, puede utilizar los siguientes comandos.
$ sudo apt-add-repository ppa:sharpie/for-science
$ sudo apt-add-repository ppa:sharpie/postgis-nightly
$ sudo apt update
$ sudo apt install postgresql-9.1-postgis-nightly
16.1.2. Instalando bajo Windows¶
La instalación en Windows es un poco más complicada, pero aún no es difícil. Tenga en cuenta que debe estar en línea para instalar la pila de Postgis.
Primero visita la página de descarga.
Entonces 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¶
La `descarga desde el sitio web de PostGIS <https://postgis.net/install/>_ 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
Si está utilizando PostGIS 1.5 y una versión de PostgreSQL inferior a 9.1, deberá seguir un conjunto de pasos diferente para instalar las extensiones de Postgis para su base de datos. Por favor consulte la Documentación de PostGIS para obtener instrucciones sobre cómo hacer esto.
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.