Thanks Craig! I'll not only play around with it tonight, but you nudged me towards finally installing uDig.
Bryce On Tue, Jan 18, 2011 at 6:45 PM, 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