Guía de estudio · BD geométricas · PostgreSQL

Bases de Datos
Geométricas

El punto central no es dibujar figuras. Es conseguir que una base de datos pueda guardar, comparar, medir, buscar y relacionar objetos geométricos de forma eficiente.

Si es tu primera vez: seguí el orden del índice. Está armado para ir de la idea → la geometría → la consulta → el índice.

Plano 2D
X Y POLYGON @> POINT distancia → <->
POINT(4,3) CIRCLE<(4,3),2>
plano cartesiano geometría 2D PostgreSQL

La base no guarda “un dibujito”. Guarda objetos matemáticos con operadores propios.

1 Entendé los objetos
2 Traducí preguntas a relaciones
3 Entendé cómo se buscan rápido
Mapa de estudio

Todo el tema
en seis pasos

Si entendés esta cadena, después los operadores dejan de parecer una sopa de símbolos.

01
Representar objetos 2D
02
Guardar tipos geométricos
03
Comparar relaciones
04
Medir distancia / área
05
Consultar SQL geométrico
06
Acelerar índices espaciales
La idea central:

BD geométrica = base relacional + objetos geométricos + operadores espaciales + consultas geométricas + índices multidimensionales.
¿Qué objeto? point, box, polygon...
¿Qué relación? contiene, cruza, está cerca...
¿Qué consulta? range, KNN, spatial join...
¿Qué índice? GiST, SP-GiST...
01 · Fundamentos

¿Qué es una base
de datos geométrica?

Es una base capaz de tratar objetos geométricos como verdaderos tipos de datos y no solamente como números X e Y sueltos.

Guardar coordenadas sueltas

x1 = 2
y1 = 1
x2 = 9
y2 = 6

La base ve números.

→

Tipo geométrico

BOX

((9,6),(2,1))

La base sabe que es una región rectangular.

Pregunta 01

¿Está adentro?

Consulta de contención.

Pregunta 02

¿Se cruzan?

Consulta de intersección.

Pregunta 03

¿Cuál está más cerca?

Consulta de distancia.

El cambio importante Una columna ya no representa solamente «un número» o «un texto». Puede representar una estructura geométrica completa.
02 · Aclaración fundamental

Geométrica
≠ geográfica

Base geométrica

Espacio abstracto

Puede trabajar simplemente sobre un plano cartesiano X/Y.

metros cm píxeles unidades abstractas
Base geográfica

Superficie terrestre

Se preocupa por referencias geográficas, proyecciones, sistemas de coordenadas, Tierra curva, etc.

latitud longitud CRS proyección
Para aprender los tipos geométricos nativos de PostgreSQL no necesitás:

GPS · WGS84 · EPSG · latitud · longitud · proyecciones cartográficas.

Ejemplo

Si un robot está en:

POINT(25, 10)

puede significar simplemente:

25 metros sobre el eje X
10 metros sobre el eje Y

dentro de un galpón.
03 · Antes de seguir

Dos vocabularios
que podés encontrarte

Hay más de una forma de modelar geometría dentro de una base de datos. Conviene reconocer ambas.

PostgreSQL nativo

7 tipos propios

point line lseg box path polygon circle

Vienen incluidos directamente en PostgreSQL.

Modelo OGC / PostGIS

Geometry

Point LineString Polygon MultiPoint MultiLineString MultiPolygon GeometryCollection

Es otro modelo geométrico, muy usado por extensiones y otros motores.

Tener PostGIS no significa automáticamente estar haciendo geografía.

El tipo geometry también puede representar formas en un plano cartesiano.

PostgreSQL nativo

lseg '[(0,0),(5,5)]'

OGC / PostGIS

LINESTRING(0 0, 5 5)
No mezcles sintaxis.

Esta guía se concentra primero en PostgreSQL nativo. La sección OGC está para que, si aparece en clase, no pienses que es otro tema totalmente distinto.
04 · Base matemática

El plano cartesiano

