En este artículo exploraremos qué son las coordenadas Well-Known Binary (WKB), cómo funcionan dentro de PostgreSQL y PostGIS, y cómo puedes aprovecharlas para gestionar información espacial de manera eficiente. Además, veremos ejemplos prácticos sobre cómo manejar datos espaciales utilizando WKB en tus consultas SQL.
Well-Known Binary es una representación binaria de objetos geométricos utilizada comúnmente en bases de datos espaciales. Esta forma de codificación es parte de la especificación Simple Feature Access (SFA) de la Open Geospatial Consortium (OGC). WKB se utiliza principalmente para almacenar y transferir geometrías espaciales de manera eficiente y compacta, ya que reduce el tamaño de los datos comparado con otros formatos como Well-Known Text (WKT), que es la representación en texto plano.
Las coordenadas WKB permiten representar geometrías como:
WKB es ampliamente utilizado en bases de datos geoespaciales, como PostGIS, para serializar datos espaciales para el almacenamiento o la transmisión a través de redes.
PostgreSQL es una base de datos relacional que soporta extensiones para agregar capacidades adicionales. PostGIS es una de estas extensiones que agrega soporte para datos geoespaciales en PostgreSQL. Gracias a PostGIS, es posible almacenar, consultar y analizar geometrías espaciales usando tipos de datos especializados y funciones geoespaciales.
Para trabajar con WKB en PostgreSQL, necesitas tener instalada la extensión PostGIS. Puedes verificar si PostGIS está instalada en tu base de datos ejecutando el siguiente comando:
SELECT PostGIS_Version();
Si la extensión no está disponible, puedes instalarla con:
CREATE EXTENSION postgis;
PostGIS añade varios tipos de datos espaciales a PostgreSQL, entre los cuales destacan:
Estos tipos pueden ser usados para almacenar datos en diversos formatos, incluyendo WKB.
PostGIS provee funciones específicas para convertir geometrías a y desde el formato Well-Known Binary (WKB). A continuación, algunas de las funciones clave que permiten manejar WKB en PostgreSQL:
ST_AsBinary(geometry)
Convierte una geometría en su representación WKB. Esta función es útil cuando necesitas extraer los datos en formato binario para transferencia o almacenamiento.
SELECT ST_AsBinary(geom) FROM my_spatial_table;
ST_GeomFromWKB(bytea)
Convierte un valor WKB de vuelta a una geometría. Esto permite leer datos almacenados o recibidos en formato binario y convertirlos en objetos geométricos que PostGIS pueda manejar.
SELECT ST_GeomFromWKB(wkb_column) FROM my_spatial_table;
ST_AsEWKB(geometry)
Devuelve una geometría en formato Extended Well-Known Binary (EWKB), que incluye el SRID (Spatial Reference System Identifier). El EWKB es una extensión de WKB que incluye información adicional sobre el sistema de referencia espacial de las geometrías.
SELECT ST_AsEWKB(geom) FROM my_spatial_table;
ST_GeomFromEWKB(bytea)
Convierte una representación EWKB en una geometría válida, permitiendo así reconstruir geometrías que incluyen el SRID.
SELECT ST_GeomFromEWKB(ewkb_column) FROM my_spatial_table;
A continuación, presentamos un ejemplo práctico donde almacenamos un punto geométrico en formato WKB en una tabla de PostgreSQL y luego lo convertimos de vuelta a su representación geométrica.
Primero, vamos a crear una tabla que almacene una geometría y su representación en WKB.
CREATE TABLE spatial_data (
id SERIAL PRIMARY KEY,
geom GEOMETRY(Point, 4326),
geom_wkb BYTEA
);
Ahora, insertaremos un punto geométrico y almacenaremos su representación WKB en la columna geom_wkb
.
INSERT INTO spatial_data (geom, geom_wkb)
VALUES (
ST_SetSRID(ST_MakePoint(-71.060316, 48.432044), 4326),
ST_AsBinary(ST_SetSRID(ST_MakePoint(-71.060316, 48.432044), 4326))
);
En este ejemplo, estamos almacenando un punto con coordenadas geográficas (latitud y longitud) en ambas su representación geométrica y su formato WKB.
Para recuperar los datos almacenados en WKB y convertirlos de vuelta a su representación geométrica, podemos usar la función ST_GeomFromWKB
.
SELECT id, ST_AsText(geom), ST_AsText(ST_GeomFromWKB(geom_wkb)) FROM spatial_data;
El resultado de esta consulta mostrará tanto la geometría original como la geometría reconstruida desde el valor WKB.
Cuando trabajas con geometrías en PostgreSQL/PostGIS, puedes elegir entre varios formatos para almacenar y manipular los datos espaciales. Aquí una comparación entre WKB y otros formatos populares:
| Formato | Descripción | Ventajas | Desventajas |
|----------|--------------------------------------------|---------------------------------------------|-------------------------------------------|
| WKB | Representación binaria de geometrías | Compacto, eficiente para transferencia | Difícil de interpretar visualmente |
| WKT | Representación de texto de geometrías | Fácil de leer y depurar | Más grande en tamaño, menos eficiente |
| GeoJSON | JSON para datos geoespaciales | Formato web estándar, fácil de usar en API | Mayor tamaño, menos eficiente que WKB |
| EWKB | Extensión de WKB que incluye SRID | Incluye información sobre el sistema de referencia espacial | Mayor complejidad |
Las coordenadas Well-Known Binary (WKB) son una poderosa herramienta para manejar geometrías en bases de datos espaciales, especialmente cuando se busca eficiencia en almacenamiento y procesamiento. PostgreSQL, a través de la extensión PostGIS, ofrece funciones robustas para trabajar con WKB, lo que facilita la integración y manejo de datos espaciales en tus aplicaciones.
Al aprovechar WKB en tus proyectos, puedes reducir el tamaño de almacenamiento de tus datos y mejorar la eficiencia en la transferencia y manipulación de geometrías complejas, especialmente en escenarios que implican grandes volúmenes de datos espaciales.
Si tu aplicación requiere un manejo avanzado de datos geoespaciales, sin duda, PostGIS y WKB son herramientas que debes considerar para optimizar tanto el rendimiento como la interoperabilidad.
Jorge García
Fullstack developer