Me acuerdo ya más de 10 años atrás, jure y perjure que no iba a involucrarme en un proyecto que tenga que ver con nada referente a GIS, y bueno las vueltas de la vida hacen que de nuevo regrese por estos lares, pero sinceramente en esta década tenemos mejores herramientas para poder lidiar con las operaciones complejas referente a tratamiento de este tipo de datos.

La verdad es que me encontré a un PostGIS (una extensión de Postgres) mucho más maduro y rápido, de verdad me sorprende la manera en la cual puede indexar datos geográficos y espaciales dándote el poder de tener consultas más rápidas, ahora veremos como instalar esta extensión en nuestro Centos 7 x64.

Como primer paso realizamos la actualización de nuestro sistema operativo

#Mantenemos Actualizado nuestro Centos y instalamos unas herramientas necesarias

yum update -y
yum install open-vm-tools
yum install net-tools
yum install gzip
yum install lbzip*
yum install bz*
yum install sqlite*
yum install vim 
yum install libxml*

#Desactivamos el SELinux 
vi /etc/sysconfig/selinux 

#Por defecto centos7 viene con el pgsql 9.1, pero un requerimiento del postgis 2.5 es una versión arriba de la 9.4, asi que agregamos el repositorio y lo instalamos

rpm -Uvh http://yum.postgresql.org/9.6/redhat/rhel-7-x86_64/pgdg-redhat96-9.6-3.noarch.rpm
yum install postgresql96*

#arrancamos el motor de la Base de datos, y hacemos que el servicio arranque desde que se prenda el equipo
/usr/pgsql-9.6/bin/postgresql96-setup initdb
systemctl enable postgresql-9.6
systemctl start postgresql-9.6



#Habilitamos el acceso de la red con estos ficheros
vim /var/lib/pgsql/9.6/data/pg_hba.conf
vim /var/lib/pgsql/9.6/data/postgresql.conf 
systemctl restart postgresql-9.6


#Comenzamos la instalación de las dependencias, esto si lo tenemos que bajar y compilar

wget http://download.osgeo.org/geos/geos-3.7.1.tar.bz2
tar -xvf geos-3.7.1.tar.bz2 
cd geos-3.7.1
./configure 
make
make install


wget http://download.osgeo.org/proj/proj-6.0.0.tar.gz
tar -xvf proj-6.0.0.tar.gz 
cd proj-6.0.0
./configure
make install


   
wget http://download.osgeo.org/gdal/2.4.0/gdal-2.4.0.tar.gz
tar -xvf gdal-2.4.0.tar.gz 
cd gdal-2.4.0
./configure 
make
make install


#Y por fin bajamos y compilamos el postgis

wget http://download.osgeo.org/postgis/source/postgis-2.5.2.tar.gz
tar -xvf postgis-2.5.2.tar.gz 
cd postgis-2.5.2
./configure --with-pgconfig=/usr/pgsql-9.6/bin/pg_config --with-geosconfig=/usr/local/bin/geos-config  --with-gdalconfig=/usr/local/bin/gdal-config
make
make install
make comments
make cheatsheets


#Compilamos e Instalamos las extensiones en si
cd extensions/
cd postgis
make clean
make
make install

cd ..
cd postgis_topology
make clean
make
make install

cd ..
cd postgis_sfcgal
make clean
make
make install
cd ..
cd address_standardizer
make clean
make
make install
make installcheck
cd ..
cd postgis_tiger_geocoder
make clean
make
make install
make installcheck


#Agregamos /usr/local/lib 
vim /etc/ld.so.conf.d/local-libs.conf
ldconfig -v

#Reiniciamos nuestro Postgres
systemctl restart postgresql-9.6

#Ahora, ingresamos a la carpeta para poder asignar las extensiones a nuestra base de datos
cd /usr/pgsql-9.6/share/contrib/postgis-2.5/

#Ingresamos a nuestro Cli de Postgres
 \i postgis.sql
 \i spatial_ref_sys.sql
 \i postgis_comments.sql
 \i rtpostgis.sql
 \i raster_comments.sql
 \i topology.sql
 \i topology_comments.sql
 \i topology.sql
 \i legacy.sql

#Bueno es no nos sirve mucho en perú pero para fines didáctico también podemos agregar las extensiones de esta manera:
 CREATE EXTENSION address_standardizer;

Bueno aca unas pequeñas ayudas de funciones varias para que arranques

#Base de datos de ejemplo
select * from catastro limit  2;
   id_catastro    |      cenx       |       ceny       |                     wgs84_geom                     
------------------+-----------------+------------------+----------------------------------------------------
 4010412710000900 | 224214.07665000 | 8192649.31640000 | 0101000020E6100000217E306632E551C03CBC9D3ADC5430C0
 4010412710000300 | 224227.18729500 | 8192664.41816000 | 0101000020E6100000ACCD615C30E551C0E737AD63D35430C0
(2 rows)

#Partiendo de las coordenadas UTM X y Y guardamos generamos un punto y lo transformamos en otro formato, 
update catastro set wgs84_geom = ST_Transform(ST_SetSRID(ST_MakePoint(cenx,ceny),32719),4326)::geography;
UPDATE 262221

#Nos devuelve todos los puntos a menos de 20 metros 
select * from catastro where ST_Distance(wgs84_geom ,(select wgs84_geom from catastro where id_catastro = 04010304137001400)) < 20;
   id_catastro    |      cenx       |       ceny       |                     wgs84_geom                     
------------------+-----------------+------------------+----------------------------------------------------
 4010304137002000 | 227929.26990200 | 8186541.90466000 | 0101000020E61000003FD846D404E351C0706C21AC166330C0
 4010304137001300 | 227947.54300100 | 8186567.26485000 | 0101000020E6100000BFFBC1FA01E351C06F7C62CC076330C0
 4010304137001400 | 227945.72551000 | 8186551.71590000 | 0101000020E61000002285BB4902E351C030E8DAFC106330C0
 4010304137001500 | 227944.73510400 | 8186536.09405000 | 0101000020E610000023ED497802E351C07195F1391A6330C0
 4010304137002100 | 227927.13768000 | 8186552.94378000 | 0101000020E6100000E7FE812205E351C012EA761F106330C0
 4010304137002101 | 227927.87935900 | 8186548.45465000 | 0101000020E6100000F18A9D0705E351C08B9E0DC9126330C0
(6 rows)

#Simplemente nos devuelve en lat lot la información contenida en la columna wgs84_geom
select *,ST_AsText(wgs84_geom) from catastro where id_catastro = 04010304137001400;
   id_catastro    |      cenx       |       ceny       |                     wgs84_geom                     |                 st_astext                  
------------------+-----------------+------------------+----------------------------------------------------+--------------------------------------------
 4010304137001400 | 227945.72551000 | 8186551.71590000 | 0101000020E61000002285BB4902E351C030E8DAFC106330C0 | POINT(-71.5470146495104 -16.3869779619637)
(1 row)

Anotaciones varias:

En si el PostGIS agrega otros tipos de datos como el geography y geometry, pero siempre hay que tener en cuenta el SRID de los datos, en mi caso me dieron una base de datos WSG84 UTM 19S (SIRD 32719) , y la tuve que convertir en WSG84 (SIRD 4326) para poder generar las operaciones.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.