Neo4j的空间:不能运行空间(Neo4j Spatial: can't run spati

2019-10-18 12:59发布

我一直在试图与Neo4j的空间工作为我的项目,但我不能使它发挥作用。

在有限的文档和例子我想通了,如何加载OSM地图数据库。 但是,检查它是否被加载,我想执行空间查询。

虽然试图运行我的代码,我得到这个错误:

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库,我得到上述错误的命令。

我阅读GitHub上的指示Neo4j的,看到这样一个字条:

注:Neo4j的空间已经从com.tinkerpop.gremlin.groovy包装上GremlinGroovyPipeline托管的依赖。 在Neo4j的依赖关系是类型“设置”,在您自己的Java项目,所以使用Neo4j的空间时,请确保以下依赖添加到您的pom.xml了。

不过,我没有使用Maven构建我的应用程序。 这是一个简单的java文件,我想运行测试,如果我得到的一切是如何工作的。

这里是从我的java文件中的代码:

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在我的应用程序,所以它的工作原理?

我运行在Ubuntu 12.04的一切,Java版本 “1.7.0_25” 的Java(TM)SE运行时环境(建立1.7.0_25-B15)。

任何帮助是极大的赞赏。

Answer 1:

让所有的地方所需要的依赖,你可以将它们包含在类路径的最佳方法是运行

mvn dependency:copy-dependencies

在Neo4j的空间,并找到库的目标/ DEPS包括,看到http://maven.apache.org/plugins/maven-dependency-plugin/usage.html



文章来源: Neo4j Spatial: can't run spatial