El manejo de datos espaciales es una capacidad fundamental en muchas aplicaciones modernas, desde sistemas de información geográfica (SIG) hasta servicios basados en la localización. MySQL, una de las bases de datos más populares del mundo, ofrece soporte robusto para almacenar y manipular este tipo de información a través de sus tipos de datos espaciales, siendo el tipo GEOMETRY el pilar central.

El tipo GEOMETRY es un supertipo que representa una entidad en un espacio euclidiano bidimensional. Engloba diversas formas geométricas como puntos, líneas, polígonos y colecciones de estas. Para interactuar con estos datos, especialmente para el intercambio de información, MySQL utiliza dos formatos estándar reconocidos globalmente: Well-Known Text (WKT) y Well-Known Binary (WKB).

Formatos Estándar para Datos Espaciales en MySQL
MySQL soporta principalmente dos formatos estándar para representar objetos geométricos en consultas y para el intercambio de datos. Estos formatos son cruciales para asegurar la interoperabilidad y la facilidad de uso al trabajar con datos espaciales.
Well-Known Text (WKT): El Formato Legible
El formato Well-Known Text (WKT) es una representación de valores geométricos diseñada para intercambiar datos espaciales en formato ASCII. Su principal ventaja es que es legible por humanos, lo que facilita la depuración y la comprensión de los datos espaciales.
La especificación OpenGIS define una gramática formal para escribir valores WKT. Aquí te mostramos algunos ejemplos de representaciones WKT para diferentes tipos de objetos geométricos:
Un Punto: Es la forma geométrica más básica, representando una única ubicación en el espacio.
POINT(15 20)
Es importante notar que en el formato WKT, las coordenadas de un punto se especifican sin una coma de separación (por ejemplo, 15 20). Esto difiere de la sintaxis utilizada en la función SQL Point() de MySQL, que sí requiere una coma entre las coordenadas (por ejemplo, Point(15, 20)). Es fundamental usar la sintaxis apropiada según el contexto de la operación espacial que se esté realizando. Por ejemplo, para crear un objeto Point a partir de una cadena WKT, se utiliza una función como ST_GeomFromText():
ST_GeomFromText('POINT(15 20)')
Una LineString: Representa una secuencia de puntos conectados, formando una línea.
LINESTRING(0 0, 10 10, 20 25, 50 60)
En una LineString WKT, los pares de coordenadas de los puntos están separados por comas.
Un Polígono: Representa una región cerrada definida por una o más anillos (el exterior y opcionalmente interiores para huecos).
POLYGON((0 0,10 0,10 10,0 10,0 0),(5 5,7 5,7 7,5 7, 5 5))
Un Polígono en WKT se define mediante uno o varios anillos lineales. El primer anillo representa el límite exterior, y los subsiguientes (si los hay) representan agujeros interiores. Cada anillo se define como una secuencia cerrada de puntos.
Un MultiPoint: Representa una colección de uno o más puntos.
MULTIPOINT(0 0, 20 20, 60 60)
Las funciones espaciales en MySQL que aceptan representaciones WKT de valores MultiPoint, como ST_MPointFromText() o ST_GeomFromText(), permiten que los puntos individuales dentro de la colección estén opcionalmente rodeados por paréntesis. Ambas sintaxis son válidas:
ST_MPointFromText('MULTIPOINT (1 1, 2 2, 3 3)')
ST_MPointFromText('MULTIPOINT ((1 1), (2 2), (3 3))')
Un MultiLineString: Representa una colección de uno o más LineStrings.
MULTILINESTRING((10 10, 20 20), (15 15, 30 15))
Cada LineString dentro de un MultiLineString WKT está encerrado entre paréntesis.
Un MultiPolygon: Representa una colección de uno o más Polígonos.
MULTIPOLYGON(((0 0,10 0,10 10,0 10,0 0)),((5 5,7 5,7 7,5 7, 5 5)))
Similar a MultiLineString, cada Polígono dentro de un MultiPolygon WKT está encerrado entre un par adicional de paréntesis.
Una GeometryCollection: Representa una colección de uno o más objetos GEOMETRY de cualquier tipo.
GEOMETRYCOLLECTION(POINT(10 10), POINT(30 30), LINESTRING(15 15, 20 20))
Una GeometryCollection WKT puede contener cualquier combinación de los tipos geométricos simples o colecciones. Los objetos individuales dentro de la colección están separados por comas.
Well-Known Binary (WKB): El Formato Binario Eficiente
El formato Well-Known Binary (WKB) es una representación de valores geométricos utilizada para intercambiar datos espaciales como flujos binarios. Estos flujos binarios suelen representarse en MySQL como valores BLOB que contienen la información geométrica en formato WKB. Este formato también está definido por la especificación OpenGIS y el estándar ISO SQL/MM Parte 3: Espacial.
WKB es ideal para la transferencia y el almacenamiento eficiente de datos espaciales, ya que es mucho más compacto que WKT. Utiliza enteros sin signo de 1 byte, enteros sin signo de 4 bytes y números de doble precisión de 8 bytes (formato IEEE 754).
Por ejemplo, un valor WKB que corresponde a POINT(1 -1) consiste en una secuencia de bytes. Analicemos la estructura de un WKB simple como el de un punto:
Un valor WKB para POINT(1 -1) podría representarse en hexadecimal como esta secuencia de 21 bytes:
0101000000000000000000F03F000000000000F0BF
Esta secuencia binaria se compone de varios elementos:
| Componente WKB | Tamaño (Bytes) | Valor Ejemplo (Hex) | Descripción |
|---|---|---|---|
| Indicador de orden de bytes | 1 | 01 | Indica si el almacenamiento es little-endian (01) o big-endian (00). Little-endian y big-endian también se conocen como Network Data Representation (NDR) y External Data Representation (XDR), respectivamente. |
| Tipo WKB | 4 | 01000000 | Un código que indica el tipo de geometría. MySQL utiliza valores del 1 al 7 para indicar Point (1), LineString (2), Polygon (3), MultiPoint (4), MultiLineString (5), MultiPolygon (6) y GeometryCollection (7). En el ejemplo, 01000000 (en little-endian) representa el tipo 1, que es Punto. |
| Coordenada X | 8 | 000000000000F03F | El valor de la coordenada X, representado como un número de doble precisión. Corresponde al valor 1.0. |
| Coordenada Y | 8 | 000000000000F0BF | El valor de la coordenada Y, representado como un número de doble precisión. Corresponde al valor -1.0. |
Para valores geométricos más complejos que un simple Punto, las estructuras de datos WKB son más elaboradas, siguiendo las definiciones detalladas en la especificación OpenGIS.
Almacenamiento Interno en MySQL
Es importante destacar que, internamente, MySQL almacena los valores GEOMETRY en un formato que no es idéntico ni a WKT ni a WKB. El formato de almacenamiento interno es similar a WKB, pero incluye 4 bytes iniciales adicionales para indicar el SRID (Spatial Reference Identifier), que especifica el sistema de coordenadas de la geometría.
Conversión entre Formatos
MySQL proporciona un conjunto de funciones para convertir entre estos diferentes formatos de datos espaciales. Por ejemplo, puedes usar funciones como ST_GeomFromText() para convertir una cadena WKT a un objeto GEOMETRY que MySQL pueda almacenar o manipular, o funciones inversas como ST_AsText() para obtener la representación WKT de un objeto GEOMETRY almacenado. Estas funciones son esenciales para importar, exportar y procesar datos espaciales en tu base de datos.
Comparativa Rápida: WKT vs WKB
| Característica | Well-Known Text (WKT) | Well-Known Binary (WKB) |
|---|---|---|
| Legibilidad | Alta (Texto ASCII) | Baja (Flujo binario) |
| Formato | Texto | Binario |
| Uso Principal | Intercambio de datos legible, depuración, entrada manual. | Intercambio de datos eficiente, almacenamiento en BLOBs. |
| Tamaño | Generalmente mayor que WKB para la misma geometría. | Generalmente menor que WKT. |
| Complejidad de Parsing | Requiere parsing de texto. | Requiere interpretación binaria. |
Preguntas Frecuentes sobre Tipos GEOMETRY y Formatos
Aquí respondemos algunas preguntas comunes sobre el uso de tipos GEOMETRY y sus formatos en MySQL.
¿Qué es el tipo de datos GEOMETRY en MySQL?
Es un tipo de datos fundamental en MySQL para almacenar y manipular información espacial, como puntos, líneas, polígonos y colecciones de estos.
¿Cuáles son los formatos estándar para representar datos GEOMETRY?
Los dos formatos estándar principales son Well-Known Text (WKT) y Well-Known Binary (WKB).
¿Cuál es la diferencia principal entre WKT y WKB?
WKT es un formato basado en texto (ASCII) legible por humanos, ideal para la visualización y depuración. WKB es un formato binario, más compacto y eficiente para el almacenamiento y la transferencia de datos.
¿MySQL almacena los datos GEOMETRY exactamente en formato WKT o WKB?
No. MySQL utiliza un formato de almacenamiento interno que es similar a WKB pero incluye información adicional, específicamente el SRID (Spatial Reference Identifier) al inicio.
¿Puedo convertir datos entre WKT, WKB y el formato interno de MySQL?
Sí, MySQL proporciona un conjunto de funciones espaciales diseñadas específicamente para realizar estas conversiones, como ST_GeomFromText() para convertir de WKT al formato interno, o ST_AsText() para convertir del formato interno a WKT.
¿Qué tipos de objetos geométricos puedo representar con WKT y WKB?
Ambos formatos pueden representar una amplia gama de tipos geométricos, incluyendo Punto, LineString, Polígono, MultiPoint, MultiLineString, MultiPolygon y GeometryCollection.
Conclusión
El soporte para tipos de datos espaciales en MySQL, centrado en el tipo GEOMETRY, es una característica poderosa para aplicaciones que manejan información geográfica. Comprender los formatos estándar WKT y WKB es esencial para trabajar eficazmente con estos datos, ya sea para importarlos, exportarlos o utilizarlos en consultas espaciales. Mientras que WKT ofrece legibilidad y facilidad de uso para el desarrollo y la depuración, WKB proporciona la eficiencia necesaria para el almacenamiento y el intercambio de grandes volúmenes de datos espaciales. Con las funciones de conversión adecuadas, MySQL facilita la interacción fluida entre estos formatos y su representación interna.
Si quieres conocer otros artículos parecidos a MySQL: Tipos GEOMETRY y Formatos Espaciales puedes visitar la categoría MySQL.

Aprende mas sobre MySQL