Los tipos geométricos nativos de PostgreSQL representan objetos espaciales bidimensionales.

P = (x, y)
Eje

X

Coordenada horizontal.

Eje

Y

Coordenada vertical.

Crear un punto

SELECT point '(4,3)';

-- (4,3)
PostgreSQL no sabe automáticamente si esos valores son metros, centímetros, milímetros o píxeles.

El significado de la unidad lo define el modelo de tu aplicación.

Acceder a X e Y

SELECT posicion[0] AS x,
       posicion[1] AS y
FROM sensores;

PostgreSQL permite tratar point como un arreglo de dos componentes:

[0] → X [1] → Y
05 · Cómo pensar las formas

Dimensión, borde
e interior

Antes de memorizar nombres, sirve entender qué ocupa realmente cada objeto.

0D

Punto

Tiene posición, pero no longitud ni área.

1D

Objetos lineales

Segmentos, rectas y caminos poseen longitud.

2D

Regiones

Polygon, box y circle delimitan superficies.

Vértice punto que define una forma
Borde límite de una región
Interior espacio que encierra
Exterior lo que queda fuera
Esta diferencia explica por qué un PATH cerrado y un POLYGON pueden compartir los mismos vértices pero no significar lo mismo.
06 · PostgreSQL

Los 7 tipos
geométricos nativos

Tipo Representa Sintaxis Almacenamiento
point Punto (x,y) 16 bytes
line Recta infinita {A,B,C} 24 bytes
lseg Segmento finito [(x1,y1),(x2,y2)] 32 bytes
box Rectángulo (x1,y1),(x2,y2) 32 bytes
path Camino abierto/cerrado [...] o (...) 16 + 16n bytes
polygon Región poligonal ((x1,y1),...) 40 + 16n bytes
circle Círculo <(x,y),r> 24 bytes
Las coordenadas se almacenan utilizando double precision.
POINT
LSEG
POLYGON
CIRCLE
07 · Tipo básico

POINT

El objeto más simple: una única posición dentro del plano.

SELECT point '(3,5)';

-- (3,5)
Coordenada

X = 3

Coordenada

Y = 5

Dimensión

0D

No tiene área.

Crear desde números

SELECT point(23.4, -44.5);

Uso típico

Sensores, robots, posiciones, nodos, centros, ubicaciones de objetos, puntos de control.

08 · Objetos lineales

LINE vs LSEG

LINE

Representa una recta que continúa infinitamente hacia ambos lados.

SELECT line(
    point '(0,0)',
    point '(4,4)'
);

Internamente se representa como:

A·x + B·y + C = 0

LSEG

Representa un segmento entre dos extremos.

SELECT lseg '[(0,0),(4,4)]';

LINE

←────→

Infinita.

LSEG

•────•

Finito.

Ésta es una diferencia que vale la pena aprender bien:

LINE ≠ LSEG
09 · Región rectangular

BOX

Un rectángulo alineado con los ejes X e Y.

SELECT box '((6,5),(1,1))';

Solamente hacen falta dos esquinas opuestas.

width()

ancho

height()

alto

center()

centro

area()

superficie

SELECT
    width(box '((6,5),(1,1))'),
    height(box '((6,5),(1,1))'),
    area(box '((6,5),(1,1))');
BOX es especialmente útil para representar ventanas de búsqueda, regiones rectangulares y aproximaciones espaciales.
10 · Recorridos

PATH

Una secuencia ordenada de puntos conectados.

Abierto

[ ]

path '[
    (0,0),
    (2,3),
    (5,1)
]'

Los extremos no se conectan.

Cerrado

( )

path '(
    (0,0),
    (2,3),
    (5,1)
)'

El recorrido vuelve al inicio.

Funciones útiles

SELECT
    isopen(mi_path),
    isclosed(mi_path),
    npoints(mi_path),
    length(mi_path);

Abrir o cerrar

SELECT pclose(
    path '[(0,0),(1,1),(2,0)]'
);

