27 / 02 / 2016
PROJCS["ETRS89 / UTM zone 29N",
GEOGCS["ETRS89",
DATUM["European_Terrestrial_Reference_System_1989",
SPHEROID["GRS 1980",6378137,298.257222101,
AUTHORITY["EPSG","7019"]],
AUTHORITY["EPSG","6258"]],
PRIMEM["Greenwich",0,
AUTHORITY["EPSG","8901"]],
UNIT["degree",0.01745329251994328,
AUTHORITY["EPSG","9122"]],
AUTHORITY["EPSG","4258"]],
UNIT["metre",1,
AUTHORITY["EPSG","9001"]],
PROJECTION["Transverse_Mercator"],
PARAMETER["latitude_of_origin",0],
PARAMETER["central_meridian",-9],
PARAMETER["scale_factor",0.9996],
PARAMETER["false_easting",500000],
PARAMETER["false_northing",0],
AUTHORITY["EPSG","25829"],
AXIS["Easting",EAST],
AXIS["Northing",NORTH]]
ogr2ogr -f "KML" nucleo_poblacion.kml PG:"host=localhost user=gis dbname=gis password=gis" -sql "select gid, nom_ine, geom from gis.nucleo_poblacion"
Diferente relaciones entre los datos:
WKT es el acrónimo en inglés de Well Known Text, que se puede definir como una codificación o sintaxis diseñada específicamente para describir objetos espaciales expresados de forma vectorial.
ST_Relate permite el uso de patrones personalizados
El patrón T******** me indica que los interiores de las geometrías tienen que tener alguna dimensión, por lo tanto deben intersecar
Mediante el uso de ST_Relate y los patrones podemos encontrar las relaciones de las geometrías. Es tedioso el uso de los patrones.
PostGIS define operaciones que son particularizaciones del uso de los patrones.
Estas operaciones deben cumplir la definición de la relación impuesta por los estándares
create table gis.carreteras_cruzan_vigo as (select c.gid, c.geom
from gis.nucleo_poblacion as n, gis.tramo_carretera as c
where ST_Crosses(n.geom, c.geom)
and n.nom_ine = 'VIGO');
create table gis.carreteras_de_vigo as (select c.gid, c.geom
from gis.nucleo_poblacion as n, gis.tramo_carretera as c
where ST_Contains(n.geom, c.geom)
and n.nom_ine = 'VIGO');
Estas operaciones toman como argumento una o varias geometrías y devuelven otra geometría.
Toman únicamente las coordenadas X e Y de las geometrías ignorando las Z o M
Funcionan con todas las geometrías básicas excepto con las GEOMETRY COLLECION
ST_Buffer(geom,distance,optional)
Es el conjunto de puntos situados a una determinada distancia de la geometría. La función acepta en su primer argumento una geometría y en el segundo la distancia con la que construirá la geometría de salida.
create table gis.buffer_castelao as (select c.gid, st_buffer(c.geom, 50)
from gis.tramo_carretera as c
where c.gid = '121')
ST_Intersection(geom, geom)
ST_Union(Geometría A, Geometría B)
ST_Diference(geom,geom)
ST_SymDifference(geom,geom)
ST_ConvexHull(geom,geom)
Uso intensivo de SQL para definir consultas eficaces y correctas
Estrategias de SQL avanzadas
Definición del problema y planificación de la consulta, diseño previo
¡Uso de índices espaciales!
El tipo de geometrías que devuelven estas operaciones no tienen porque ser igual al tipo de geometrías que le son pasadas como argumentos.
PostGIS soporta varios miles de sistemas de coordenadas.
La gestión de los Sistemas de coordenadas se realiza con las siguientes funciones:
ST_Srid(geom) → devuelve el CRS de la geometría
ST_SetSrid(geom,srid) → devuelve la geometría con el nuevo CRS asignado
ST_Transform(geom, srid) → devuelve la geometría reproyectada
En caso de que necesitemos cambiar el CRS a una capa por completo no será necesario recorrer todos los registros, podremos utilizar la función:
UpdateGeometrySrid(tabla, columna geom, nuevo SRID)
¡No reproyecta los datos!
Para reproyectar las geometrías de una capa utilizaremos ST_Transform. Para poder hacer esta operación, hemos de eliminar la restricción sobre el SRID antes de actualizar las geometrías.
create table gis.nucleo_3857 as (select n.gid, n.nom_ine, ST_Transform(n.geom, 3857) as geom from gis.nucleo_poblacion as n)
La caja (box) es el rectángulo definido por las máximas y mínimas coordenadas x e y de una geometría.
La síntaxis será la siguiente:
CREATE INDEX [Nombre_del_indice] ON [Nombre_de_tabla] USING GIST ([campo_de_geometria]);
Esta operación puede requerir bastante tiempo en tablas de gran tamaño.
Para usar el índice debemos incluir el operador && en nuestras consultas
Para las geometrías, el operador && significa “la caja que toca (touch) o superpone (overlap)” de la misma manera que para un número el operador = significa “valores iguales”
Muchas de las operaciones habituales de PostGIS dispone de operador de cajas, por ejemplo:
ST_Intersects VS _ST_Intersects
django-rest-framework-gis
"@postgis en una cáscara de nuez" by Micho García is licensed under CC BY 2.0
Micho García
micho.garcia@geomati.co
@michogar