Cada vez son más las aplicaciones que hacen uso de localizaciones dentro de su funcionamiento y que además, necesitan almacenarlas de alguna forma dentro de su base de datos. Es entonces cuando PostgreSQL toma ventaja frente a MySQL gracias a la existencia de PostGis.
PostGis es un software libre, tiene licencia GNU General Public License (GPL), convierte nuestra base de datos PostgreSQL en una base de datos espacial capacitada para almacenar y trabajar con datos espaciales.
La instalación es muy sencilla, esta que indico aquí es la que usé en local y en un servidor en producción con Ubuntu 12.04, supongo que en versiones posteriores será similar con algún cambio en las versiones de paquetes pero diría que la mecánica es la misma, pero si tenéis alguna duda preguntad en comentarios y lo vemos entre todos.
Instalamos los paquetes:
sudo apt-get install python-software-properties sudo apt-add-repository ppa:ubuntugis/ppa sudo apt-get update sudo apt-get install postgresql-9.1-postgis sudo apt-get install build-essential postgresql-9.1 postgresql-server-dev-9.1 libxml2-dev proj libjson0-dev xsltproc docbook-xsl docbook-mathml gettext postgresql-contrib-9.1 pgadmin3 sudo apt-get install python-software-properties sudo apt-add-repository ppa:olivier-berten/geo sudo apt-get update sudo apt-get install libgdal-dev
Una vez realizadas estas instalaciones, verficamos la versión de libGDAL, que debe ser 1.9.0
$ gdal-config --version 1.9.0
También verificamos la de libGEOS
$ geos-config --version 3.3.2
Ahora debemos actualizar la versión de libGEOS a la 3.3.3, para ello realizamos los siguientes pasos:
sudo apt-get install g++ ruby ruby1.8-dev swig swig2.0 ''--- added to other instructions, not installed by default in 12.04 & required for this make wget http://download.osgeo.org/geos/geos-3.3.3.tar.bz2 tar xvfj geos-3.3.3.tar.bz2 cd geos-3.3.3 ./configure --enable-ruby --prefix=/usr
Al final del proceso de configuración debe aparecer lo siguiente:
Swig: true Python bindings: false Ruby bindings: true PHP bindings: false
Finalmente, compilamos:
make sudo make install cd ..
y comprobamos nuevamente la version, que ya si debe ser la 3.3.3:
$ geos-config --version 3.3.3
Continuamos con la instalación de PostGis:
wget http://postgis.refractions.net/download/postgis-2.0.6.tar.gz tar xfvz postgis-2.0.6.tar.gz cd postgis-2.0.6 ./configure --with-gui
El final de esta instalación debe decir algo así:
PostGIS is now configured for i686-pc-linux-gnu -------------- Compiler Info ------------- C compiler: gcc -g -O2 C++ compiler: g++ -g -O2 -------------- Dependencies -------------- GEOS config: /usr/bin/geos-config GEOS version: 3.3.3 GDAL config: /usr/bin/gdal-config GDAL version: 1.9.0 PostgreSQL config: /usr/bin/pg_config PostgreSQL version: PostgreSQL 9.1.3 PROJ4 version: 47 Libxml2 config: /usr/bin/xml2-config Libxml2 version: 2.7.8 JSON-C support: yes PostGIS debug level: 0 Perl: /usr/bin/perl --------------- Extensions --------------- PostGIS Raster: enabled PostGIS Topology: enabled -------- Documentation Generation -------- xsltproc: /usr/bin/xsltproc xsl style sheets: /usr/share/xml/docbook/stylesheet/nwalsh dblatex: convert: mathml2.dtd: /usr/share/xml/schema/w3c/mathml/dtd/mathml2.dtd
para finalizar la instalación, compilamos:
make sudo make install sudo ldconfig sudo make comments-install
una vez terminados estos pasos, creamos el usuario de postgres:
sudo apt-get install postgresql-client sudo -u postgres createuser --superuser $USER sudo -u postgres psql postgres=# password postgres (la password que he puesto es postgres)
Finalmente, creamos la plantilla template_postgis, que es la clave para la creación de una base de datos de tipo espacial.
sudo su postgres sudo createdb template _postgis sudo createlang plpgsql template_postgis sudo psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/postgis.sql sudo psql -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-2.0/spatial_ref_sys.sql sudo psql -d template_postgis -c "SELECT postgis_full_version();"
Estas instrucciones son una adaptación mía de la guía que seguí: http://trac.osgeo.org/postgis/wiki/UsersWikiPostGIS20Ubuntu1204
Espero que no os haya aburrido con este extenso primer post que escribo en LH 🙂 .En próximas entradas ahondaremos más sobre bases de datos espaciales como esta que acabo de crear.
https://www.youtube.com/embed/z-xGk9c_eOw Guionista y locutor: Manuel Ignacio López Quintero.Fecha de publicación: 31 de diciembre de 2024.
Ver comentarios
¿Existe algo parecido en MySQL?
Sí MySQL también cuenta con la posibilidad de almacenar datos geográficos y realizar funciones espaciales. Incluso SQLite cuenta con Spatialite. Pero PostGIS es bastante más potente.
Aquí un enlace
http://dev.mysql.com/doc/refman/5.0/es/spatial-extensions.html
No había oído hablar nunca de ellos, sí que es curioso. ¿Peor en cuento a posibilidades y/o por rendimiento?
¿Para Oracle existe algo?
Ambo, al menos para trabajos en geoportales o grandes bases de datos geográficas. Postgis ya casi es el estándar dentro del ámbito de SIG OpenSource y todo lo relacionado con servicios OGC.
De todas formas, estoy viendo ya cosas para usar MySQL en visores ligeros con Apis de mapas tipo Leaflet en hosting básicos. En estos casos el uso de Postgis es imposible.
...y sí, Oracle tambié trabaja con geodatos. Pero aquí ya me pierdo
La verdad es que no los conocía, muchas gracias por tu aportación! :)
Gracias a ti por el aporte
La verdad es que la extensión PostGIS da un valor añadido a PostgreSQL muy interesante.
Buenas tardes a todos, estoy iniciando en el mundo de la programación y base de datos, (osea, solo se de este mundo un 0,2%) y buscando ejemplos de como usar un campo tipo POINT, llegue a ustedes. Estoy aprendido a usar php con la ayuda de scriptcase (segun mucha gente no es programar, pero me gusta la rapids de hacer la cosas) y al grabar los datos de pruebas (UPDATE "public".pais SET pais = 'ESPAÑA', cod_telf_pais = '34', coordenada = 40.463667,-3.749 WHERE id_pais = 1) el sistema me arroja un error.
Revisando el materia de este post y los otros relacionados, creo que me falta algunas dependencias para posgis, correcto? y el crear las plantillas.
Creo que postgreSQL es mejor que mySQL (solo comprado velocidad de respuesta en ambientes controlados, tal ves no es la mejor forma, pero el resultado me gusto, y por eso estoy aprendiendo), pero es mucho mas complicado.
Y tomando lo que dice "Patricio Soriano", me pone a pensar si aprender postgreSQL lo suficiente para hacer los programas que necesito (Administración de Empresas, y tracking de GPS) y hacer eso con mySQL.
De verdad agradezco muchos sus comentarios (estoy haciendo el curso de network faculty y scrtipcase)
Muchas gracias a todos por sus comentarios.
Saludos desde Venezuela