SELECT popen(
    path '((0,0),(1,1),(2,0))'
);
11 · Regiones

POLYGON

Una región definida por una lista de vértices.

SELECT polygon '(
    (0,0),
    (6,0),
    (5,4),
    (2,6),
    (0,3)
)';
PATH cerrado

Recorrido

Describe el camino formado por sus segmentos.

POLYGON

Región

Incluye el área contenida por el borde.

PostgreSQL almacena junto al polygon su bounding box mínimo. Esto puede acelerar ciertas búsquedas geométricas.

Número de vértices

SELECT npoints(
    polygon '((0,0),(4,0),(2,3))'
);

-- 3
12 · Regiones

CIRCLE

(5,5)

centro

+
3

radio

=
CIRCLE

región circular

SELECT circle '<(5,5),3>';

center()

centro

radius()

radio

diameter()

diámetro

SELECT
    center(circle '<(5,5),3>'),
    radius(circle '<(5,5),3>'),
    diameter(circle '<(5,5),3>');
13 · Relaciones

No memorices símbolos.
Primero entendé la pregunta.

Podemos agrupar las relaciones según qué queremos saber.

Topológicas

¿Cómo se relacionan?

contiene
está dentro
se intersecta
se solapa

Métricas

¿Qué tan lejos?

distancia
punto más cercano
vecinos

Direccionales

¿Dónde está?

izquierda
derecha
arriba
abajo

Orientación

¿Cómo está orientado?

horizontal
vertical
paralelo
perpendicular

Flujo mental:

problema → familia de relación → operador → SQL
14 · Relaciones topológicas

Contención
y solapamiento

@> / <@

El polígono contiene al punto.

polygon @> point
point <@ polygon
Operador Significado Ejemplo
@> A contiene B circle contiene point
<@ A está contenido en o sobre B point dentro de polygon
&& A y B se solapan dos boxes comparten espacio
~= misma geometría dos puntos iguales
SELECT
    circle '<(0,0),2>'
    @>
    point '(1,1)';

-- true
&& no significa “son iguales”.

Significa que comparten al menos algún espacio/punto para los tipos compatibles.
15 · Intersección

Dos preguntas distintas

Pregunta booleana

?#

¿Los objetos se intersectan?

Resultado geométrico

#

¿Cuál es el punto o región de intersección?

¿Se cruzan?

SELECT

    lseg '[(0,0),(4,4)]'

    ?#

    lseg '[(0,4),(4,0)]';

-- true

¿Dónde?

SELECT

    lseg '[(0,0),(4,4)]'

    #

    lseg '[(0,4),(4,0)]';

-- (2,2)
También puede usarse # entre dos BOX: el resultado puede ser la región rectangular común.
16 · Dirección y orientación

Izquierda, derecha,
horizontal, paralelo...

Operador Pregunta
<< ¿A está estrictamente a la izquierda de B?
>> ¿A está estrictamente a la derecha de B?
<<| ¿A está estrictamente debajo de B?
|>> ¿A está estrictamente arriba de B?
&< A no se extiende a la derecha de B
&> A no se extiende a la izquierda de B
&<| A no se extiende por encima de B
|&> A no se extiende por debajo de B
Operador Significado
?- horizontal / dos puntos horizontalmente alineados
?| vertical / dos puntos verticalmente alineados
?|| paralelos
?-| perpendiculares

Paralelos

SELECT

    lseg '[(0,0),(5,0)]'

    ?||

    lseg '[(0,3),(5,3)]';

-- true

Perpendiculares

SELECT

    lseg '[(0,0),(0,5)]'

    ?-|

    lseg '[(0,0),(5,0)]';

-- true
17 · Relaciones métricas

Distancia
y punto más cercano

Distancia

<->

Devuelve una distancia.

Closest point

##

Devuelve un punto del segundo objeto.

Ranking

ORDER BY

Ordena por cercanía.

Distancia entre dos puntos

SELECT

    point '(0,0)'

    <->

    point '(3,4)';

