Hi all, I wanted to make some interesting query with spatial data but I couldn't make it work with jena so far. I've read the documentation about the support available in Jena for spatial searches and it seems I can make SPARQL queries to know what locations are within a circle around a given position, if a location is inside a box area and some other. I wrote an assembler file (shown below) to set fuseki, jena TDB and the Lucene spatial index. I started importing some triples with geographical data (shown below), points and polygons, in my dataset using tdbloader and the assembler file running the command $tdbloader --loc Store/fusepoolp3/ spatial-data.ttl After that I run the indexer running the command $java jena.spatialindexer --desc=jena-spatial-assembler.ttl and I got the message INFO 36 (36 per second) properties indexed I checked that the indexer based on Lucene had created its index files in the folder defined in the assembler file. After this I have started fuseki using the same assembler file and tried the following query to search for locations within a circle of 10 km from a position close to the Bristol International Airport (lat: 51.3827, long: -2.71909) PREFIX spatial: <http://jena.apache.org/spatial#>PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT ?placeName { ?place spatial:nearby (51.38 -2.7 10 'km') . ?place rdfs:label ?placeName} The response was ---------------------------------------------------------------------| placeName |===========================================| "Birmingham International Airport" || "Birmingham International Airport (wktLiteral)" || "Birmingham International Airport (wktLiteral_2)" | | "Cardiff International Airport" || "Bristol International Airport" || "London Gatwick Airport" || "Roma Fiumicino Airport" || "London Stansted Airport" || "Fake in Box Airport (wktLiteral)" || "Fake out of Box Airport (wktLiteral)" |-------------------------------------------------------------------- That is, also locations far from the reference position have been included like the airport of Rome (lat: 41.7998, long 12.2469). This result must be related with the following log message of Fuseki 20:12:33 WARN Failed to find the spatial index : tried context and as a spatial-enabled dataset20:12:33 WARN No text index - no text search performed but as I started fuseki using the same assembler file used to import the data I can't figure out why it's not able to find the index. I add below the content of the assembler file and the data file. =============================================== Assembler File =======================================## Example of a TDB dataset and spatial index @prefix : <http://localhost/jena_example/#> .@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix tdb: <http://jena.hpl.hp.com/2008/tdb#> .@prefix ja: <http://jena.hpl.hp.com/2005/11/Assembler#> .@prefix spatial: <http://jena.apache.org/spatial#> .@prefix fuseki: <http://jena.apache.org/fuseki#> . #Fuseki[] rdf:type fuseki:Server ;fuseki:services ( <#service_spatial_tdb>) . <#service_spatial_tdb> rdf:type fuseki:Service ; rdfs:label "TDB/spatial service" ; fuseki:name "ds" ; fuseki:serviceQuery "query" ; fuseki:serviceQuery "sparql" ; fuseki:serviceUpdate "update" ; fuseki:serviceUpload "upload" ; fuseki:serviceReadGraphStore "get" ; fuseki:serviceReadWriteGraphStore "data" ; fuseki:dataset :spatial_dataset ; .
# TDB[] ja:loadClass "com.hp.hpl.jena.tdb.TDB" .tdb:DatasetTDB rdfs:subClassOf ja:RDFDataset .tdb:GraphTDB rdfs:subClassOf ja:Model . # Spatial[] ja:loadClass "org.apache.jena.query.spatial.SpatialQuery" .spatial:SpatialtDataset rdfs:subClassOf ja:RDFDataset .#spatial:SpatialIndexSolr rdfs:subClassOf spatial:SpatialIndex .spatial:SpatialIndexLucene rdfs:subClassOf spatial:SpatialIndex . ## ---------------------------------------------------------------## This URI must be fixed - it's used to assemble the spatial dataset. :spatial_dataset rdf:type spatial:SpatialDataset ; spatial:dataset <#fusepoolp3> ; spatial:index <#indexLucene> ; . <#fusepoolp3> rdf:type tdb:DatasetTDB ; tdb:location "/home/luigi/jena/apache-jena-2.11.1/Store/fusepoolp3" ; tdb:unionDefaultGraph true ; . <#indexLucene> a spatial:SpatialIndexLucene ; spatial:directory <file:/home/luigi/jena/apache-jena-2.11.1/lucene> ; #spatial:directory "mem" ; spatial:definition <#definition> ; . <#definition> a spatial:EntityDefinition ; spatial:entityField "uri" ; spatial:geoField "geo" ; # custom SpatialContextFactory for 2) Well Known Text Literal spatial:spatialContextFactory "com.spatial4j.core.context.jts.JtsSpatialContextFactory" . ============================= RDF Data (turtle) =================================================@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .@prefix dbp: <http://dbpedia.org/resource/> .@prefix airports: <http://airports.dataincubator.org/airports/> .@prefix airports_sc: <http://airports.dataincubator.org/schema/> .@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .@prefix ogc: <http://www.opengis.net/ont/geosparql#> . airports:EGBB rdf:type airports_sc:LargeAirport ; geo:lat "52.4539"^^xsd:float ; geo:long "-1.74803"^^xsd:float ; rdfs:label "Birmingham International Airport" . airports:EGBB_WKT rdf:type airports_sc:LargeAirport ; ogc:asWKT "POINT(-1.74803 52.4539)"^^ogc:wktLiteral ; rdfs:label "Birmingham International Airport (wktLiteral)" . airports:EGBB_WKT_2 rdf:type airports_sc:LargeAirport ; ogc:asWKT "POINT(-1.74803 52.4539)"^^ogc:wktLiteral ; rdfs:label "Birmingham International Airport (wktLiteral_2)" . airports:EGFF rdf:type airports_sc:LargeAirport ; geo:lat "51.3967"^^xsd:float ; geo:long "-3.34333"^^xsd:float ; rdfs:label "Cardiff International Airport" . airports:EGGD rdf:type airports_sc:LargeAirport ; geo:lat "51.3827"^^xsd:float ; geo:long "-2.71909"^^xsd:float ; rdfs:label "Bristol International Airport" . airports:EGKK rdf:type airports_sc:LargeAirport ; geo:lat "51.1481"^^xsd:float ; geo:long "-0.190278"^^xsd:float ; rdfs:label "London Gatwick Airport" . airports:FMO rdf:type airports_sc:LargeAirport ; geo:lat "41.7998"^^xsd:float ; geo:long "12.2469"^^xsd:float ; rdfs:label "Roma Fiumicino Airport" . airports:EGSS rdf:type airports_sc:LargeAirport ; geo:lat "51.885"^^xsd:float ; geo:long "0.235"^^xsd:float ; rdfs:label "London Stansted Airport" . airports:EGBB_Fake_In_Box rdf:type airports_sc:LargeAirport ; ogc:asWKT "Polygon ((-2.0000 51.2000, 1.0000 51.2000, 1.0000 51.8000, -2.0000 51.8000, -2.0000 51.2000))"^^ogc:wktLiteral ; rdfs:label "Fake in Box Airport (wktLiteral)" . airports:EGBB_Fake_out_of_Box rdf:type airports_sc:LargeAirport ; ogc:asWKT "Polygon ((-2.0000 50.2000, 1.0000 50.2000, 1.0000 50.8000, -2.0000 50.8000, -2.0000 50.2000))"^^ogc:wktLiteral ; rdfs:label "Fake out of Box Airport (wktLiteral)" .
