Java 使用ApacheJena进行地理空间查询

Java 使用ApacheJena进行地理空间查询,java,rdf,geospatial,jena,Java,Rdf,Geospatial,Jena,我在ApacheJena中开始地理空间查询时遇到问题 在收到@AndyS的评论后,我意识到我需要从我的Jena模型创建一个空间数据集。我仍然得到一个空的结果 首先,在我的模型中,我有一组三元组: 35.4 32 我被来自ApacheJena邮件列表的人引用了的源代码。事实证明,我需要手动将要索引的三元组添加到空间索引中。在这里,我提供了带有索引的源代码。这对我很有用——上面的SPARQL查询在给定半径内查找三元组。修改后的代码为: 字符串查询器= “前缀空间:”+ “前缀rdfs:”+ “

我在ApacheJena中开始地理空间查询时遇到问题

在收到@AndyS的评论后,我意识到我需要从我的Jena模型创建一个空间数据集。我仍然得到一个空的结果

首先,在我的模型中,我有一组三元组:


35.4
32

我被来自ApacheJena邮件列表的人引用了的源代码。事实证明,我需要手动将要索引的三元组添加到空间索引中。在这里,我提供了带有索引的源代码。这对我很有用——上面的SPARQL查询在给定半径内查找三元组。修改后的代码为:

字符串查询器=
“前缀空间:”+
“前缀rdfs:”+
“前缀geo:”+
“前缀xsd:”+
“前缀ssn:”+
“选择?loc?lat”+
“其中{loc空间:附近(35.5 32 1000'km')。loc geo:lat?lat}”;
模型m=SemanticSensorModel.getIntance().getJenaModel();
EntityDefinition entDef=新的EntityDefinition(“1”、“2”);				
Dataset baseDataset=DatasetFactory.create(m);
试一试{
Directory dir=FSDirectory.open(新文件(“/home/martin/spatial_index”);
Dataset spatialDataset=SpatialDatasetFactory.createLucene(baseDataset,dir,entDef);
DatasetGraphSpatial dataset=(DatasetGraphSpatial)(spatialDataset.asDatasetGraph());
SpatialIndex SpatialIndex=dataset.getSpatialIndex();
SpatialIndexContext=新的SpatialIndexContext(spatialIndex);
spatialIndex.startIndexing();
迭代器quadIter=dataset.find(Node.ANY,Node.ANY,Node.ANY,Node.ANY);
对于(;quadIter.hasNext();){
Quad=quadIter.next();
context.index(quad.getGraph()、quad.getSubject()、quad.getPredicate()、quad.getObject());
}
spatialIndex.finishIndexing();
Query=QueryFactory.create(queryStr);
QueryExecution qexec=QueryExecutionFactory.create(查询,空间数据集);
ResultSet results=qexec.execSelect();
对于(;results.hasNext();)
{
QuerySolution soln=results.nextSolution();
System.out.println(soln.get(“loc”).toString()+“”+soln.get(“lat”).toString());
}
System.out.println(“完成打印结果”);
}捕获(IOE异常){
e、 printStackTrace();

}
不清楚SemanticSensorModel是什么。必须有一个空间数据集:否则就是三倍。谢谢你的评论,@AndyS,我的错。SemanticSensorModel类是我在com.hp.hpl.jena.rdf.model.model类周围使用的一个包装器。我会调查你提供的链接-我想我需要。而且,当我让它工作,将张贴在这里的解决方案