-- 5
Por qué da 5 distancia euclidiana:

√[(3 − 0)² + (4 − 0)²]
= √25
= 5

Punto más cercano sobre otro objeto

SELECT

    point '(0,0)'

    ##

    lseg '[(2,0),(0,2)]';

-- (1,1)
Diferencia:

<-> → ¿cuánto?
## → ¿en qué punto?
18 · Consultas geométricas

Las preguntas
que se repiten siempre

Esta clasificación es más útil que aprender veinte operadores aislados.

01 · Point Location

¿Dónde cae este punto?

Encontrar la región que contiene un punto.

punto <@ region
02 · Range / Window

¿Qué hay en esta zona?

Recuperar objetos dentro de una ventana.

posicion <@ ventana
03 · Intersection

¿Qué se cruza?

Encontrar objetos que intersectan otro.

objeto ?# consulta
04 · Nearest Neighbour

¿Qué está más cerca?

Buscar objetos con distancia mínima.

ORDER BY
posicion <-> consulta

LIMIT k
05 · Spatial Join

¿Qué pares se relacionan?

Relacionar dos tablas mediante geometría.

JOIN zonas z
ON p.posicion <@ z.area
Idea

Consulta espacial

No es “mostrar un mapa”. Es ejecutar una condición sobre conjuntos de geometrías.

19 · Funciones y operadores unarios

Medir e inspeccionar
una geometría

Operación Sirve para Tipos principales
area() área box, path cerrado, circle
center() centro box, circle
length() longitud total lseg, path
width() ancho box
height() alto box
radius() radio circle
diameter() diámetro circle
npoints() cantidad de puntos path, polygon
isopen() ¿path abierto? path
isclosed() ¿path cerrado? path
slope() pendiente entre puntos point + point
diagonal() diagonal box → lseg

PostgreSQL también tiene operadores unarios

@-@

Longitud total.

@-@ lseg
@-@ path

@@

Punto central.

@@ box
@@ lseg
@@ polygon
@@ circle

#

Cantidad de puntos si se usa como operador unario.

# path
# polygon
20 · Transformaciones

Trasladar, escalar
y rotar

+

Traslación

−

Traslación inversa

×

Escala / rotación

÷

Escala / rotación

Trasladar

SELECT

    point '(2,3)'

    +

    point '(5,1)';

-- (7,4)
(2,3)

posición inicial

+
(5,1)

desplazamiento

=
(7,4)

resultado

Escalar un path

SELECT

    path '((0,0),(1,0),(1,1))'

    *

    point '(3,0)';

-- ((0,0),(3,0),(3,3))
En * y /, PostgreSQL interpreta el point de manera equivalente a un número complejo. Eso permite combinar escala y rotación.

Para una primera clase, alcanza con entender la idea.
Un BOX siempre sigue considerándose alineado a los ejes. Su “rotación” tiene una particularidad y no equivale a un rectángulo libre inclinado.
21 · Conversiones

Construir un objeto
a partir de otro

Dos puntos → LINE

SELECT line(
    point '(0,0)',
    point '(4,4)'
);

Dos puntos → LSEG

SELECT lseg(
    point '(0,0)',
    point '(4,4)'
);

BOX → centro

SELECT point(
    box '((6,4),(0,0))'
);

-- (3,2)

POLYGON → BOX

SELECT box(
    polygon '(
        (0,0),
        (5,1),
        (3,6)
    )'
);

Polygon → Path

SELECT path(
    polygon '((0,0),(4,0),(2,3))'
);

Circle → Polygon aproximado

SELECT polygon(
    8,
    circle '<(0,0),5>'
);

El círculo se aproxima mediante un polígono de 8 vértices.

También existe:

polygon(circle)

que genera por defecto una aproximación de 12 puntos.
22 · SQL geométrico

Guardar geometrías
en tablas reales

CREATE TABLE robots (

    id SERIAL PRIMARY KEY,

    nombre VARCHAR(80),

    posicion POINT,

    trayectoria PATH,

    zona_seguridad CIRCLE

);

