Breve introducción GeoSPARQL

Qué es?

Un estándar que permite la consulta y representación de datos geoespaciales en la web semántica.


Usando RDF y SPARQL trabajamos sobre relaciones explícitas.

un ejemplo:

SELECT ?nombre WHERE {
  :persona1 foaf:knows ?p .
  ?p foaf:name ?nombre . 
}


Algo como :persona1 foaf:knows :persona2 tiene que existir para que esto sirva de algo.

Relaciones implícitas


¿Y si queremos preguntar por otro tipo de relaciones?

¿Qué hay cerca de esta casa?
¿Cuales son los montes de cierto país?
¿Cuantas carreteras se cruzan con esta?

Podríamos definir una relación que indique que una casa esta cerca de otra. Algo así como:

:cerca a rdf:Property
:cerca rdfs:range :edificio
:cerca rdfs:domain :edificio

Imaginemos que consideramos todos los edificios a 1 km como cercanos. 
En una población con tan solo 20 edificios en 1km tenemos que explicitar 400 relaciones.

O(n^2)

GeoSPARQL permite explorar las relaciones implicitas de naturaleza espacial simplemente indicando la localizacion (y forma) de los recursos.


Es tanto un vocabulario como una extensión de SPARQL.

Datos geoespaciales

Representan la información geográfica de diferentes rasgos terrestres (edificios, océanos, ríos, etc.)

Coordenadas o conjuntos de ellas.


Sistemas de referencia de coordenadas (CRS)


Sistema para localizar un punto en la superficie de la tierra a partir de sus coordenadas.

Un estandar: WSG84
Usado por los sistemas GPS 

Un punto tiene diferentes coordenadas dependiendo del CRS usado.

Diferentes tipos de datos


Puntos
1 coordenada
Picos de montaña, monumentos, etc.

Lineas
 2 o mas coordenadas 
Carreteras, caminos, ríos, etc.

Polígonos
Mismo concepto que en geometria. 
Edificios, países, lagos, etc.

Representaciones: WKT

Punto 
POINT(30 50)

Linea
LINESTRING(1 1, 5 5, 10 10, 20 20)

Polígono
POLYGON((0 0, 10 0, 10 10, 00))
(doble paréntesis: se puede incluir mas de un polígono)

Representaciones: GeoJSON

No valido en GeoSPARQL... aun.
{
  "type": "Feature",
  "properties": {
    "nombre": "Un punto"
  },
  "geometry": {
     "type": "Point",
      coordinates: [1, 1]
  }
} 
Permite agregar datos a la geometría.
En un futuro estará en GeoSPARQL.

Vocabulario

Clases


geo:SpatialObject
Clase de nivel mas alto. Tipo de cualquier recurso que tenga una representación espacial.

geo:Feature
Representa un rasgo terrestre de alto nivel.

geo:Geometry
Representa una geometria.

Feature


Una Feature es simplemente un recurso que tiene una representación espacial.

Nunca debería ser del tipo Geometry, son disjuntos.

 
:monteA a geo:Feature 
:monteA :nombre "Teide" 
:monteA :altitud "3718"^^xsd:Integer 


Para relacionarlas con rasgos espaciales:

geo:hasGeometry 

geo:hasDefaultGeometry 


geo:hasGeometry rdfs:range geo:Geometry
geo:hasGeometry rdfs:domain geo:Feature
geo:hasDefaultGeometry rdf:subPropertyOf geo:hasGeometry 
geo:hasDefaultGeometry rdfs:range geo:Geometry
geo:hasDefaultGeometry rdfs:domain geo:Feature

1 Feature - 1 o mas Geometrías

(p.ej. Base del monte y punto mas alto)


1 Feature - 1 Geometría por defecto

Se usa para cálculos espaciales cuando no se ha especificado una geometría sobre la que realizara

Geometría

Contiene únicamente los datos geométricos.

Para representarlos:
geo:hasSerialization

geo:asWKT y geo:asGML


geo:asWKT rdfs:subPropertyOf geo:hasSerialization
geo:asWKT rdfs:domain geo:Geometry
geo:asWKT rdfs:range geo:wktLiteral

geo:asGML rdfs:subPropertyOf geo:hasSerialization
geo:asGML rdfs:domain geo:Geometry
geo:asGML rdfs:range geo:gmlLiteral


wktLiteral y gmlLiteral. Representación en WKT (Well Known Text) o GML (Geography Markup Language) de la geometría.
:monte a geo:Feature
:monte geo:hasGeometry :geometria

:geometria a geo:Geometry
:geometria geo:asWKT "Point(0 0)"^^geo:wktLiteral

Con esto ya se pueden hacer cálculos espaciales.

Se puede agregar mas propiedades espaciales a la geometría, como dimensiones.

SPARQL



2 Aportes:


  • Una serie de funciones espaciales
  • Una serie de relaciones que no necesitan ser explicitadas

Funciones espaciales

Definidas en <http://www.opengis.net/def/function/geosparql/>


SELECT ?e
WHERE {
 ?e a :Edificio .
 ?e geo:hasGeometry ?egeo .
 :Monumento1 ogc:hasGeometry ?mgeo .
 FILTER(geof:distance(?egeo, ?mgeo, units:km) < 3)
}

    Todas las casas a 3 km de distancia de un monumento.


Las unidades están definidas en 
<http://www.opengis.net/def/uom/OGC/1.0/>

Buffer de 100m:


SELECT ?geometry
WHERE {
  :edificio1 geo:hasGeometry ?geom .
  ?geom geo:asWKT ?wkt .
  BIND(geof:buffer(?wkt, 100, units:metre) AS ?geometry)
}

Un buffer obtiene lo siguiente: 

Propiedades

Definidas en la ontología: <http://www.opengis.net/ont/geosparql#>

SELECT ?rio
WHERE {
 ?rio a :Rio .
 ?rio geo:hasGeometry ?rgeom .
 :gipuzkoa geo:hasGeometry ?ggeom . 
 ?rgeom geo:sfIntersects ?ggeom .
}
Obtiene todos los ríos que pasan por Gipuzkoa.

No hay ningún triple con geo:sfInterects, el motor espacial lo calculara automáticamente.

Se han sacado las geometrías, pero se puede calcular sobre los Features directamente.

Como usarlo

Pocas implementaciones por ahora.


Parliament


Strabon


uSeekM

Parliament


Motor de inferencia + endpoint + BD semantica

Mi recomendación para empezar, fácil de instalar y probar

Rendimiento limitado

Strabon


Ademas de GeoSPARQL tiene su propio protocolo espacial.

Solo implementa un subconjunto de todo GeoSPARQL.

uSeekM


Extension para Sesame.

Requiere una BD PostgreSQL + Postgis para funcionar.

El mas completo.

Mas información


Especificación de GeoSPARQL 

2 Papers


Endpoint


GEOSPARQL

By Aimar Rodriguez

GEOSPARQL

  • 1,585