“Everything is related to everything else, but near things are more related than distant things”, First Law of Geography
sudo apt-get install postgresql-9.1-postgis
sudo apt-get install postgresql-*-postgis
¡¡Cuidado con el paquete "postgis"!!
Al instalar postGIS se crea un template_postgis(_20).
Este template define una base de datos con capacidad espacial.
Podemos ver la versión de postGIS instalada con
SELECT postgis_full_version();
sudo apt-get install postgresql-9.1-postgis
psql -h localhost -U postgres -c'createdb -E UTF8 -U postgres template_postgis'
sudo su postgres -c'createdb -E UTF8 -U postgres template_postgis'
sudo su postgres -c'createlang -d template_postgis plpgsql;'
psql -U postgres -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/postgis.sql
psql -U postgres -d template_postgis -f /usr/share/postgresql/9.1/contrib/postgis-1.5/spatial_ref_sys.sql
psql -U postgres -d template_postgis -c "GRANT ALL ON geometry_columns TO PUBLIC;"
psql -U postgres -d template_postgis -c "GRANT ALL ON spatial_ref_sys TO PUBLIC;"
psql -U postgres -d template_postgis -c "GRANT ALL ON geography_columns TO PUBLIC;"
psql -U postgres -d template_postgis -c "UPDATE pg_database SET datistemplate='true' WHERE datname='template_postgis';"
Con el template creado, ya podemos crear bases de datos espaciales como churros.
createdb -E UTF8 -U postgres -T template_postgis db_taller
Es un tipo más de la base de datos.
Permite definirse en "cualquier" sistema de coordenadas.
Número ilimitado de dimensiones.
Point
LineString
LinearRing
Polygon
MultiPoint
MultiLineString
MultiPolygon
GeometryCollection
Latitud, Longitud
Conjunto ordenado de puntos
Curvas. Poco usado salvo para polígonos.
Conjunto de líneas cerrado
Nube de Puntos
Manojo de líneas
Varios polígonos
Caos
osm2pgsql -U postgres -d db_taller barcelona.osm
Si queremos definir una tabla manualmente, hay que especificar las columnas geométricas de forma especial.
SELECT AddGeometryColumn ('my_schema','my_spatial_table','my_col',4326,'LINESTRING',2);
CONSTRAINT enforce_dims_my_col CHECK (st_ndims(my_col)=2)
CONSTRAINT enforce_geotype_my_col CHECK (geometrytype(my_col) = 'LINESTRING'::text OR my_col IS NULL),
CONSTRAINT enforce_srid_my_col CHECK (st_srid(my_col) = 4326)
También podemos meter esas constraint a mano
O utilizar Populate_Geometry_Columns
Personalmente no me fío de esta última función
Existen muchas funciones geográficas en PostGIS
ST_MakePoint(Longitude, Latitude)
ST_GeomFromText(WellKnownText, srid)
ST_SetSRID(geometry, srid)
ST_AsText(geometry)
ST_AsGeoJSON(geometry)
ST_AsGML(geometry)
ST_X(point)
ST_Y(point)
ST_StartPoint(geometry)
ST_EndPoint(geometry)
Hay muchas formas de ver si dos geometrías son iguales.
Puede interesarte una forma más estricta o no según tus necesidades.
ST_OrderingEquals: Exactamente iguales
ST_Equals: Ocupan el mismo espacio físico
=: Ocupan el mismo bounding box
&&: Bounding Box que se tocan
ST_Area(geometry)
ST_Length(geometry)
ST_NumPoints(linestring)
ST_NumGeometries(geometry)
ST_Distance(geometry, geometry)
ST_DWithin(geometry, geometry, radius)
ST_Intersects(geometry, geometry)
ST_Contains(geometry, geometry)
ST_Crosses(geometry, geometry)
ST_Disjoint(geometry, geometry)
ST_Overlaps(geometry, geometry)
Lo mismo que se aplica a un postgreSQL.
Al menos respecto a parámetros de SO.
Es fundamental usar índices espaciales.
Si además podemos hacer cluster, mejor.
Suelen ser más útiles que los índices sobre otros campos.
(en igualdad de condiciones)
Memoria que comparten los procesos (por ejemplo datos que sacan de una tabla)
Recomendado: 75% de la RAM
NOTE: There is a kernel parameter that needs to be adjusted to allow large values of shared_buffers to work, since the kernel puts limits on how much shared memory can be allocated (to prevent accidents). Work out how much memory you're going to allocate to shared_buffers, double it, then echo that value (in bytes) to /proc/sys/kernel/shmmax and /proc/sys/kernel/shmall, and persist that setting on reboot in /etc/sysctl.conf.
Espacio en RAM que usa cada sub-query dentro de la query.
En PG >= 9 el EXPLAIN ANALYZE te enseña cuanta memoria va a gastar la query.
Recomendado: Para un servidor en producción Memoria Disponible / 2 * max_connections.
NOTE: Set this value at your own risk and only after significant testing. Having it too high can have rather unexpected consequences. Setting it to 1 or 2GB, unless you have VERY few threads, or a TON of memory, is a very, very bad idea.
So, if you're doing data warehousing, and you're pretty much the only user (or there's only one at a time), setting it up pretty high is acceptable, but you do need to watch the box and make sure you don't run it out of memory. Also, make sure you have things configured correctly, if you're using Linux, to prevent the OOM killer from kicking in. Also, as I suggested before, set it to a reasonable level for the 'default' and just up it for specific queries that may benefit from it.
Work Mem para VACUUM, Index, etc...
Recomendado: Memoria Disponible / 8
Establece la cantidad de memoria utilizada para escritura anticipada registro (WAL) de datos.
Recomendado: Si tu base de datos es estática, no necesitas mucho. Si tu base de datos es muy dinámica, necesitarás más espacio.
Mientras que el valor por defecto es a menudo suficiente para la mayoría de los datos, los datos geoespaciales tiende a ser mucho más grandes. Por lo tanto, se recomienda aumentar el tamaño de este parámetro (1 MB).
Espacio de memoria que el query planner usa para cachear.
Recomendado: 50/75% Memoria Disponible
Mientras que el valor por defecto es a menudo suficiente para la mayoría de los datos, los datos geoespaciales tiende a ser mucho más grandes. Por lo tanto, se recomienda aumentar el tamaño de este parámetro (1 MB).
Workshop de OpenGeo.
Visitar este otro Workshop de bases de datos geográficas en general.
Que no sea por tutoriales y más tutoriales.