QGIS, conocido anteriormente como Quantum GIS, es una herramienta de escritorio de código abierto para Sistemas de Información Geográfica (SIG). Está desarrollado en C++ utilizando el framework Qt, lo que le permite ejecutarse de manera fluida en plataformas Windows, macOS, Linux y Unix.
Tipos de Datos Geográficos
El sistema gestiona principalmente dos categorías de datos:
- Datos Ráster: Representaciones basadas en mallas de píxeles o celdas. Se utilizan comúnmente para imágenes satelitales, modelos digitales de elevación y mapas de distribución térmica. Los formatos habituales incluyen GeoTIFF, PNG y JPEG.
- Datos Vectoriales: Estructuras basadas en coordenadas matemáticas que definen elementos geométricos. Se dividen en tres tipos de entidades:
- Puntos: Ubicaciones específicas como ciudades o estaciones de servicio.
- Líneas (Cadenas de líneas): Elementos lineales como redes viales o cauces de ríos.
- Polígonos: Áreas cerradas que representan fronteras políticas, lagos o parcelas de tierra.
Persistencia en Bases de Datos Espaciales
Para el almacenamiento escalable, QGIS se integra con diversas bases de datos espaciales. Aunque es compatible con Oracle Spatial, MySQL y SQL Server, su integración nativa más robusta es con PostgreSQL mediante la extensión PostGIS.
Exportación y Formatos de Intercambio
QGIS permite la exportación de capas a formatos legibles por humanos y sistemas externos, como CSV y GeoJSON. Una de las representaciones más utilizadas para la interoperabilidad es el WKT (Well-Known Text), un estándar de marcado de texto para representar objetos geométricos vectoriales.
Ejemplo de Estructura GeoJSON
{
"type": "Polygon",
"coordinates": [
[
[67.406616, 31.219848],
[66.968536, 31.312582],
[66.386261, 30.934035],
[67.406616, 31.219848]
]
]
}
Ejemplo de Estructura WKT Correspondiente
POLYGON ((67.406616 31.219848, 66.968536 31.312582, 66.386261 30.934035, 67.406616 31.219848))
Implementación de Conversión en Java con GeoTools
Para automatizar la transformación entre GeoJSON y WKT en aplicaciones backend, se utiliza la librería GeoTools. A continuación se prseentan las dependencias de Maven necesarias y la lógica de implementación.
<!-- Dependencias principales de GeoTools -->
<dependency>
<groupId>org.geotools</groupId>
<artifactId>gt-geojson</artifactId>
<version>24.0</version>
</dependency>
<dependency>
<groupId>org.locationtech.jts</groupId>
<artifactId>jts-core</artifactId>
<version>1.18.1</version>
</dependency>
La siguiente clase utilitaria permite realizar las conversiones bidireccionales:
import org.geotools.geojson.geom.GeometryJSON;
import org.locationtech.jts.geom.Geometry;
import org.locationtech.jts.io.WKTReader;
import java.io.StringWriter;
import java.io.Reader;
import java.io.StringReader;
public class ConversorEspacial {
/**
* Transforma una cadena en formato WKT a una representación GeoJSON.
*/
public static String deWktAGeoJson(String textoWkt) {
try {
WKTReader lector = new WKTReader();
Geometry geometria = lector.read(textoWkt);
StringWriter salidaCodificada = new StringWriter();
GeometryJSON geoJsonEngine = new GeometryJSON(15);
geoJsonEngine.write(geometria, salidaCodificada);
return salidaCodificada.toString();
} catch (Exception e) {
return "Error en procesamiento WKT: " + e.getMessage();
}
}
/**
* Transforma un objeto JSON a formato de texto plano WKT.
*/
public static String deGeoJsonAWkt(String rawJson) {
try {
GeometryJSON gJson = new GeometryJSON();
Reader flujoLectura = new StringReader(rawJson);
Geometry objetoGeometria = gJson.read(flujoLectura);
return objetoGeometria.toText();
} catch (Exception e) {
return "Error al convertir GeoJSON a WKT";
}
}
}
En un entorno Spring Boot, se puede exponer esta funcionalidad mediante un controlador REST para procesar peticiones de transformación de datos geográficos dinámicamente.