【问题标题】:Building Geospatial Index when working with JENA FUSEKI使用 JENA FUSEKI 构建地理空间索引
【发布时间】:2018-01-30 13:58:03
【问题描述】:

我想使用 JENA FUSEKI 支持的附近地理空间功能 - https://jena.apache.org/documentation/query/spatial-query.html

我需要构建地理空间索引才能使查询正常工作。说明如下(摘自以上链接):


构建 TDB 数据集:

java -cp $FUSEKI_HOME/fuseki-server.jar tdb.tdbloader --tdb=assembler_file data_file

使用 Fuseki 附带的 TDB 副本。或者,使用 TDB 实用程序 tdbloader 或 tdbloader2 之一:

$JENA_HOME/bin/tdbloader --loc=目录数据文件

然后使用 jena.spatialindexer 构建空间索引:

java -cp jena-spatial.jar jena.spatialindexer --desc=assembler_file


假设我知道 FUSEKI 文件夹中的汇编文件是哪个文件(我不知道),我在最新的 jena 下载中搜索 jena-spatial.jar。发现它不存在后,我搜索它并在此处找到 jar 的副本 - https://jar-download.com/?detail_search=g%3A%22org.apache.jena%22+AND+a%3A%22jena-spatial%22&search_type=av&a=jena-spatial&p=1

我尝试运行它,但我收到错误“无法找到或加载主类 jena.spatialindexer”。我搜索 jena.spatialindexer 并找到匹配项(不能在此处发布,因为链接发布限制)。

在这一点上,我想知道是否有可能让这变得更复杂一点?你知道,我显然有很多时间在谷歌上搜索,试图找出这些神秘的线索。

简而言之,如果有人以前这样做过,请您指出我哪里出错了?

最诚挚的问候,

克里斯。

【问题讨论】:

  • 我认为它们的意思是 jena-spatial-3.4.0.jar 位于 fuseki.war (位于您的 Fuseki 发行版中)。尝试jar xvf fuseki.war "WEB-INF/lib/",然后尝试java -cp WEB-INF/lib/* jena.spatialindexer。错误应该是Multiple assembler descriptions given
  • 您需要自己创建一个汇编文件。在您链接到的同一页面上有一个示例。
  • 我完全赞成这个问题:在某个地方有一个带有空间数据集的 fuseki“数据”文件夹(数据+配置)的工作示例吗?问题中指出的文档页面上的解释完全神秘。
  • 关于如何在支持空间索引的情况下运行 fuseki 有什么新想法吗?
  • @jlanza 首先,非常感谢您为此付出的努力。我尝试了您的建议,但在命令中使用 :lib/jts-1.13.jar 时出现“找不到或加载主类 org.apache.jena.fuseki.cmd.FusekiCmd”。另外,您还在使用 jts-1.13,因为提供的链接现在会将您定向到 1.14?

标签: geospatial jena fuseki


【解决方案1】:

以防万一它可能会有所帮助,请在下面找到我的配置

@prefix fuseki:  <http://jena.apache.org/fuseki#> .
@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 :        <#> .

@prefix spatial: <http://jena.apache.org/spatial#> .


# TDB
[] ja:loadClass "org.apache.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:SpatialDataset  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   <#tdb_dataset_readwrite> ;
    ##spatial:index   <#indexSolr> ;
    spatial:index     <#indexLucene> ;
    .

<#tdb_dataset_readwrite> rdf:type      tdb:DatasetTDB ;
    tdb:location "/myfolder" ;
##     # Query timeout on this dataset (milliseconds)
##     ja:context [ ja:cxtName "arq:queryTimeout" ;  ja:cxtValue "1000" ] ;
##     # Default graph for query is the (read-only) union of all named graphs.
       tdb:unionDefaultGraph true ;
    .

<#indexLucene> a spatial:SpatialIndexLucene ;
    #spatial:directory <file:Lucene> ;
   ## spatial:directory "mem" ;
    spatial:directory <file:/myfolder/spatial> ;
    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 :latitude_1 ; spatial:longitude :longitude_1 ]
         [ spatial:latitude :latitude_2 ; spatial:longitude :longitude_2 ]
         ) ;
    # custom geo predicates for 2) Well Known Text (WKT) Literal
    spatial:hasWKTPredicates (:wkt_1 :wkt_2) ;
    # custom SpatialContextFactory for 2) Well Known Text (WKT) Literal
    spatial:spatialContextFactory
         "org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory"
    .
#         "com.spatial4j.core.context.jts.JtsSpatialContextFactory"


<#service_tdb1> rdf:type fuseki:Service ;
    rdfs:label                      "TDB Service" ;
    fuseki:name                     "tdb_spatial" ;
    fuseki:serviceQuery             "query" ;
    fuseki:serviceQuery             "sparql" ;
    fuseki:serviceUpdate            "update" ;
    fuseki:serviceUpload            "upload" ;
    fuseki:serviceReadWriteGraphStore      "data" ;
    # A separate read-only graph store endpoint:
    fuseki:serviceReadGraphStore       "get" ;
    fuseki:dataset                  :spatial_dataset  ;

如您所见,我已将班级名称更改为org.locationtech.spatial4j.context.jts.JtsSpatialContextFactory。此外,在运行 fuseki 时,我必须在类路径中包含另一个 jar 文件,否则我会遇到问题

EntityDefinitionAssembler WARN  Custom SpatialContextFactory lib is not ready in classpath:com/vividsolutions/jts/geom/CoordinateSequenceFactory

然后我的命令行看起来像:

java -cp "fuseki-server.jar:lib/jts-1.13.jar" org.apache.jena.fuseki.cmd.FusekiCmd -debug

我已经从here下载了jts-1.13.jar

此外,我还要感谢 Kai 为我指明了正确的方向。

注意:我仍然需要完全理解spatial:EntityDefinition 下的字段。我会尝试编辑更多信息。

【讨论】:

  • 您提到了一个用于 lucene 的名为“spatial”的文件夹。请问,这个是你自己创建的吗,这个文件夹里应该有什么?
  • 你可以尝试自己创建,以防万一不行。请记住,它是“/myfolder/spatial”,因此至少在示例中它是完整路径。除此之外,如果我没记错的话,该文件夹包含维护空间索引所需的所有文件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-05
  • 1970-01-01
  • 2016-10-02
  • 2018-06-30
  • 1970-01-01
  • 2016-02-12
相关资源
最近更新 更多