Hi Andrew, hi everybody,

I see that there has also been some discussion on the list about using
Osmosis as a library (quoted message below). Igor, based on a quick look
at PipelineExecutor in the head revision of OSMembrane, it looks like
you are calling Osmosis as an external program.
yes, OSMembrane spawns off an external process. This is partly the heritage of OSMembrane being a student project, partly it's a deliberate decision. For example, Osmosis can potentially consume lots of memory, and you don't want your pipeline chewing off large chunks of the pipeline designer process' memory. You might want to control how much memory Osmosis gets (-Xmx...), which is not necessarily the same amount you want OSMembrane to have. So while the whole roundtrip of generating a command line just to feed it back to the Osmosis command line parser can (and probably should) be avoided, OSMembrane will always spawn a new Java VM with an Osmosis pipeline, independent of the degree of integration. That being said, it's no requirement imposed by Osmosis, it's an OSMembrane thing - so if you want an Osmosis pipeline in your OTP process, just do it :)

Are you still planning
to tighten the integration with Osmosis? What has been your experience
using Osmosis in this way?
Yes, planning... unfortunately, I have not nearly as much time for it as I would like to :(

In any case, using Osmosis as a library is fairly easy - although there's no complete tutorial for that, the Osmosis' very own unit tests are basically a blueprint of what you should be doing. For example, look at [1].

At the very basic level, you instantiate the entity processors you need (objects implementing Sink, Source and SinkSource interfaces) and feed them the EntityContainers somehow. If you read from an XML/PBF/etc. data source already supported by Osmosis, you can use the reader Sources shipped with Osmosis; if you want to feed it data directly from your code, you'll have to write your own Source or RunnableSource. Similarly, at the other end of the pipeline, you'll need to install a Sink of some kind. For an example of this, take a look at the SinkEntityInspector which simply buffers up every EntityContainer it gets in a List<EntityContainer> [2].

I hope I could tip you off in the right direction - if you have questions about Osmosis integration or OSMembrane, just ask them here, I'll try to help.

Greetings from Stuttgart,
Igor

[1] https://github.com/openstreetmap/osmosis/blob/master/set/src/test/java/org/openstreetmap/osmosis/set/v0_6/MergeBoundTest.java

[2] https://github.com/openstreetmap/osmosis/blob/master/set/src/test/java/org/openstreetmap/osmosis/test/task/v0_6/SinkEntityInspector.java

_______________________________________________
osmosis-dev mailing list
[email protected]
http://lists.openstreetmap.org/listinfo/osmosis-dev

Reply via email to