Hi, 
(sorry for the long post)

I've been struggling with the spatial index for a while now.
I've read https://jena.apache.org/documentation/query/spatial-query.html 
<https://jena.apache.org/documentation/query/spatial-query.html> and skipped 
through about every spatial related thread here on the list.
I managed to get an in-memory version up and running at some point following 
this
https://stackoverflow.com/questions/45814956/building-geospatial-index-when-working-with-jena-fuseki/52099066#52099066
 
<https://stackoverflow.com/questions/45814956/building-geospatial-index-when-working-with-jena-fuseki/52099066#52099066>
and this
https://ceyxstudios.com/2017/11/25/rdf-datenbank-mit-geo-funktionen/ 
<https://ceyxstudios.com/2017/11/25/rdf-datenbank-mit-geo-funktionen/>

But that was on a small dataset that I uploaded via the web-interface of Fuseki.

Now the story is a bit different. I'm building the database using tdbloader2 
and would like to create the spatial index upfront.

java -cp jena-spatial.jar jena.spatialindexer --desc=assembler_file
I could not figure out, how to get this line to work. I have the following 
possible scenarios:

1. I download the jena-spatial-3.8.0.jar and specify that in the classpath:
$ java -cp jena-spatial-3.8.0.jar jena.spatialindexer 
--desc=../fuseki-server/run/configuration/mm.ttl 
Error: Could not find or load main class jena.spatialindexer

2. I use the fuseki-server jar:
$ java -cp fuseki-server.jar jena.spatialindexer 
--desc=./run/configuration/mm.ttl
WARN  Custom SpatialContextFactory lib is not ready in 
classpath:com/vividsolutions/jts/geom/CoordinateSequenceFactory
org.apache.jena.dboe.transaction.txn.TransactionException: Not in a transaction

I managed to eliminate the warning about jts by including that in the 
classpath, but the error remains the same (with full trace):
java -cp fuseki-server.jar:jts-1.13.jar jena.spatialindexer 
--desc=./run/configuration/mm.ttl
org.apache.jena.dboe.transaction.txn.TransactionException: Not in a transaction
        at 
org.apache.jena.dboe.transaction.txn.TransactionalComponentLifecycle.checkTxn(TransactionalComponentLifecycle.java:417)
        at 
org.apache.jena.dboe.trans.bplustree.BPlusTree.getRootRead(BPlusTree.java:159)
        at 
org.apache.jena.dboe.trans.bplustree.BPlusTree.iterator(BPlusTree.java:348)
        at 
org.apache.jena.tdb2.store.tupletable.TupleIndexRecord.all(TupleIndexRecord.java:251)
        at 
org.apache.jena.tdb2.store.tupletable.TupleTable.find(TupleTable.java:148)
        at 
org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.find(NodeTupleTableConcrete.java:161)
        at 
org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.find(NodeTupleTableConcrete.java:150)
        at 
org.apache.jena.tdb2.store.nodetupletable.NodeTupleTableConcrete.findAsNodeIds(NodeTupleTableConcrete.java:141)
        at org.apache.jena.tdb2.store.TripleTable.find(TripleTable.java:64)
        at 
org.apache.jena.tdb2.store.DatasetGraphTDB.findInDftGraph(DatasetGraphTDB.java:104)
        at 
org.apache.jena.sparql.core.DatasetGraphBaseFind.findAny(DatasetGraphBaseFind.java:72)
        at 
org.apache.jena.sparql.core.DatasetGraphBaseFind.find(DatasetGraphBaseFind.java:50)
        at 
org.apache.jena.sparql.core.DatasetGraphWrapper.find(DatasetGraphWrapper.java:152)
        at 
org.apache.jena.sparql.core.DatasetGraphWrapper.find(DatasetGraphWrapper.java:152)
        at jena.spatialindexer.exec(spatialindexer.java:110)
        at jena.cmd.CmdMain.mainMethod(CmdMain.java:93)
        at jena.cmd.CmdMain.mainRun(CmdMain.java:58)
        at jena.cmd.CmdMain.mainRun(CmdMain.java:45)
        at jena.spatialindexer.main(spatialindexer.java:53)

My configuration is the following:
@prefix :      <http://base/#> .
@prefix rdf:   <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix tdb2:  <http://jena.apache.org/2016/tdb#> .
@prefix ja:    <http://jena.hpl.hp.com/2005/11/Assembler#> .
@prefix rdfs:  <http://www.w3.org/2000/01/rdf-schema#> .
@prefix fuseki: <http://jena.apache.org/fuseki#> .
@prefix spatial: <http://jena.apache.org/spatial#> .
@prefix geo: <http://www.w3.org/2003/01/geo/wgs84_pos#> .
@prefix geosparql: <http://www.opengis.net/ont/geosparql#> .
# Spatial
[] ja:loadClass "org.apache.jena.query.spatial.SpatialQuery" .
spatial:SpatialtDataset rdfs:subClassOf ja:RDFDataset .
spatial:SpatialIndexLucene rdfs:subClassOf spatial:SpatialIndex .

:service_tdb_all  a                   fuseki:Service ;
        rdfs:label                    "TDB2 mm" ;
        fuseki:dataset                :spatial_dataset ;
        fuseki:name                   "mm" ;
        fuseki:serviceQuery           "query" , "sparql" ;
        fuseki:serviceReadGraphStore  "get" ;
        fuseki:serviceReadWriteGraphStore
                "data" ;
        fuseki:serviceUpdate          "update" ;
        fuseki:serviceUpload          "upload" .

:spatial_dataset a spatial:SpatialDataset ;
    spatial:dataset   :tdb_dataset_readwrite ;
    spatial:index     <#indexLucene> ;
    .

<#indexLucene> a spatial:SpatialIndexLucene ;
    spatial:directory <file:Lucene> ;
    #spatial:directory "mem" ;
    spatial:definition <#definition> ;
    .

<#definition> a spatial:EntityDefinition ;
    spatial:entityField      "uri" ;
    spatial:geoField     "geo" ;
    # custom geo predicates for 1) Latitude/Longitude Format
    spatial:hasSpatialPredicatePairs (
         [ spatial:latitude geo:lat ; spatial:longitude geo:long ]
         ) ;
    # custom geo predicates for 2) Well Known Text (WKT) Literal
    spatial:hasWKTPredicates (geosparql:asWKT) ;
    # custom SpatialContextFactory for 2) Well Known Text (WKT) Literal
    spatial:spatialContextFactory
#         "com.spatial4j.core.context.jts.JtsSpatialContextFactory"
        "org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory"
    .

:tdb_dataset_readwrite
        a              tdb2:DatasetTDB2 ;
        tdb2:location  "/srv/linked_data_store/fuseki-server/run/databases/mm" .

And I've changed the fuseki script to include the jts jar:
FUSEKI_CLASSES=$FUSEKI_HOME/jts-1.13.jar

I see no errors or warnings in the server log, when starting with that 
configuration, the Lucene folder is created and populated with something:
$ ll run/configuration/Lucene/
total 4
-rw-rw-r-- 1 process process 71 Sep 14 09:28 segments_1
-rw-rw-r-- 1 process process  0 Sep 14 09:28 write.lock

But any spatial query does not return any results.
Any help on how to tackle this would be highly appreciated.

Best
Markus Neumann

Reply via email to