PostGIS és una extensió de la base de dades PostgreSQL que afegeix suport per a objectes de dades geogràfiques. Això ens permet utilitzar la base de dades PostgreSQL per emmagatzemar i consultar dades espacials. Com podeu suposar, la combinació de PostGIS i Docker proporciona un mètode eficaç i extens per gestionar les dades espacials.
En aquest tutorial, aprendrem com podem configurar ràpidament una instància PostGIS dins d'un contenidor Docker. També tractarem alguns conceptes bàsics de PostGIS i aprendrem a carregar dades espacials i realitzar algunes consultes bàsiques mitjançant el contenidor.
Requisits:
Per seguir aquest tutorial, assegureu-vos que teniu el següent:
- S'ha instal·lat Docker Engine al vostre sistema. Podeu consultar els nostres tutorials sobre com instal·lar Docker al vostre sistema de destinació.
- Coneixements bàsics de PostgreSQL i dades espacials
Amb els requisits establerts, podem continuar amb el tutorial.
Executeu PostGIS a Docker
Continuem i configurem el contenidor PostGIS. Comencem traient el contenidor PostGIS del Docker Hub amb l'ordre següent:
$ docker pull postgis/postgis
Un cop tinguem la imatge descarregada, podem executar el contenidor utilitzant la imatge tal com es mostra a la següent comanda:
$ docker run --name postgis-server -e POSTGRES_PASSWORD =contrasenya -d -p 5432:5432 postgis/postgis
A l'ordre donada, especifiquem els paràmetres següents:
- –name – Això ens permet especificar el nom del contenidor.
- -e - Això ens permet establir la contrasenya de PostgreSQL com a variable d'entorn. Aquesta és la contrasenya que s'utilitza per a l'usuari de postgres.
- -d – Això indica a Docker que executi el contenidor en segon pla o en mode desconnectat.
- -p 5432:5432: això ens permet mapar el port 5432 dins del contenidor amb l'amfitrió del port 5432.
Per verificar que el contenidor s'està executant, utilitzeu l'ordre següent:
$ docker psHauríeu de veure el contenidor de PostGIS a la llista.
Carregueu les dades espacials a PostGIS
Ara que tenim el contenidor PostGIS en execució, podem carregar les dades espacials utilitzant diverses eines i formats com GeoJSON, CSV, etc.
Per a aquest cas, utilitzem un Shapefile tal com es mostra a les ordres següents:
$ mkdir -p ~/data$ cd ~/dades
wget https://www.naturalearthdata.com/http//www.naturalearthdata.com/download/110m/cultural/ne_110m_admin_0_countries.zip
$ descomprimir ne_110m_admin_0_countries.zip
En les ordres donades, comencem creant un directori per emmagatzemar les dades que volem carregar. A continuació, baixem una informació geogràfica de l'enllaç especificat i l'extreim al directori.
El següent pas és carregar les dades a la base de dades. Comencem connectant-nos a la base de dades PostgreSQL mitjançant l'ordre següent:
$ docker exec -it postgis-server psql -U postgres -d postgresSi se us demana una contrasenya, proporcioneu la contrasenya que heu configurat en executar el contenidor. Això us hauria d'autenticar i enviar-vos a l'intèrpret d'ordres de PostgreSQL.
Un cop connectats a la base de dades, podem utilitzar la utilitat “shp2pgsql” per importar les dades dels Shapefiles que hem extret als passos anteriors.
postgres=# shp2pgsql -I -s 4326 ne_110m_admin_0_countries | psql -U postgres -d postgresA l'ordre anterior, utilitzem l'opció -I per crear un índex espacial per a una consulta més ràpida de les dades espacials. També especifiquem el sistema de coordenades com a 4326 mitjançant el paràmetre -s. L'EPG:4326 és el sistema d'estat de coordenades estàndard per a WGS 84.
Dades de consulta de PostGIS
Un cop hem carregat les dades, podem sortir de la utilitat PSQL executant l'ordre '\q' o sortint.
A continuació, per verificar que tenim les dades carregades, ens podem tornar a connectar a la base de dades executant l'ordre següent:
$ docker exec -it postgis-container psql -U postgres -d postgresA continuació, podeu executar les consultes espacials bàsiques per verificar que teniu les dades emmagatzemades.
Conclusió
En aquest tutorial, heu après com executar el servidor PostGIS com a contenidor Docker i carregar les dades a la base de dades.