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

Reply via email to