{"id":15176752,"url":"https://github.com/codingmiao/neo4j-rtree","last_synced_at":"2025-08-10T22:48:23.231Z","repository":{"id":105454240,"uuid":"267603739","full_name":"codingmiao/neo4j-rtree","owner":"codingmiao","description":"a spatial index for neo4j 4.x","archived":false,"fork":false,"pushed_at":"2024-11-06T10:05:12.000Z","size":819,"stargazers_count":8,"open_issues_count":1,"forks_count":2,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-08-02T10:58:02.550Z","etag":null,"topics":["neo4j","rtree","spatial-index"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/codingmiao.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-28T13:55:02.000Z","updated_at":"2024-11-06T10:05:16.000Z","dependencies_parsed_at":null,"dependency_job_id":"136a6e61-62e9-4f86-a7cb-4e5601b7d780","html_url":"https://github.com/codingmiao/neo4j-rtree","commit_stats":{"total_commits":53,"total_committers":2,"mean_commits":26.5,"dds":"0.018867924528301883","last_synced_commit":"f6b65d9fa27e4b7b76d893a1443194d7cb288440"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/codingmiao/neo4j-rtree","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fneo4j-rtree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fneo4j-rtree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fneo4j-rtree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fneo4j-rtree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/codingmiao","download_url":"https://codeload.github.com/codingmiao/neo4j-rtree/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/codingmiao%2Fneo4j-rtree/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":269803689,"owners_count":24477648,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-10T02:00:08.965Z","response_time":71,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["neo4j","rtree","spatial-index"],"created_at":"2024-09-27T13:41:38.573Z","updated_at":"2025-08-10T22:48:23.200Z","avatar_url":"https://github.com/codingmiao.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# neo4j-rtree\n\n一个基于neo4j构建的n维度空间索引\n\ngithub: https://github.com/codingmiao/neo4j-rtree\n\ngitee: https://gitee.com/wowtools/neo4j-rtree\n\n\n[中文文档](README.md) | [README](README_en.md)\n\n## 简介\n\nrtree，是一个计算n维空间内对象的位置关系、距离关系的索引。 很多前辈开源了各类rtree的在内存中的实现，但是，在大数据量的场景下，完全构建在内存中的rtree存在内存占用高，初始化时间长等问题。\n因此，本项目参考[conversant/rtree](https://github.com/conversant/rtree) 的实现思路，将rtree构建在图数据库 [neo4j](https://github.com/neo4j/neo4j)\n中， 形成了一个内存可控、可持久化的rtree索引项目。\n\n(注意: 旧版本 [v1.x](https://github.com/codingmiao/neo4j-rtree/tree/v1.x)\n版本基于 [neo4j spatial](https://github.com/neo4j-contrib/spatial) 构建，存在递归过多容易栈内存溢出、只能用于2维空间等问题，已不再进行功能性更新)\n\n## 使用示例\n\n### 索引数据的的增删改\n\n~~~java\n    try(RtreeEditor rtreeEditor=RtreeEditor.create(db,2000,indexName)){\n        //构建一个RectNd对象，描述n维对象的最小外接矩形\n        RectNd rect2d = new RectNd(new PointNd(new double[]{xmin, ymin}), new PointNd(new double[]{xmax, ymax}));\n        //add\n        rtreeEditor.add(rect2d);\n        //remove、update方法类似\n    }\n~~~\n\n完整示例请参见 [测试用例](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/RtreeEditorTest.java)\n\n\n### 相交关系查询\n查询索引中的对象是否与输入的n维矩形相交\n~~~java\n//构造输入矩形\nPointNd p0 = new PointNd(new double[]{x0, y0});\nPointNd p1 = new PointNd(new double[]{x1, y1});\nRectNd inputRange = new RectNd(p0, p1);\ntry (Transaction tx = db.beginTx()) {\n    //构建一个RtreeIntersectsSearcher对象\n    RtreeIntersectsSearcher searcher = RtreeIntersectsSearcher.get(tx, indexName);\n    searcher.intersects(inputRange, tx, (dataNodeId)-\u003e{\n        //打印查询到的nodeId，也可以拿着id在neo4j中查询node更详细的信息\n        System.out.println(dataNodeId);\n        return false;\n    });\n}\n~~~\n完整示例请参见 [测试用例](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/RtreeEditorTest.java)\n\n\n\n### 最邻近搜索\n\n~~~java\n    //求距离点(x,y)距离最近的5个点点\n    double x = 0.5, y = 0.5;\n    int hitNum = 5;\n    try (Transaction tx = db.beginTx()) {\n        //构建一个RtreeNearestSearcher对象\n        RtreeNearestSearcher searcher = RtreeNearestSearcher.get(tx, indexName);\n        //构建查询条件NearestNeighbour，包括点PointNd、最大返回条数、距离计算公式\n        PointNd pt = new PointNd(new double[]{x, y});\n        NearestNeighbour nearestNeighbour = new NearestNeighbour(hitNum, pt) {\n            @Override\n            public DistanceResult createDistanceResult(PointNd pointNd, long dataNodeId) {\n                RectNd rectNd = ...;//根据dataNodeId从neo4j中查询dataNode的\n                double dist = dist(rectNd);//计算dataNode到(x,y)的距离\n                return new DistanceResult(dist, dataNodeId);\n            }\n        };\n        nearests = searcher.nearest(nearestNeighbour, tx);\n    }\n    ...\n    //定义距离公式\n    private static final double dist(RectNd rect2d) {\n        double[] xy = rect2d.getMaxXs();\n        double x1 = xy[0];\n        double y1 = xy[1];\n        return Math.sqrt(Math.pow(x1 - x, 2) + Math.pow(y1 - y, 2));\n    }\n\n~~~\n完整示例请参见 [测试用例](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/RtreeNearestSearcherTest.java)\n\n\n### 基于jts geometry对象的二维索引\n[geometry2d](https://github.com/codingmiao/neo4j-rtree/tree/v2.x/src/main/java/org/wowtools/neo4j/rtree/geometry2d) 是一个针对二维几何对象的特化包，同样也包含了上述功能，示例如下：\n\ngeometry2d 索引数据的的增删改 [Geometry2dRtreeEditor](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/geometry2d/Geometry2dRtreeEditorTest.java)\n\ngeometry2d 相交关系查询 [Geometry2dRtreeIntersectsSearcher](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/geometry2d/Geometry2dRtreeEditorTest.java)\n\ngeometry2d 最邻近搜索 [Geometry2dRtreeNearestSearcher](https://github.com/codingmiao/neo4j-rtree/blob/v2.x/src/test/java/org/wowtools/neo4j/rtree/geometry2d/Geometry2dRtreeNearestSearcherTest.java)\n\n## install\n\n引入maven依赖，最新版本号为2.0.2\n\n```\n            \u003cdependency\u003e\n                \u003cgroupId\u003eorg.wowtools\u003c/groupId\u003e\n                \u003cartifactId\u003eneo4j-rtree\u003c/artifactId\u003e\n                \u003cversion\u003e${neo4j-rtree-version}\u003c/version\u003e\n            \u003c/dependency\u003e\n```\n\n如果你的项目中已经使用了其它版本的neo4j(例如企业版)而引起冲突，可考虑exclusions:\n\n```\n            \u003cdependency\u003e\n                \u003cgroupId\u003eorg.wowtools\u003c/groupId\u003e\n                \u003cartifactId\u003eneo4j-rtree\u003c/artifactId\u003e\n                \u003cversion\u003e${neo4j-rtree-version}\u003c/version\u003e\n                \u003cexclusions\u003e\n                    \u003cexclusion\u003e\n                        \u003cgroupId\u003eorg.neo4j\u003c/groupId\u003e\n                        \u003cartifactId\u003eneo4j-common\u003c/artifactId\u003e\n                    \u003c/exclusion\u003e\n                    \u003cexclusion\u003e\n                        \u003cgroupId\u003eorg.neo4j\u003c/groupId\u003e\n                        \u003cartifactId\u003eneo4j\u003c/artifactId\u003e\n                    \u003c/exclusion\u003e\n                \u003c/exclusions\u003e\n            \u003c/dependency\u003e\n```\n\n注意，maven中央库的依赖用jdk21编译，所以如果你的项目使用了jdk8或其它版本，你可能需要自己编译一份适合于你的jdk的:\n\nclone \u0026 install\n\n```\ngit clone https://github.com/codingmiao/neo4j-rtree.git\nmvn clean install -DskipTests\n\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingmiao%2Fneo4j-rtree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcodingmiao%2Fneo4j-rtree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcodingmiao%2Fneo4j-rtree/lists"}