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.
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.
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.