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

Reply via email to