Hi Peter,

The OSMGeometryEncoder does expose some utilities for exploring the OSM
graph without knowing much about the graph. You need to know a few things,
like the geometry node passed to the index is not the way node or any of the
point nodes. So you need OSMGeometryEncoder.getOSMNodeFromGeometryNode(Node)
to get the actual way node from the geometry node in the index. Then from
the way node you can use OSMGeometryEncoder.getPointNodesFromWayNode(Node)
to get the underlying OSM point nodes in an iterator.

We could refine this to make it cleaner. But I have been working on the Ruby
API to OSM, which provides a kind-of OSM domain model with Way and Node
classes for exploring the OSM model, and I hope to drive changes in the
underlying Java API through that.

Bryce, take a look at the following wiki page for setting up uDig for Neo4j
Spatial: http://wiki.neo4j.org/content/Neo4j_Spatial_in_uDig

<http://wiki.neo4j.org/content/Neo4j_Spatial_in_uDig>Regards, Craig

On Wed, Jan 19, 2011 at 7:17 AM, Peter Neubauer <
peter.neuba...@neotechnology.com> wrote:

> Just out of curiosity -
>
> if I find an OSM geometry (say, a way) from e.g. a
> SpatialDatabaseRecord, is there any easy way to get to its underlying
> OSM points, e.g. via an iterator? The Encoder/Decoder could probably
> do that job and return this without the client needing to know details
> about the graph layout, right?
>
> Cheers,
>
> /peter neubauer
>
> GTalk:      neubauer.peter
> Skype       peter.neubauer
> Phone       +46 704 106975
> LinkedIn   http://www.linkedin.com/in/neubauer
> Twitter      http://twitter.com/peterneubauer
>
> http://www.neo4j.org               - Your high performance graph database.
> http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing party.
>
>
>
> On Wed, Jan 19, 2011 at 1:45 AM, Craig Taverner <cr...@amanzi.com> wrote:
> > Hi Bryce,
> >
> > While I had this on my mind, I decided to look into the code and I went
> > ahead developed the first approach. So now we index osm nodes in the
> r-tree
> > also (in addition to ways). By default, only nodes that have tags are
> added
> > to the index, because these are seen as 'points of interest', while all
> > other nodes are assumed to only be interesting as part of a way. However,
> I
> > added a new method to the OSMImporter that allows you to turn on indexing
> of
> > all nodes, regardless of whether they are points of interest or not.
> >
> > Just replace the old call to
> osmImporter.importFile(batchInserter,filePath)
> > with instead osmImporter.importFile(batchInserter,filePath,true). The
> last
> > parameter turns on indexing of all nodes. I've attached an image from the
> > AWE product (based on uDig) that shows a large number of dynamic layers
> > exported from the OSM model of Malmö, and you can see all nodes are
> visible.
> > This is the output from the TestDynamicLayers unit test, run with the
> > boolean set to true.
> >
> > If you are curious, the Neo Technology office is actually included in
> this
> > image :-)
> >
> > I have just pushed the code to github, so you need to get the latest from
> > there.
> >
> > Regards, Craig
> >
> > On Tue, Jan 18, 2011 at 9:27 PM, Craig Taverner <cr...@amanzi.com>
> wrote:
> >
> >> Hi Bryce,
> >>
> >> Currently the OSM model in Neo4j Spatial only indexes the ways, which
> means
> >> that when you do spatial searches on the layers, you are always talking
> >> about the  ways. Whether this suites you or not depends on your specific
> use
> >> case. You could search for the closest ways, and the use the
> >> SpatialTopologyUtils to snap to the point node on the way that is
> closest to
> >> your point of interest, which may give you the result you want.
> >>
> >> If you are specifically interested in only searching on nodes, not ways,
> >> then there are two options, both requiring some refactoring of the OSM
> model
> >> (ie. you need to make changes to Neo4j Spatial).
> >>
> >>    - In the OSMImporter code, simply add all nodes as Point geometries
> to
> >>    the index. This is simple to code and will get what you want, but
> might not
> >>    lead to the most efficient index, since both the ways and the nodes
> they are
> >>    composed of get indexed in the same index.
> >>    - Enhance the OSM model to support multiple indexes, for nodes, ways
> >>    and relationships. This requires much more code, but opens the
> possibility
> >>    to enhance the performance by allowing the index to be optimized for
> the
> >>    geometries and densities seen in the dataset.
> >>
> >> The reasons we have not done this yet are:
> >>
> >>    - Existing use cases have not required it (but we are reaching cases
> >>    that do now)
> >>    - It is not clear yet which of the above options is the best overall
> >>    (one index or several). Originally I believed in the multiple-index
> >>    approach, mostly because points can be indexed with very different
> indexes
> >>    than geometries (eg. we can even place lucene behind the point index,
> which
> >>    we cannot do for geometries). But at the moment I am leaning back
> towards
> >>    the single index approach (simpler code).
> >>
> >> So, I hope the approach of searching for close ways, and then using the
> >> topology utils to snap to the closest point is the right solution for
> you.
> >> Otherwise considering contributing to the updates necessary to complete
> the
> >> point index :-)
> >>
> >> Regards, Craig
> >>
> >> On Tue, Jan 18, 2011 at 6:08 PM, bryce hendrix <brycehend...@gmail.com
> >wrote:
> >>
> >>> Peter,
> >>>
> >>> I think my problem is more of understanding how the graph is built from
> >>> OSM
> >>> data. The method of find the closest edge gives me the way geometry,
> but
> >>> (please correct me if I am wrong) I need to find the closest OSM node
> >>> (Node
> >>> with "lat" and "lon" properties) in the geometry.
> >>>
> >>> Thanks,
> >>> Bryce
> >>>
> >>> On Tue, Jan 18, 2011 at 2:05 AM, Peter Neubauer <
> >>> peter.neuba...@neotechnology.com> wrote:
> >>>
> >>> > Bryce,
> >>> > are you looking for some kind of "snapping" to the nearest geometry?
> I
> >>> > was doing something like that, Craig did a test on that, see
> >>> >
> >>> >
> >>>
> https://github.com/neo4j/neo4j-spatial/blob/master/src/test/java/org/neo4j/gis/spatial/TestSpatialUtils.java#L53
> >>> > ,
> >>> > there is some basic support for that in
> >>> >
> >>> > SpatialTopologyUtils.java.
> >>> >
> >>> > Does that help to get started? Feel free to add more utilities and
> >>> > maybe a routing example, when you get it working.
> >>> >
> >>> > Cheers,
> >>> >
> >>> > /peter neubauer
> >>> >
> >>> > GTalk:      neubauer.peter
> >>> > Skype       peter.neubauer
> >>> > Phone       +46 704 106975
> >>> > LinkedIn   http://www.linkedin.com/in/neubauer
> >>> > Twitter      http://twitter.com/peterneubauer
> >>> >
> >>> > http://www.neo4j.org               - Your high performance graph
> >>> database.
> >>> > http://www.thoughtmade.com - Scandinavia's coolest Bring-a-Thing
> party.
> >>> >
> >>> >
> >>> >
> >>> > On Tue, Jan 18, 2011 at 5:50 AM, bryce hendrix <
> brycehend...@gmail.com>
> >>> > wrote:
> >>> > > Craig,
> >>> > >
> >>> > > I've ran into a bit of a stumbling block. I am attempting to do
> find a
> >>> > > simple route using A* from 2 nodes on 2 different ways. What is the
> >>> best
> >>> > way
> >>> > > to find the points closest to 2 reference points which are on ways?
> >>> > Assuming
> >>> > > I've got those nodes, is there anything special I have to do, other
> >>> than
> >>> > > setting up the estimate and cost evaluators?
> >>> > >
> >>> > > If I can figure this out, I'll submit my example back to you guys.
> I'm
> >>> > > excited about this stuff, but I seem to be discovering the limits
> of
> >>> the
> >>> > > docs.
> >>> > >
> >>> > > Bryce
> >>> > >
> >>> > > On Sun, Jan 16, 2011 at 7:11 PM, Craig Taverner <cr...@amanzi.com>
> >>> > wrote:
> >>> > >
> >>> > >> Great that they all work :-)
> >>> > >>
> >>> > >> Good luck with the rest of the project and keep us posted, we're
> >>> > interested
> >>> > >> in any feedback on the API.
> >>> > >>
> >>> > >> (getting lat/long mixed up is one of those things we all keep
> doing,
> >>> I'm
> >>> > >> pretty sure I did it once as recently as last month ... ;-)
> >>> > >>
> >>> > >> On Sun, Jan 16, 2011 at 11:52 PM, bryce hendrix <
> >>> brycehend...@gmail.com
> >>> > >> >wrote:
> >>> > >>
> >>> > >> > Craig, Peter,
> >>> > >> >
> >>> > >> > Its useful if I get the latitude and longitude in the correct
> order
> >>> > for
> >>> > >> the
> >>> > >> > Point. Ugh. I've found
> >>> > >> > that SearchPointsWithinOrthodromicDistance, SearchClosest,
> >>> > >> > and SpatialTopologyUtils.findClosestEdges all work for me. Looks
> >>> like
> >>> > my
> >>> > >> > project is well on its way now, thanks for the help.
> >>> > >> >
> >>> > >> > Bryce
> >>> > >> >
> >>> > >> > On Sun, Jan 16, 2011 at 3:16 PM, Craig Taverner <
> cr...@amanzi.com>
> >>> > >> wrote:
> >>> > >> >
> >>> > >> > > The SearchPointsWithinOrthodromicDistance basically does a
> search
> >>> on
> >>> > a
> >>> > >> > > rectangular bounding box, and then inside the result set
> filters
> >>> by
> >>> > >> > > distance
> >>> > >> > > from the center. The filter probably works only on points as
> >>> implied
> >>> > by
> >>> > >> > the
> >>> > >> > > class name.
> >>> > >> > >
> >>> > >> > > The SpatialTopologyUtils class has a method findClosestEdge,
> >>> which
> >>> > will
> >>> > >> > do
> >>> > >> > > what you are looking for. If you call it without a distance
> >>> value,
> >>> > it
> >>> > >> > will
> >>> > >> > > take 1% of the total span of your layer as the search window,
> so
> >>> if
> >>> > >> this
> >>> > >> > > does not make sense for your data (eg. your layer covers a
> small
> >>> > area,
> >>> > >> as
> >>> > >> > > you hinted at), then pass in the distance in units of the
> >>> coordinate
> >>> > >> > system
> >>> > >> > > of the layer (probably WGS84, degrees, if you are using only
> OSM
> >>> > data).
> >>> > >> > Try
> >>> > >> > > it out and let us know.
> >>> > >> > >
> >>> > >> > > See:
> >>> > >> > >
> >>> > >> > >   -
> >>> > >> > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/neo4j/neo4j-spatial/blob/master/src/main/java/org/neo4j/gis/spatial/SpatialTopologyUtils.java
> >>> > >> > >   -
> >>> > >> > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/neo4j/neo4j-spatial/blob/master/src/test/java/org/neo4j/gis/spatial/TestSpatialUtils.java
> >>> > >> > >
> >>> > >> > >
> >>> > >> > > On Sun, Jan 16, 2011 at 11:19 AM, Peter Neubauer <
> >>> > >> > > peter.neuba...@neotechnology.com> wrote:
> >>> > >> > >
> >>> > >> > > > Bryce,
> >>> > >> > > > I think (Craig, correct me if I'm wrong) you need to have a
> >>> Point
> >>> > >> > > > layer to be able to do that search. The default OSM layer is
> >>> > >> > > > containing a lot of geometries, so I think you first should
> >>> define
> >>> > a
> >>> > >> > > > layer on top of the full imported one, then search. I did
> >>> > something
> >>> > >> > > > like that in another spike, see
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/popdevelop/snapplr/blob/master/server_java/src/main/java/com/geosnappr/TaginfoImporter.java#L312
> >>> > >> > > >
> >>> > >> > > > The layer is defined with something like
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > >
> >>> > >> >
> >>> > >>
> >>> >
> >>>
> https://github.com/neo4j/neo4j-spatial/blob/master/src/test/java/org/neo4j/gis/spatial/TestDynamicLayers.java#L26
> >>> > >> > > > on top of the imported full data layer.
> >>> > >> > > >
> >>> > >> > > > Does that help?
> >>> > >> > > >
> >>> > >> > > > Cheers,
> >>> > >> > > >
> >>> > >> > > > /peter neubauer
> >>> > >> > > >
> >>> > >> > > > GTalk:      neubauer.peter
> >>> > >> > > > Skype       peter.neubauer
> >>> > >> > > > Phone       +46 704 106975
> >>> > >> > > > LinkedIn   http://www.linkedin.com/in/neubauer
> >>> > >> > > > Twitter      http://twitter.com/peterneubauer
> >>> > >> > > >
> >>> > >> > > > http://www.neo4j.org               - Your high performance
> >>> graph
> >>> > >> > > database.
> >>> > >> > > > http://www.thoughtmade.com - Scandinavia's coolest
> >>> Bring-a-Thing
> >>> > >> > party.
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > > >
> >>> > >> > > > On Sat, Jan 15, 2011 at 10:58 PM, bryce hendrix <
> >>> > >> > brycehend...@gmail.com>
> >>> > >> > > > wrote:
> >>> > >> > > > > I'm pretty new to neo4j, so please excuse me if this is a
> >>> FAQ.
> >>> > >> > > > >
> >>> > >> > > > > I exported OSM data for a city from the OSM site, then
> >>> imported
> >>> > it
> >>> > >> > > using
> >>> > >> > > > the
> >>> > >> > > > > OSMImporter. I can see the layer via the webserver, so I
> know
> >>> if
> >>> > >> got
> >>> > >> > > > > imported okay. Now I would like to find the way nearest to
> a
> >>> > >> > coordinate
> >>> > >> > > > via
> >>> > >> > > > > the Java API, but I'm not really sure how to do that. I've
> >>> tried
> >>> > >> > using
> >>> > >> > > > > SearchPointsWithinOrthodromicDistance, but the results of
> the
> >>> > query
> >>> > >> > are
> >>> > >> > > > > always empty. Can someone give me some tips, or provide a
> >>> simple
> >>> > >> > > example?
> >>> > >> > > > >
> >>> > >> > > > > Thanks in advance,
> >>> > >> > > > > Bryce
> >>> > >> > > > > _______________________________________________
> >>> > >> > > > > 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
> >>>
> >>
> >>
> >
> > _______________________________________________
> > 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