使用REST / neo4jclient将节点添加到c#中的空间层

时间:2013-12-13 12:07:19

标签: c# neo4j neo4j-spatial

我在c#中创建基于位置的应用程序,我正在使用neo4j和neo4j空间插件来处理它。为了与空间插件进行通信,我必须使用它的REST API,因为neo4jClient目前不支持它。现在我想add all the nodes (with location data ie lat, lon) to spatial layer,我需要所有的neo4j节点ID,我的问题是有没有办法通过它的数据(在这种情况下,它的lat / lon)获取先前插入的节点的节点id,或者是否有更好的approch添加节点到空间层?

编辑: 我也使用neo4jClient进行其他插入和检索

1 个答案:

答案 0 :(得分:0)

首先,除了通过ID将节点添加到空间之外,没有其他方法。

您可以使用函数has(n.Property)编写一个Cypher查询来检索所有节点ID,例如:

// cypher-query to retrieve node Ids
client.Cypher
   .Match("(n:SpatialIndex)")
   .Where("has(n.lat)")
   .AndWhere("has(n.lon)")
   .Return(node => node.Id());

// add existing node to SimplePoint-Layer
public void AddNodeToLayer(long nodeId, string layer)
{
    string URINode = string.Format("{0}node/{1}",_client.BaseUrl, nodeId);
    string json = string.Format("{{\"layer\":\"{0}\", \"node\":\"{1}\"}}", layer, URINode);

    string URIAdd = string.Format("{0}ext/SpatialPlugin/graphdb/addNodeToLayer", _client.BaseUrl);
    HTTPCommand(new Uri(URIAdd), json);
 }

实际上还有另一个REST端点:addMultipleNodesToLayer。但似乎它还没有推出。我已经问过这个问题,希望很快就会有用。