Insertar

INSERT INTO robots
(
    nombre,
    posicion,
    trayectoria,
    zona_seguridad
)

VALUES
(
    'Robot A',

    point '(4,3)',

    path '[(4,3),(6,4),(8,4)]',

    circle '<(4,3),2>'
);

Consultar

SELECT
    nombre,
    posicion

FROM robots

WHERE
    posicion
    <@
    box '((10,10),(0,0))';
SQL sigue siendo SQL:

SELECT · FROM · WHERE · JOIN · ORDER BY · LIMIT

Lo nuevo es que el dato y la condición son geométricos.
23 · Relacionar tablas

Spatial Join

Dos tablas pueden relacionarse porque sus geometrías cumplen una condición espacial.

JOIN normal

SELECT *
FROM robots r

JOIN sectores s
ON r.sector_id = s.id;

La relación se basa en IDs.

JOIN geométrico

SELECT
    r.nombre AS robot,
    s.nombre AS sector

FROM robots r

JOIN sectores s

ON
    r.posicion
    <@
    s.area;
Traducción Relacioná cada robot con el sector geométrico que contiene su posición.
JOIN tradicional

valor = valor

Spatial Join

geometría ↔ geometría

24 · Caso integrador

Un galpón robotizado

Este ejemplo junta casi todo sin utilizar información geográfica.

ROBOTS

POINT

posición

RUTAS

PATH

recorrido

SECTORES

POLYGON

región

Modelo

CREATE TABLE robots (

    id SERIAL PRIMARY KEY,

    nombre TEXT,

    posicion POINT,

    recorrido PATH,

    radio_seguridad CIRCLE

);


CREATE TABLE sectores (

    id SERIAL PRIMARY KEY,

    nombre TEXT,

    area POLYGON

);
SELECT
    r.nombre,
    s.nombre

FROM robots r

JOIN sectores s

ON
    r.posicion
    <@
    s.area;
SELECT
    nombre,
    posicion <-> point '(50,30)' AS distancia

FROM robots

ORDER BY
    posicion <-> point '(50,30)'

LIMIT 1;
SELECT
    a.nombre,
    b.nombre

FROM robots a

JOIN robots b
    ON a.id < b.id

WHERE
    a.radio_seguridad
    &&
    b.radio_seguridad;
SELECT nombre

FROM robots

WHERE
    posicion
    <@
    box '((60,40),(20,10))';
25 · Empieza la parte importante de rendimiento

¿Por qué un B-tree
no resuelve todo esto?

Dato escalar

Orden natural

1
4
8
15
29
51

Es sencillo hablar de menor y mayor.

Geometría

Varias dimensiones

Un objeto puede tener:

X Y ancho alto forma extensión
Problema ¿Cómo ordenamos una geometría en una única línea de “menor → mayor” sin perder la información espacial que necesitamos consultar?
Los índices espaciales están diseñados para responder preguntas multidimensionales como:

“¿qué hay dentro?”
“¿qué se solapa?”
“¿qué queda más cerca?”
26 · Idea fundamental de indexación

Bounding Box / MBR

Comparar una forma compleja puede ser caro. Comparar un rectángulo que la envuelve suele ser mucho más barato.

forma real + rectángulo envolvente

MBR Minimum Bounding Rectangle.

Rectángulo mínimo, normalmente alineado a los ejes, que encierra una geometría.

Filter + Refine

1 · FILTER

Usar una representación barata para descartar regiones imposibles.

→
2 · CANDIDATOS

Queda un conjunto mucho más pequeño.

→
3 · REFINE

Verificar la condición exacta si hace falta.

Que dos bounding boxes se superpongan no implica necesariamente que las geometrías originales se intersecten.
27 · Índices

GiST

GiST significa Generalized Search Tree.

GiST

Framework

No es una única estructura rígida.

Tree

Índices especializados

