首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Neo4j空间:无法运行空间

Neo4j空间:无法运行空间
EN

Stack Overflow用户
提问于 2013-08-17 04:23:33
回答 1查看 519关注 0票数 1

我一直试图在我的项目中使用Neo4j空间,但我无法使它工作。

通过有限的文档和示例,我了解了如何将OSM映射加载到数据库。但是为了检查它是否已加载,我正在尝试执行一个空间查询。

在试图运行我的代码时,我得到了以下错误:

代码语言:javascript
复制
import.java:69: error: cannot access GremlinGroovyPipeline
                        .startIntersectSearch(layer, bbox)
                        ^
class file for com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline not found

我知道出了什么问题(它找不到所需的库),但我不知道如何修复它。原因是当我运行Neo4j空间测试时,LayerTest.java和TestSpatial.java确实包含了GeoPipeline库,并且运行得非常好。但是,当我创建简单的java文件来测试Neo4j,并试图执行依赖于GeoPipeline库的命令时,我会得到上面的错误。

我阅读了关于Neo4j的github的说明,并看到了下面的说明:

注意:ne4j- package对来自GremlinGroovyPipeline包的com.tinkerpop.gremlin.groovy具有强制性的依赖关系。neo4j中的依赖项是“提供的”类型,所以在您自己的pom.xml项目中使用新4j空间时,也要确保将以下依赖项添加到您的pom.xml中。

然而,我没有使用Maven来构建我的应用程序。这是一个简单的java文件,我想运行这个文件来测试我是否了解所有的东西是如何工作的。

下面是我的java文件中的代码:

代码语言:javascript
复制
package org.neo4j.gis.spatial;

import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.geotools.data.DataStore;
import org.geotools.data.neo4j.Neo4jSpatialDataStore;
import org.geotools.data.simple.SimpleFeatureCollection;
import org.neo4j.gis.spatial.osm.OSMDataset;
import org.neo4j.gis.spatial.osm.OSMDataset.Way;
import org.neo4j.gis.spatial.osm.OSMGeometryEncoder;
import org.neo4j.gis.spatial.osm.OSMImporter;
import org.neo4j.gis.spatial.osm.OSMLayer;
import org.neo4j.gis.spatial.osm.OSMRelation;
import org.neo4j.gis.spatial.pipes.osm.OSMGeoPipeline;
import org.neo4j.graphdb.Direction;
import org.neo4j.graphdb.Node;
import org.neo4j.graphdb.Relationship;

import com.vividsolutions.jts.geom.Envelope;
import com.vividsolutions.jts.geom.Geometry;

import org.neo4j.kernel.impl.batchinsert.BatchInserter;
import org.neo4j.kernel.impl.batchinsert.BatchInserterImpl;
import org.neo4j.kernel.EmbeddedGraphDatabase;
import org.neo4j.graphdb.GraphDatabaseService;
import org.neo4j.gis.spatial.pipes.GeoPipeline;

class SpatialOsmImport {
    public static void main(String[] args)
    {
        OSMImporter importer = new OSMImporter("ott.osm");
        Map<String, String> config = new HashMap<String, String>();
        config.put("neostore.nodestore.db.mapped_memory", "90M" );
        config.put("dump_configuration", "true");
        config.put("use_memory_mapped_buffers", "true");
        BatchInserter batchInserter = new BatchInserterImpl("target/dependency", config);
        importer.setCharset(Charset.forName("UTF-8"));
        try{
            importer.importFile(batchInserter, "ott.osm", false);
            batchInserter.shutdown();
            GraphDatabaseService db = new EmbeddedGraphDatabase("target/dependency");
            importer.reIndex(db, 10000);
            db.shutdown();
        }
        catch(Exception e)
        {
            System.out.println(e.getMessage());
        }

        GraphDatabaseService database = new EmbeddedGraphDatabase("target/dependency");
        try{
            SpatialDatabaseService spatialService = new SpatialDatabaseService(database);
            Layer layer = spatialService.getLayer("layer_roads");
            LayerIndexReader spatialIndex = layer.getIndex();
            System.out.println("Have " + spatialIndex.count() + " geometries in " + spatialIndex.getBoundingBox());

            Envelope bbox = new Envelope(-75.80, 45.19, -75.7, 45.23);
            // Search searchQuery = new SearchIntersectWindow(bbox);
            // spatialIndex.executeSearch(searchQuery);
            // List<SpatialDatabaseRecord> results = searchQuery.getResults();
            List<SpatialDatabaseRecord> results = GeoPipeline
                        .startIntersectSearch(layer, bbox)
                        .toSpatialDatabaseRecordList();
            doGeometryTestsOnResults(bbox, results);
        } finally {
            database.shutdown();
        }
    }
    private static void doGeometryTestsOnResults(Envelope bbox, List<SpatialDatabaseRecord> results) {
        System.out.println("Found " + results.size() + " geometries in " + bbox);
        Geometry geometry = results.get(0).getGeometry();
        System.out.println("First geometry is " + geometry);
        geometry.buffer(2);
    }

}

现在很简单,但我做不到。如何在我的应用程序中包括com.tinkerpop.gremlin.groovy.GremlinGroovyPipeline,这样它才能工作?

我在Ubuntu12.04和java版本"1.7.0_25“、Java(TM) SE运行时环境(Build1.7.0_25-B15)上运行所有内容。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2013-08-17 19:06:37

在类路径中包含所有所需依赖项的最佳方法是运行

代码语言:javascript
复制
mvn dependency:copy-dependencies

在新4j空间中,并找到目标/dep中包含的lib,请参见http://maven.apache.org/plugins/maven-dependency-plugin/usage.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18285080

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档