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 <[email protected]> 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 <[email protected]> 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 <[email protected]>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 <
>>> [email protected]> 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 <[email protected]>
>>> > 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 <[email protected]>
>>> > 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 <
>>> [email protected]
>>> > >> >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 <[email protected]>
>>> > >> 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 <
>>> > >> > > [email protected]> 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 <
>>> > >> > [email protected]>
>>> > >> > > > 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
>>> > >> > > > > [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

Reply via email to