Permite implementar estrategias apropiadas para dominios complejos.

No conviene memorizar:

“GiST = R-tree”

Es más correcto pensar:

GiST es un framework sobre el que pueden implementarse distintas estrategias de búsqueda, incluidas ideas tipo R-tree.

Crear índice

CREATE INDEX robots_pos_gist

ON robots

USING GIST (posicion);

¿Qué gana la base?

Puede usar el índice para evitar revisar todas las filas en determinadas consultas compatibles.

28 · Índices

SP-GiST

Space-Partitioned GiST: familias de árboles que dividen repetidamente el espacio.

4

Quadtree

Divide un espacio 2D en cuatro regiones.

K-D

k-d tree

Divide el espacio según distintas dimensiones.

Para point, PostgreSQL ofrece:

quad_point_ops → enfoque quadtree

kd_point_ops → enfoque k-d tree.
CREATE INDEX robots_pos_spgist

ON robots

USING SPGIST (posicion);
GiST y SP-GiST no son exactamente lo mismo.

GiST = framework generalizado.
SP-GiST = estructuras basadas en particionar el espacio.
29 · Nearest Neighbour

KNN

K Nearest Neighbours: encontrar los K objetos más cercanos.

SELECT
    nombre,
    posicion <-> point '(10,10)' AS distancia

FROM robots

ORDER BY
    posicion <-> point '(10,10)'

LIMIT 5;
QUERY POINT

(10,10)

→
DISTANCIA

<->

→
ORDEN

menor → mayor

→
LIMIT 5

cinco vecinos

Tanto determinadas clases GiST como determinadas clases SP-GiST pueden soportar búsquedas KNN mediante <->.
30 · Compatibilidad

No todo se indexa
de la misma forma

Tipo GiST nativo SP-GiST nativo
point ✓ point_ops ✓ quad / kd
box ✓ box_ops ✓ box_ops
polygon ✓ poly_ops ✓ poly_ops
circle ✓ circle_ops — nativo
line — clase geométrica nativa específica —
lseg — clase geométrica nativa específica —
path — clase geométrica nativa específica —
No hace falta memorizar esta tabla completa.

Lo importante es: tipo de dato + operador + clase de índice deben ser compatibles.
Que exista un operador geométrico no significa automáticamente que exista un índice nativo capaz de acelerarlo.
31 · Comprobar rendimiento

EXPLAIN

Crear un índice no alcanza. Hay que ver si PostgreSQL realmente decide utilizarlo.

EXPLAIN

SELECT nombre

FROM robots

ORDER BY
    posicion <-> point '(10,10)'

LIMIT 5;

Más detalle

EXPLAIN
(
    ANALYZE,
    BUFFERS
)

SELECT nombre

FROM robots

ORDER BY
    posicion <-> point '(10,10)'

LIMIT 5;
EXPLAIN

Plan estimado

Muestra cómo piensa ejecutar la consulta.

EXPLAIN ANALYZE

Ejecución real

Ejecuta la consulta y muestra métricas reales.

EXPLAIN ANALYZE realmente ejecuta la consulta.

En consultas que modifican datos, eso importa muchísimo.
32 · No caer en estas

Trampas comunes

Trampa 01

= no siempre significa misma geometría

Algunos operadores escalares comparan áreas.

Para la noción habitual de igualdad geométrica:

~=
Trampa 02

PATH cerrado ≠ POLYGON

Path describe el recorrido. Polygon incluye la región interior.

Trampa 03

area(path)

Un path abierto devuelve NULL.

Si se autointersecta, el área puede no ser útil.

Trampa 04

LINE ≠ LSEG

Una línea es infinita. Un segmento tiene extremos.

Trampa 05

Rotar BOX

Sigue tratándose como una caja alineada a los ejes.

Trampa 06

double precision

Las coordenadas son números flotantes.

No tienen precisión matemática infinita.

Trampa 07

GiST ≠ R-tree

GiST es un framework generalizado de indexación.

Trampa 08

