Neo4j 空间密码查询 insideDistance 不返回现有节点

2023-11-29

我正在使用 Neo4j 2.0 的空间服务器插件,并遵循以下指南http://neo4j.github.io/spatial/添加名为 Stockholm 的节点。

:POST http://localhost:7475/db/data/ext/SpatialPlugin/graphdb/addSimplePointLayer
{
  "layer" : "geom",
  "lat" : "lat",
  "lon" : "lon"
}
:POST http://localhost:7475/db/data/index/node/
{
  "name" : "geom",
  "config" : {
    "provider" : "spatial",
    "geometry_type" : "point",
    "lat" : "lat",
    "lon" : "lon"
  }
}
:POST http://localhost:7475/db/data/node
{
  "lat" : 60.1,
  "lon" : 15.2,
  "name" : "Stockholm"
}
:POST http://localhost:7475/db/data/ext/SpatialPlugin/graphdb/addNodeToLayer
{
  "layer" : "geom",
  "node" : "http://localhost:7475/db/data/node/4"
}

我可以通过 REST 检索节点:

:POST http://localhost:7475/db/data/ext/SpatialPlugin/graphdb/findGeometriesWithinDistance
{
  "layer" : "geom",
  "pointX" : 15.0,
  "pointY" : 60.0,
  "distanceInKm" : 100
}

但不适用于下面的密码查询。这是为什么?我在这里犯了任何明显的错误吗?

START n=node:geom('withinDistance:[60.0,15.0, 100.0]') RETURN n;

我刚刚发现您不必如上所述将节点添加到索引中,至少对于 Neo4j 2.1.2 和 Neo4j Spatial 0.13-neo4j-2.1.2 来说是这样。

创建节点后,添加一个将用户“id”属性设置为 Neo4j 节点 id 值的属性。密码空间查询现在可以工作了。所以,如果你添加 cypher 命令

start n=node(4) n.id = id(n)

查询将起作用。

显然还有其他方法可以形成 Cypher 语句。事实上,您可以通过几个批量步骤完成所有这些。您可以将所有节点添加到 RTree 图中(使用 REST、Java、批量 shp 文件加载器等),在每个节点上创建自引用用户“id”属性,然后创建空间索引(问题中的第二个 REST 命令)邮政)。

您看到的问题似乎来自 REST addNodeToLayer 进程和 Cypher“将节点添加到索引”进程之间的脱节。 Cypher 进程创建第二个节点,其中仅包含原始节点的几何属性(经纬度、纬度等),并将该节点添加到 RTree 图中。该节点有一个名为“id”的用户属性,其值为原始节点的 Neo4j 节点 id。 REST(或Java)addNodeToLayer过程直接将原始节点添加到RTree图中,并且不创建副本。它还不会在节点上设置名为“id”的用户属性。

如果您使用 Cypher 方法将节点添加到 RTree 图中,您会发现 REST 查询返回给您的节点是复制节点,而不是原始节点。当您使用 Cypher 方法执行相同的查询时,您将获得原始节点。 Cypher 查询中的底层代码通过使用查询找到的复制节点上的用户“id”属性来获取原始节点,从而返回原始节点。当 Cypher 查询最初找到的节点不包含可以取消引用的 id 属性时,Cypher 查询会默默失败,并且您会得到 0 个结果。

通过向 RTree 图中的每个数据节点添加自引用 id 属性,Cypher 查询能够成功找到要返回的节点。

使用前面答案中描述的 REST 方法是可行的,但最终会使几何存储成本加倍,因为它会复制原始节点上保存的几何信息。使用该方法时,Cypher 和 REST 查询返回的结果也彼此不同。使用我描述的方法可以节省空间并统一 Cypher 和 REST 查询行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Neo4j 空间密码查询 insideDistance 不返回现有节点 的相关文章

