I have a simple dataset that I'm playing with to test out the geospatial capabilities of the orientdb-spatial module.
The input is just a simple table of a few of the nazca line geoglyphs. Name,Latitude,Longitude Hummingbird,-14.692131,-75.148892 Monkey,-14.7067274,-75.1475391 Condor,-14.6983457,-75.1283374 Spider,-14.694363,-75.1235815 Spiral,-14.688309,-75.122757 Hands,-14.694459,-75.113881 Tree,-14.693897,-75.114467 Astronaut,-14.745222,-75.079755 Dog,-14.706401,-75.130788 Ultimately, I'd like to put together a query that can generate edges in the graph from nodes to the neighbors that are within N km. For a threshold of 2km, I'd end up with edges that are something like this: <https://lh3.googleusercontent.com/-RtKkxS4pPQ4/WEbxjaDrGxI/AAAAAAAAHfE/M9ouR5YHkxA3GoHtgXIpfCgCJMg3hLB9QCLcB/s1600/Nazca_Lines_Proximity.png> but it doesn't appear that I could do this with some kind of CREATE EDGES query directly, so I'm left with native Java or a Javascript server-side function. I'm working on a function to do this, so the first part is to generate a table containing the SourceNode, DestNode, and Distance which I can then use to create the edges. Thus far, I've only been able to get a query like this to work, which can only find my features that are within some distance of a specific node. SELECT $temp.@rid as SourceRID, $temp.Name AS SourceName, @rid AS DestRID, Name AS DestName, $distance.format("%.4f") AS Distance FROM GeoGlyph LET $temp = first((SELECT * FROM GeoGlyph WHERE Name = "<GEOGLYPH NAME>")) WHERE [Latitude,Longitude,$spatial] NEAR [$temp.Latitude, $temp.Longitude,{ "maxDistance":2}] AND Name != "<GEOGLYPH NAME>" ORDER BY Distance I can run this inside a loop over all the nodes in my graph to build a list of all the pairs, which can then be used to generate my edges. The javascript function that I'm mucking around with to explore this looks like the following: var g = orient.getGraph(); // set max distance threshold var distance = 2; // get the list of all GeoGlyph vertices var v = g.command('sql', 'SELECT FROM GeoGlyph'); var edges = []; var seen = {}; for(i=0; i<v.length; i++) { var name = v[i].getRecord().field('Name'); var srcid = v[i].getRecord().field('@rid'); seen[name] = true; query = 'SELECT $temp.Name AS SourceName, @rid AS DestRID, Name AS DestName, $distance.format("%.4f") AS Distance FROM GeoGlyph LET $temp = first((SELECT * FROM GeoGlyph WHERE Name = "'+name+'")) WHERE [Latitude,Longitude,$spatial] NEAR [$temp.Latitude, $temp.Longitude,{"maxDistance":'+distance+'}] AND Name != "'+name+'" ORDER BY Distance'; // Get a list of geoglyphs that are within 2km of the current geoglyph. var p = g.command('sql', query); for(j=0; j<p.length; j++) { var destName = p[j].getRecord().field('DestName'); if(destName in seen) { continue; } var dstid = p[j].getRecord().field('DestRID'); var dist = p[j].getRecord().field('Distance'); var row = [srcid, dstid, name, destName, dist]; edges.push(row); } } // Loop over the data and print out the @rid field for source and dest.. for(i=0; i<edges.length; i++) { print(edges[i][0] +" "+ edges[i][1]); } The output I get from the print statement in the final loop is this: #25:0 GeoGlyph#25:1{Latitude:-14.706727,Longitude:-75.14754,Name:Monkey} v1 #25:1 GeoGlyph#25:8{Latitude:-14.706401,Longitude:-75.13079,Name:Dog} v1 #25:2 GeoGlyph#25:3{Latitude:-14.694363,Longitude:-75.12358,Name:Spider} v1 ... So, I can get the source RID just fine, but the dest RID isn't just a "#nn:nn" style format... it's the document. How can I modify the SELECT statement in my query to get the RID as just a string? -- --- You received this message because you are subscribed to the Google Groups "OrientDB" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