Índice ≠ magia

El optimizador decide si conviene usarlo.

33 · Predicción de la clase

¿Qué creo que
pudieron haber visto?

Hasta que aparezca el PDF esto sigue siendo una estimación, pero ahora está mucho mejor acotada.

95%

Datos geométricos

Qué son y para qué sirven.

95%

POINT

Coordenadas X/Y.

90%

7 tipos

point, line, lseg, box, path, polygon, circle.

85%

Sintaxis

Cómo escribir cada tipo.

75%

Operadores

contención, posición, distancia...

70%

Funciones

area, center, length, radius...

60%

Intersecciones

?# y #

45%

Índices

GiST o idea de indexación espacial.

30%

SP-GiST / KNN

Más probable si profundizaron rendimiento.

Lo que aprendería sí o sí hoy

Prioridad recomendada:

1. Concepto
2. Tipos
3. Relaciones
4. SQL
5. Índices

No arrancaría por GiST si todavía confundís LINE con LSEG.
Repaso activo

Flashcards

Intentá responder antes de hacer clic.

Concepto

¿Geométrica y geográfica son lo mismo?

clic

No

Una BD geométrica puede trabajar simplemente en un plano abstracto X/Y.

Tipos

LINE vs LSEG

clic

Diferencia

LINE es infinita. LSEG tiene dos extremos.

Tipos

PATH cerrado vs POLYGON

clic

Semántica

PATH = recorrido. POLYGON = región con interior.

Operador

¿Qué hace @>?

clic

Contiene

Pregunta si el primer objeto contiene al segundo.

Operador

¿Qué hace <->?

clic

Distancia

Devuelve distancia entre tipos compatibles.

Consulta

¿Qué es KNN?

clic

K vecinos cercanos

Encontrar los K objetos más cercanos a una consulta.

Índice

¿GiST = R-tree?

clic

No exactamente

GiST es un framework generalizado sobre el que pueden implementarse distintos esquemas.

Índice

¿Qué es un quadtree?

clic

Partición espacial

Divide repetidamente una región 2D en cuatro partes.

Consulta

¿Qué es Point Location?

clic

Ubicar un punto

Determinar qué región contiene una posición dada.

Consulta rápida

Glosario

Dato geométrico Valor que representa un objeto espacial matemático.
Plano cartesiano Espacio bidimensional organizado mediante X e Y.
POINT Punto definido por dos coordenadas.
LINE Recta infinita.
LSEG Segmento finito entre dos puntos.
BOX Rectángulo alineado a los ejes.
PATH Secuencia de puntos conectados; puede ser abierta o cerrada.
POLYGON Región poligonal que incluye su interior.
CIRCLE Región definida mediante centro y radio.
@> Primer objeto contiene al segundo.
<@ Primer objeto está contenido en o sobre el segundo.
&& Solapamiento.
?# Comprueba intersección entre tipos compatibles.
# Puede significar número de puntos o intersección según su uso.
## Punto del segundo objeto más cercano al primero.
<-> Distancia.
~= Igualdad geométrica.
Point Location Determinar qué región contiene un punto.
Range Query Recuperar objetos dentro o relacionados con una región.
Spatial Join JOIN cuya condición es geométrica.
Nearest Neighbour Búsqueda del objeto más cercano.
KNN Búsqueda de los K vecinos más cercanos.
Bounding Box Rectángulo envolvente de una geometría.
MBR Minimum Bounding Rectangle.
GiST Generalized Search Tree. Framework de indexación.
SP-GiST Space-Partitioned GiST.
Quadtree Árbol que subdivide el plano en cuatro regiones.
k-d tree Árbol para organizar puntos en espacios multidimensionales.
R-tree Familia de estructuras pensadas para objetos multidimensionales.
Filter / Refine Primero descartar candidatos aproximadamente y después comprobar exactamente.
OGC Geometry Modelo geométrico estándar utilizado por sistemas como PostGIS.
Autoevaluación

Quiz