随机推荐

  • Rcpparmadillo :将 fastLM 对象转换为“lm”类型

    首先感谢您提供这么好的包裹 我希望对 fastLM 的输出运行 anova 但是 anova 只接受 lm 类型的对象 有没有办法将 fastLM 对象转换为 lm 对象 谢谢 S 首先 fastLM 存在是为了提供比lm 使其更快的方法之
  • “你好,世界!”遇到了意想不到的困难

    我想学习 Clojure 我已经下载并设置了以下小工具 Clojure 1 6 0 来自官方网站 莱宁根2 4 3 来自 GitHub 的苹果酒 0 6 0 我已经成功了 现在我正在尝试打印消息 Hello World 同时从 Emacs
  • Google 日历 API - 创建活动时邀请电子邮件不会发送给与会者

    我想使用 google api 将事件添加到 google 日历 但活动创建后 邀请电子邮件不会发送到与会者电子邮件列表 这是我的代码
  • python 正则表达式仅匹配第一个实例

    我有一个 python 代码 我正在读取证书并仅匹配根证书 例如 我的证书如下 begin certificate CZImiZPyLGQBGRYFbG9jYWwxGjAYBgoJkiaJk IasdasdassZAEZFgp2aXJ0dW
  • Android:多个警报不起作用

    在我的应用程序中 我设置了两个闹钟 在 ToogleButton 上 我将使用以下代码将其设置为打开 case R id toggleButtonTwoMonth myPrefs this getSharedPreferences myPr
  • 如何在内核中放置微秒延迟?

    我想放置微秒延迟Linux kernel 哪些函数支持它 需要添加什么头文件 你最好读书Documentation timers timers howto txt在linux内核源代码中 简而言之 您可以使用msleep unsigned
  • 为什么PWA提倡添加到主屏幕但只是创建chrome快捷方式而不是安装为apk?

    我检查所有添加到主屏幕条件 我想我在我的 PWA 中提供了所有这些 当用户访问我的 PWA 迷你信息栏时 当用户单击 添加到主屏幕 时 仅将 PWA 的快捷方式添加到主屏幕 但未安装 PWA 不在应用程序列表中 并且深层链接不起作用 UPD
  • SlimDX/DirectX9/C# - 如何访问纹理中的像素数据

    这是我在 StackOverflow 上遇到的第一个问题 万岁 我可以诚实地说 我每天都使用 StackOverflow 来处理我的工作和个人编程谜题 99 9 的情况下 我实际上也在这里找到了我需要的答案 这太棒了 我当前的问题实际上让我
  • 图像处理/超轻OCR

    我有 55 000 个图像文件 JPG 和 TIFF 格式 它们是书中的图片 每个页面的结构是这样的 一些文字 水平线 a number 一些文字 水平线 另一个号码 一些文字 任何给定页面上可以有 0 到 4 条水平线 我需要找到水平线下
  • 将 ASPX 导出为 HTML

    我们正在构建一个 CMS 该网站将由用户在 aspx 页面中构建和管理 但我们希望创建一个 HTML 的静态网站 我们现在的做法是使用我找到的代码here重载 Aspx 页面中的 Render 方法并将 HTML 字符串写入文件 这对于单个
  • Mayavi 纹理覆盖整个表面

    我想做类似的事情 使用 python 和 Mayavi2 进行 3D 地形可视化 作为输入 我有一个图像 地图 其宽度和高度以像素为单位定义 对于此图像 地图 我获得了图像 地图所代表的表面 范围 的数字高程模型 范围由最小 最大经度和纬度
  • 在Python中设置函数签名

    假设我有一个通用函数f 我想要以编程方式创建一个函数f2其行为与f 但有一个定制的签名 更多详情 给定一个列表l和 字典d我希望能够 设置非关键字参数f2到字符串中l 设置关键字参数f2到按键d和默认值的值d IE 假设我们有 l x y
  • 如何添加Access-Control-Allow-Origin?

    当我调用我的 webservice 方法时 出现以下错误 Origin http localhost 4165 is not allowed by Access Control Allow Origin 当参考网络时 我得到了像 add 这
  • 如何检索通过 insert...select 插入的行的标识?

    我正在通过类似于此的查询插入记录 insert into tbl xyz select field1 from tbl abc 现在我想检索插入记录的新生成的 IDENTITY 值 如何以最少的锁定量和最大的可靠性来做到这一点 您可以使用以
  • 如何在 Ajax 调用期间用加载图像替换 TD 内的图像

    我有一个 HTML 表格 每个单元格中都有一个图像 后面跟着一些文本 像这样的事情 td img src image gif This is a test td 我必须运行 jQuery Ajax 调用 在此调用期间 我想将图像更改为我拥有
  • 文件输入为空,但 Request.Files 中显示空“文件”

    我有一个具有以下文件输入的视图
  • 为什么 scanf 不需要字符串的 & 符号并且在 printf (C 语言)中也能正常工作?

    我现在正在学习C语言中的字符串 如何使用 scanf 来获取字符串你可以这样做 scanf s str1 对于 printf 你可以做 printf The string is s n str1 我知道对于 scanf 来说 这是因为字符串
  • 如何同步两个具有相同结构和不同服务器的MySQL表

    我有两台ubuntu服务器 并安装了Mysql 4 0 ServerA和ServerB 我想将ServerA的mysql表同步到ServerB 将ServerATable复制到ServerBTable 保持ServerATable和Serv
  • 主键违规:使用 EF Code First 进行继承

    我有以下 EF 代码第一个代码 我收到以下异常 GiftCouponPayment 不包含标识列 表已在数据库中成功创建 然而 我怎样才能摆脱这个异常呢 另外 这个异常的原因是什么 注意 只要保留域模型 首先使用代码描述 并且可以查询数据
  • Neo4j 空间密码查询 insideDistance 不返回现有节点

    我正在使用 Neo4j 2 0 的空间服务器插件 并遵循以下指南http neo4j github io spatial 添加名为 Stockholm 的节点 POST http localhost 7475 db data ext Spa