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 <cr...@amanzi.com> 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 <neubauer.pe...@gmail.com
> >wrote:
>
> > Actually,
> > Andreas Wilhelm is working right now on updating geometries.
> >
> > Sent from my phone.
> > On Jul 2, 2011 5:00 PM, "Boris Kizelshteyn" <bo...@popcha.com> 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 <cr...@amanzi.com>
> > 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 <bo...@popcha.com>
> > >>> 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 <cr...@amanzi.com>
> > >>> 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 <
> > bo...@popcha.com>
> > >>> > > 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 <
> cr...@amanzi.com
> > >
> > >>> > 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 <
> > >>> bo...@popcha.com>
> > >>> > > > > 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 <
> > >>> cr...@amanzi.com>
> > >>> > > > > 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 <
> > >>> > > bo...@popcha.com>
> > >>> > > > > > > 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
> > >>> > > > > > > > User@lists.neo4j.org
> > >>> > > > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > >>> > > > > > > >
> > >>> > > > > > > _______________________________________________
> > >>> > > > > > > Neo4j mailing list
> > >>> > > > > > > User@lists.neo4j.org
> > >>> > > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > >>> > > > > > >
> > >>> > > > > > _______________________________________________
> > >>> > > > > > Neo4j mailing list
> > >>> > > > > > User@lists.neo4j.org
> > >>> > > > > > https://lists.neo4j.org/mailman/listinfo/user
> > >>> > > > > >
> > >>> > > > > _______________________________________________
> > >>> > > > > Neo4j mailing list
> > >>> > > > > User@lists.neo4j.org
> > >>> > > > >
> > >>> > > > >
> > >>> > > > _______________________________________________
> > >>> > > > Neo4j mailing list
> > >>> > > > User@lists.neo4j.org
> > >>> > > > https://lists.neo4j.org/mailman/listinfo/user
> > >>> > > >
> > >>> > > _______________________________________________
> > >>> > > Neo4j mailing list
> > >>> > > User@lists.neo4j.org
> > >>> > > https://lists.neo4j.org/mailman/listinfo/user
> > >>> > >
> > >>> > _______________________________________________
> > >>> > Neo4j mailing list
> > >>> > User@lists.neo4j.org
> > >>> > https://lists.neo4j.org/mailman/listinfo/user
> > >>> >
> > >>> _______________________________________________
> > >>> Neo4j mailing list
> > >>> User@lists.neo4j.org
> > >>> https://lists.neo4j.org/mailman/listinfo/user
> > >>>
> > >>
> > > _______________________________________________
> > > Neo4j mailing list
> > > User@lists.neo4j.org
> > > https://lists.neo4j.org/mailman/listinfo/user
> > _______________________________________________
> > Neo4j mailing list
> > User@lists.neo4j.org
> > https://lists.neo4j.org/mailman/listinfo/user
> >
> _______________________________________________
> Neo4j mailing list
> User@lists.neo4j.org
> https://lists.neo4j.org/mailman/listinfo/user
>
_______________________________________________
Neo4j mailing list
User@lists.neo4j.org
https://lists.neo4j.org/mailman/listinfo/user

Reply via email to