Hacelo sin volver arriba.

1. ¿Cuál es la idea central de una base de datos geométrica?
Guardar imágenes JPG
Tratar objetos geométricos como tipos de datos consultables
Guardar exclusivamente mapas
Correcto: los objetos geométricos pasan a formar parte del modelo de datos.
2. ¿Cuál representa un segmento finito?
line
path
lseg
LSEG significa line segment.
3. ¿Qué diferencia esencial hay entre PATH cerrado y POLYGON?
Polygon considera la región interior
Path no usa puntos
Polygon sólo puede tener tres vértices
Exacto: el polygon representa una región con interior.
4. ¿Qué hace <->?
Contención
Distancia
Conversión
Es el operador de distancia.
5. ¿Qué significa polygon @> point?
El polígono está a la derecha
Ambos tienen igual área
El polígono contiene al punto
@> significa contiene.
6. ¿Qué consulta pregunta “qué región contiene este punto”?
Point Location
KNN
Aggregate Query
Es el problema clásico de point location.
7. ¿Qué estructura divide repetidamente una región 2D en cuatro?
B-tree
Quadtree
Hash table
Quad = cuatro.
8. ¿Qué representa mejor GiST?
Una función para calcular área
Un único R-tree fijo
Un framework generalizado de indexación
GiST es un framework para distintos esquemas de búsqueda.
9. ¿Qué busca KNN?
Los K objetos más cercanos
Los K objetos más grandes
Todos los polígonos
KNN = K Nearest Neighbours.
10. Si dos bounding boxes se superponen...
Las geometrías reales necesariamente se intersectan
Las geometrías son candidatas, pero puede hacer falta una comprobación exacta
Las geometrías son iguales
Ésa es la idea del filtrado y refinamiento.
11. ¿Qué método de índice soporta estructuras como quadtree y k-d tree?
Hash
B-tree
SP-GiST
SP-GiST está orientado a árboles de búsqueda basados en particiones.
12. ¿Qué operador representa igualdad geométrica habitual para tipos compatibles?
=
~=
&&
PostgreSQL documenta ~= como la noción habitual de igualdad para point, box, polygon y circle.
Repaso final

Si entendés esto,
entendiste el núcleo

01 · Representación

Una geometría puede almacenarse como tipo de dato.

02 · Tipos

PostgreSQL incluye: point, line, lseg, box, path, polygon y circle.

03 · Semántica

LINE no es LSEG. PATH cerrado no es POLYGON.

04 · Relaciones

Contención, intersección, dirección, orientación y distancia.

05 · Consultas

Point location, range query, intersection, KNN y spatial join.

06 · SQL

SQL normal + condiciones geométricas.

07 · Índices

GiST y SP-GiST permiten búsquedas multidimensionales.

08 · Rendimiento

No alcanza con guardar geometrías: hay que poder encontrarlas eficientemente.

La pregunta que conecta toda la unidad:

Si tengo miles o millones de objetos geométricos:

¿cómo los represento, almaceno y consulto eficientemente según su posición, forma, relación y distancia?
Bonus · si la materia profundiza

Geometría computacional

A partir de acá, la pregunta deja de ser solamente “¿qué operador SQL uso?” y pasa a ser: “¿qué algoritmo o estructura resuelve mejor esta consulta?”

Range Searching

Encontrar objetos dentro de una región.

Point Location

Encontrar la región que contiene un punto.

Nearest Neighbour

Encontrar objetos próximos.

Voronoi

Dividir el espacio según proximidad a distintos sitios.

Delaunay

Triangulación relacionada con Voronoi.

Sweep Line

Técnica para resolver problemas de intersección de manera eficiente.

R-tree quadtree k-d tree range tree Voronoi Delaunay sweep line octree
No estudies esto primero.

Antes dominá:
tipos → relaciones → consultas → índices.
Fuentes

Para seguir estudiando

Si después querés comprobar, ampliar o practicar algo, iría primero a documentación oficial.