Ah ha ... the reason I couldn't find it is because there is a typo ... "udpateGeometryFromWKT" the p and d are switched :)
However, I rebuilt it but do not see this in the REST extensions after moving everything from /target/dependency to plugins. Any thoughts? Thanks! On Wed, Jul 6, 2011 at 4:31 AM, Craig Taverner <[email protected]> wrote: > Hi Boris, > > I can see the new update method here: > > https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/server/plugin/SpatialPlugin.java#L138 > > And the commit for it is here: > > https://github.com/neo4j/neo4j-spatial/commit/22eaf91957a6265ef1e6923b5da572b75383b83e > > Hope that helps. > > Let me know if this works. The REST method is entirely untested, but does > wrap code that is tested, so I'm relatively optimistic :-) > > Regards, Craig > > On Wed, Jul 6, 2011 at 1:51 AM, Boris Kizelshteyn <[email protected]> > wrote: > > > Hi Craig, > > > > This is awesome! > > > > Where is the update method? I can't find the code on github. > > > > Thanks! > > > > On Sat, Jul 2, 2011 at 6:00 PM, Craig Taverner <[email protected]> wrote: > > > > > As I understand it, Andreas is working on the much more complex problem > > of > > > updating OSM geometries. That is more complex because it involves > > > restructuring the connected graph. > > > > > > The case Boris has is much simpler, just modifying the WKT or WKB in > the > > > editable layer. In the Java API this is simply to call the > > > GeometryEncoder.encodeGeometry() method, which will modify the geometry > > in > > > place (ie. replace the old geometry with a new one). However, I do not > > > think > > > it is that simple on the REST interface. I can check, but think we will > > > need > > > a new method for updating geometries. Internally it is trivial to code. > > > > > > So I just added a quick method, called updateGeometryFromWKT, which > > > requires > > > the geometry (in WKT), the existing geometry node-id, and the layer. > Give > > > it > > > a try. > > > > > > On Sat, Jul 2, 2011 at 5:10 PM, Peter Neubauer < > [email protected] > > > >wrote: > > > > > > > Actually, > > > > Andreas Wilhelm is working right now on updating geometries. > > > > > > > > Sent from my phone. > > > > On Jul 2, 2011 5:00 PM, "Boris Kizelshteyn" <[email protected]> > wrote: > > > > > Wow that's great! I'll try it out asap. This leads to my next > > question: > > > > how > > > > > do I update the geometry in a layer, rather than add new? What I am > > > > thinking > > > > > of doing is having a multipoint geometery associated with each of > my > > > user > > > > > nodes which will represent their location history. My plan is to > add > > > the > > > > > geometry to a "world" layer and then associate the returned node > with > > > the > > > > > user. How do I then add new points to that connecter node? Can I > just > > > > edit > > > > > the wkt and assume the index will update? Or do you have a better > > > > suggestion > > > > > for doing this? I would rather avoid having each point be a > seperate > > > node > > > > as > > > > > I am tracking gps data and getting lots of coordinates, it would be > > > many > > > > > thousands of nodes per user. > > > > > > > > > > Many thanks! > > > > > > > > > >> > > > > >> > > > > >> On Sat, Jul 2, 2011 at 6:48 AM, Craig Taverner <[email protected]> > > > > wrote: > > > > >> > > > > >>> Hi Boris, > > > > >>> > > > > >>> Ah! You are using the REST API. That changes a lot, since Neo4j > > > Spatial > > > > is > > > > >>> only recently exposed in REST and we do not expose most of the > > > > >>> capabilities > > > > >>> I have discussed in this thread, or indeed in my other answer > > today. > > > > >>> > > > > >>> I did recently add some REST methods that might work for you, > > > > specifically > > > > >>> the addEditableLayer, which makes a WKB layer, and the > > > > >>> addGeometryWKTToLayer, for adding any kind of Geometry (including > > > > >>> LineString) to the layer. However, these were only added > recently, > > > and > > > > I > > > > >>> have no experience using them myself, so consider this very much > > > > prototype > > > > >>> code. From your other question today, can I assume you are having > > > > trouble > > > > >>> making sense of the data coming back? So we need a better way to > > > return > > > > >>> the > > > > >>> results in WKT instead of WKB? One option would be to enhance the > > > > >>> addEditableLayer method to allow the creation of WKT layers > instead > > > of > > > > WKB > > > > >>> layers, so the internal representation is more internet friendly. > > > > >>> > > > > >>> I've just added untested support for setting the format to WKT > for > > > the > > > > >>> internal representation of the editable layer in the REST > > interface. > > > > This > > > > >>> is > > > > >>> untested (outside of my usual unit tests, that is), and is only > in > > > the > > > > >>> trunk > > > > >>> of neo4j-spatial, but you are welcome to try it out and see what > > > > happens. > > > > >>> > > > > >>> Regards, Craig > > > > >>> > > > > >>> On Fri, Jul 1, 2011 at 5:29 PM, Boris Kizelshteyn < > > [email protected]> > > > > >>> wrote: > > > > >>> > > > > >>> > Hi Craig, > > > > >>> > > > > > >>> > Thanks so much for this reply. It is very insightful. Is it > > > possible > > > > for > > > > >>> me > > > > >>> > to implement the LineString geometries and lookups using REST? > > > > >>> > > > > > >>> > Many thanks! > > > > >>> > > > > > >>> > On Wed, Jun 8, 2011 at 4:58 PM, Craig Taverner < > [email protected] > > > > > > > >>> wrote: > > > > >>> > > > > > >>> > > OK. I understand much better what you want now. > > > > >>> > > > > > > >>> > > Your person nodes are not geographic objects, they are > persons > > > that > > > > >>> can > > > > >>> > be > > > > >>> > > at many positions and indeed move around. However, the 'path' > > > that > > > > >>> they > > > > >>> > > take > > > > >>> > > is a geographic object and can be placed on the map and > > analysed > > > > >>> > > geographically. > > > > >>> > > > > > > >>> > > So the question I have is how do you store the path the > person > > > > takes? > > > > >>> Is > > > > >>> > > this a bunch of position nodes connected back to that person? > > Or > > > > >>> perhaps > > > > >>> > a > > > > >>> > > chain of position-(next)->position-(next)->position, etc? > > However > > > > you > > > > >>> > have > > > > >>> > > stored this in the graph, you can express this as a > geographic > > > > object > > > > >>> by > > > > >>> > > implementing the GeometryEncoder interface. See, for example, > > the > > > 6 > > > > >>> lines > > > > >>> > > of > > > > >>> > > code it takes to traverse a chain of NEXT locations and > produce > > a > > > > >>> > > LineString > > > > >>> > > geometry in the SimpleGraphEncoder at > > > > >>> > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > > > > > https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/encoders/SimpleGraphEncoder.java#L82 > > > > >>> > > > > > > >>> > > < > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > > > > > https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/encoders/SimpleGraphEncoder.java#L82 > > > > >>> > > >If > > > > >>> > > you do this, you can create a layer that uses your own > geometry > > > > >>> encoder > > > > >>> > (or > > > > >>> > > the SimpleGraphEncoder I referenced above, if you use the > same > > > > graph > > > > >>> > > structure) and your own domain model will be expressed as > > > > LineString > > > > >>> > > geometries and you can perform spatial operations on them. > > > > >>> > > > > > > >>> > > Alternatively, if your data is more static in nature, and you > > are > > > > >>> > analysing > > > > >>> > > only what the person did in the past, and the graph will > > therefor > > > > not > > > > >>> > > change, perhaps you do not care to store the locations in the > > > > graph, > > > > >>> and > > > > >>> > > you > > > > >>> > > can just import them as a LineString directly into a standard > > > > layer. > > > > >>> > > > > > > >>> > > Whatever route you take, the final action you want to perform > > is > > > to > > > > >>> find > > > > >>> > > points near the LineString (path the person took). I do not > > think > > > > the > > > > >>> > > bounding box is the right approach for that either. You need > to > > > > try, > > > > >>> for > > > > >>> > > example, the method findClosestEdges in the utilities class > at > > > > >>> > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > > > > > https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L115 > > > > >>> > > > > > > >>> > > < > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > > > > > https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java#L115 > > > > >>> > > >This > > > > >>> > > method can find the part of the persons path that it closest > to > > > the > > > > >>> point > > > > >>> > > of > > > > >>> > > interest. There also also many other geographic operations > you > > > > might > > > > >>> be > > > > >>> > > interested in trying, once you have a better feel for the > types > > > of > > > > >>> > queries > > > > >>> > > you want to ask. > > > > >>> > > > > > > >>> > > Regards, Craig > > > > >>> > > > > > > >>> > > On Wed, Jun 8, 2011 at 2:17 AM, Boris Kizelshteyn < > > > > [email protected]> > > > > >>> > > wrote: > > > > >>> > > > > > > >>> > > > Thanks for the detailed response! Here is what I'm trying > to > > do > > > > and > > > > >>> I'm > > > > >>> > > > still not sure how to accomplish it: > > > > >>> > > > > > > > >>> > > > 1. I have a node which is a person > > > > >>> > > > > > > > >>> > > > 2. I have geo data as that person moves around the world > > > > >>> > > > > > > > >>> > > > 3. I use the geodata to create a bounding box of where that > > > > person > > > > >>> has > > > > >>> > > been > > > > >>> > > > today > > > > >>> > > > > > > > >>> > > > 4. I want to say, was this person A near location X today? > > > > >>> > > > > > > > >>> > > > 5. I do this by seeing if location X is in A's bounding > box. > > > > >>> > > > > > > > >>> > > > From looking at what you suggest doing, it's not clear how > I > > > > assign > > > > >>> the > > > > >>> > > > node > > > > >>> > > > person A to a layer? Is it that the bounding box is now in > > the > > > > layer > > > > >>> > and > > > > >>> > > > not > > > > >>> > > > in the node? The issue then becomes, how od I associate the > > two > > > > as > > > > >>> the > > > > >>> > > > RTree > > > > >>> > > > relationship seems to establish itself on the bounding box > > > > between > > > > >>> the > > > > >>> > > node > > > > >>> > > > and the layer. > > > > >>> > > > > > > > >>> > > > Many thanks for your patience as I learn this challenging > > > > material. > > > > >>> > > > > > > > >>> > > > On Tue, Jun 7, 2011 at 4:13 PM, Craig Taverner < > > > [email protected] > > > > > > > > > >>> > wrote: > > > > >>> > > > > > > > >>> > > > > I think you need to differentiate the bounding boxes of > the > > > > data > > > > >>> in > > > > >>> > the > > > > >>> > > > > layer (stored in the database), and the bounding box of > the > > > > search > > > > >>> > > query. > > > > >>> > > > > The search query is not stored in the database, and will > > not > > > be > > > > >>> seen > > > > >>> > as > > > > >>> > > a > > > > >>> > > > > node or nodes in the database. So if you want to search > for > > > > data > > > > >>> > within > > > > >>> > > > > some > > > > >>> > > > > bounding box or polygon, then express that in the search > > > query, > > > > >>> and > > > > >>> > you > > > > >>> > > > do > > > > >>> > > > > not need to care about how your nodes are stored in the > > > > database. > > > > >>> > > > > > > > > >>> > > > > So when you say you want to make a larger bounding box, I > > > > assume > > > > >>> you > > > > >>> > > are > > > > >>> > > > > talking about the query itself. The REST API has the > method > > > > >>> > > > > findGeometriesInLayer, which takes minx, maxx, miny, maxy > > > > >>> parameters > > > > >>> > > and > > > > >>> > > > > you > > > > >>> > > > > can set those to whatever you want for your query. > > > > >>> > > > > > > > > >>> > > > > The REST API also exposes the CQL query language > supported > > by > > > > >>> > GeoTools. > > > > >>> > > > > This > > > > >>> > > > > allows you to perform SQL-like queries on geometries and > > > > feature > > > > >>> > > > > attributes. > > > > >>> > > > > For example, you can search for all objects within a > > specific > > > > >>> polygon > > > > >>> > > > (not > > > > >>> > > > > just a rectangular bounding box), as well as conforming > to > > > > certain > > > > >>> > > > > attributes. See > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > http://docs.geoserver.org/latest/en/user/tutorials/cql/cql_tutorial.htmlfor > > > > >>> > > > > some examples of CQL. > > > > >>> > > > > > > > > >>> > > > > However, our current CQL support is not fully integrated > > with > > > > the > > > > >>> > RTree > > > > >>> > > > > index. This means that the CQL itself will not benefit > from > > > the > > > > >>> > index, > > > > >>> > > > but > > > > >>> > > > > be a raw search. You can, however, still get the benefit > of > > > the > > > > >>> index > > > > >>> > > by > > > > >>> > > > > passing in the bounding box separately. So, for example, > > you > > > > want > > > > >>> to > > > > >>> > > > search > > > > >>> > > > > for data in a polygon. Make the polygon object, get it's > > > > bounding > > > > >>> box > > > > >>> > > and > > > > >>> > > > > also the CQL query string. Then make a 'dynamic layer' > > using > > > > the > > > > >>> CQL > > > > >>> > > > (which > > > > >>> > > > > is a bit like making a prepared statement). Then perform > > the > > > > same > > > > >>> > > > > 'findGeometriesInLayer' method mentioned above, using the > > > > bounding > > > > >>> > box > > > > >>> > > > and > > > > >>> > > > > the dynamic layer (containing the CQL). This has the > effect > > > of > > > > >>> using > > > > >>> > > the > > > > >>> > > > > RTree index for a first approximate search, followed by > > pure > > > > CQL > > > > >>> for > > > > >>> > > the > > > > >>> > > > > final mile. > > > > >>> > > > > > > > > >>> > > > > See examples of this in action in the Unit tests in the > > > source > > > > >>> code. > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > > > > > >>> > > > > > > >>> > > > > > >>> > > > > > > > > > > > > > > https://github.com/neo4j/neo4j-spatial/blob/master/src/test/java/org/neo4j/gis/spatial/ServerPluginTest.java#L109 > > > > >>> > > > > has > > > > >>> > > > > examples of CQL queries on the REST API. > > > > >>> > > > > > > > > >>> > > > > On Tue, Jun 7, 2011 at 5:48 PM, Boris Kizelshteyn < > > > > >>> [email protected]> > > > > >>> > > > > wrote: > > > > >>> > > > > > > > > >>> > > > > > Thanks! So it seems you are saying that the bounding > box > > > > >>> represents > > > > >>> > a > > > > >>> > > > > > single > > > > >>> > > > > > point and is the same as the lat/lat lon? What if I > make > > > the > > > > >>> > bounding > > > > >>> > > > box > > > > >>> > > > > > bigger? What I am trying to do is geo queries against a > > > > bounding > > > > >>> > box > > > > >>> > > > made > > > > >>> > > > > > of > > > > >>> > > > > > a set of points, rather than individual points. So the > > > query > > > > is, > > > > >>> > find > > > > >>> > > > the > > > > >>> > > > > > nodes where the given point falls inside their bounding > > > > boxes. > > > > >>> Can > > > > >>> > I > > > > >>> > > do > > > > >>> > > > > > this > > > > >>> > > > > > with REST? > > > > >>> > > > > > > > > > >>> > > > > > Thanks! > > > > >>> > > > > > > > > > >>> > > > > > On Tue, Jun 7, 2011 at 11:34 AM, Craig Taverner < > > > > >>> [email protected]> > > > > >>> > > > > wrote: > > > > >>> > > > > > > > > > >>> > > > > > > Hi, > > > > >>> > > > > > > > > > > >>> > > > > > > The bounding boxes are used by the RTree index, which > > is > > > a > > > > >>> > typical > > > > >>> > > > way > > > > >>> > > > > to > > > > >>> > > > > > > index spatial data. For Point data, the lat/long and > > the > > > > >>> bounding > > > > >>> > > box > > > > >>> > > > > are > > > > >>> > > > > > > the same thing, but for other shapes > > (streets/LineString > > > > and > > > > >>> > > > Polygons), > > > > >>> > > > > > the > > > > >>> > > > > > > bounding box is quite different to the actual > geometry > > > > (which > > > > >>> is > > > > >>> > > not > > > > >>> > > > > just > > > > >>> > > > > > a > > > > >>> > > > > > > single lat/long, but a set of connected points > forming > > a > > > > >>> complex > > > > >>> > > > > shape). > > > > >>> > > > > > > > > > > >>> > > > > > > The RTree does not differentiate between points and > > other > > > > >>> > > geometries, > > > > >>> > > > > > > because it cares only about the bounding box, and > > > therefor > > > > we > > > > >>> > > provide > > > > >>> > > > > > that > > > > >>> > > > > > > even for something as simple as a Point. > > > > >>> > > > > > > > > > > >>> > > > > > > Does that answer the question? > > > > >>> > > > > > > > > > > >>> > > > > > > Regards, Craig > > > > >>> > > > > > > > > > > >>> > > > > > > On Tue, Jun 7, 2011 at 4:57 PM, Boris Kizelshteyn < > > > > >>> > > [email protected]> > > > > >>> > > > > > > wrote: > > > > >>> > > > > > > > > > > >>> > > > > > > > Greetings! > > > > >>> > > > > > > > > > > > >>> > > > > > > > Perhaps someone using neo4j-spatial can answer this > > > > >>> seemingly > > > > >>> > > > simple > > > > >>> > > > > > > > question. Nodes classified into layers have both > > > lat/lon > > > > >>> > > properties > > > > >>> > > > > and > > > > >>> > > > > > > > bounding boxes, the bounding box seems to be > required > > > to > > > > >>> > > establish > > > > >>> > > > > the > > > > >>> > > > > > > > relationship between node and layer, however the > node > > > is > > > > not > > > > >>> > > found > > > > >>> > > > if > > > > >>> > > > > > the > > > > >>> > > > > > > > lat/lon does not match the query. Can someone > explain > > > the > > > > >>> > > > > relationship > > > > >>> > > > > > > > between these two properties on a node? > > > > >>> > > > > > > > > > > > >>> > > > > > > > Many thanks! > > > > >>> > > > > > > > _______________________________________________ > > > > >>> > > > > > > > Neo4j mailing list > > > > >>> > > > > > > > [email protected] > > > > >>> > > > > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > > > > > > > >>> > > > > > > _______________________________________________ > > > > >>> > > > > > > Neo4j mailing list > > > > >>> > > > > > > [email protected] > > > > >>> > > > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > > > > > > >>> > > > > > _______________________________________________ > > > > >>> > > > > > Neo4j mailing list > > > > >>> > > > > > [email protected] > > > > >>> > > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > > > > > >>> > > > > _______________________________________________ > > > > >>> > > > > Neo4j mailing list > > > > >>> > > > > [email protected] > > > > >>> > > > > > > > > >>> > > > > > > > > >>> > > > _______________________________________________ > > > > >>> > > > Neo4j mailing list > > > > >>> > > > [email protected] > > > > >>> > > > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > > > >>> > > _______________________________________________ > > > > >>> > > Neo4j mailing list > > > > >>> > > [email protected] > > > > >>> > > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > > >>> > _______________________________________________ > > > > >>> > Neo4j mailing list > > > > >>> > [email protected] > > > > >>> > https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > > >>> _______________________________________________ > > > > >>> Neo4j mailing list > > > > >>> [email protected] > > > > >>> https://lists.neo4j.org/mailman/listinfo/user > > > > >>> > > > > >> > > > > > _______________________________________________ > > > > > Neo4j mailing list > > > > > [email protected] > > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > _______________________________________________ > > > > Neo4j mailing list > > > > [email protected] > > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > > > _______________________________________________ > > > Neo4j mailing list > > > [email protected] > > > https://lists.neo4j.org/mailman/listinfo/user > > > > > _______________________________________________ > > Neo4j mailing list > > [email protected] > > https://lists.neo4j.org/mailman/listinfo/user > > > _______________________________________________ > Neo4j mailing list > [email protected] > https://lists.neo4j.org/mailman/listinfo/user > _______________________________________________ Neo4j mailing list [email protected] https://lists.neo4j.org/mailman/listinfo/user

