Hace unos días me preguntaba un compañero si conocía alguna librería Java para validar un geojson. Al contrario que en javascript, no encontramos (o yo no he encontrado) muchas utilidades en Java, capaces de verificar o validar la estructura de un geojson. En un principio mi respuesta fué que mirase herramientas de GeoTools, concretamente el plugin GeoJSON, o bien usar alguno de los serializadores/deseliarizadores como jackson-geojson o geojson-jackson. La verdad es que el ecosistema Java no es tan rico para tratar con un geojson como el de javascript, donde encontramos bastante mas variedad.
No obstante, esas herramientas no cumplian exactamente con la necesidad que mi compañero requería. Básicamente validar el esquema del geojson. De esta manera, viendo que no encontraba alguna herramienta para este cometido y no me era desconocido el tema, me puse manos a la obra. Algunas veces la mejor manera de obtener alguna funcionalidad que necesitas es hacerla tu mismo.
Lo primero aclarar que un Geojson es un JSON con información espacial. como se puede leer en su especificacion RFC-7946:
GeoJSON is a geospatial data interchange format based on JavaScript Object Notation (JSON). It defines several types of JSON objects and the manner in which they are combined to represent data about geographic features, their properties, and their spatial extents. GeoJSON uses a geographic coordinate reference system, World Geodetic System 1984, and units of decimal degrees.
Partiendo de esa premisa, la idea ha sido implementar un validador sencillo que permita verificar la correción del esquema de un geojson. Como he llamado, en un alarde de originalidad fantasiosa geojson validator. El código está disponible en Github, listo para usar/mejorar.
Geojson Validator está implementado en Java y se apoya en json-schema. Realiza la validación de un geojson en función de su esquema (geojson schema), o de solo la componente geométrica (geometry schema). Aunque los esquemas para el bbox y el crs están includos no se ha implementado la validación. Mencionar que el RFC indica que el sistema de
referencia de coordenadas (crs) para todas las coordenadas GeoJSON es un
sistema de referencia de coordenadas geográficas, que utiliza el World
Geodetic System 1984 (WGS 84) [WGS84], con lo cual en el geojson no tiene por que ir la propiedad de crs.
¿Era necesaria esta librería?
Bueno, pues no lo tengo del todo claro, ya que se podría realizar la validación de otras maneras, por ejemplo haciendo uso del Bean Validation. Lo que si tengo claro es que cubre la necesidad requerida por mi compañero. Con eso me vale. Si además alguien más se anima a mejorar la utilidad (agradezco ya las aportaciones de Agustín Ventura) y la pueden usar mas desarrolladores sería ESTUPENDO.
Como siempre son bienvenidas los comentarios y mejoras.
Actualización
A partir de la versión 0.0.3 Geojson Validator también valida si la geometría es topológicamente correcta.
A partir de la versión 0.0.4 Geojson Validator también valida si el esquema para bbox y crs
Comentarios