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









                                          

Reply via email to