Manipulating Data with Osmosis
Osmosis is a powerful command-line tool for manipulating and processing raw .osm data. It is often used for processing large data files, for splitting OSM files into smaller pieces, and for applying a changeset to update an existing file.
There are a great many functions available with Osmosis, and you can read about each in detail on the Wiki. However many of the functions are quite complex and difficult to understand, particularly if you are just getting started with command-line programs and OpenStreetMap. This chapter will serve to introduce Osmosis, install it on Windows, and get started with a basic Osmosis command.
Like osm2pgsql in the previous chapter, we will need to download and set up osmosis so that we can run it from the command line. The process for this will be very similar to osm2pgsql.
You will also need some raw OSM data to work with. If you want to follow the examples in this chapter, download our sample file here. You may also use a raw data file of your choosing.
Follow these steps to download and prepare Osmosis:
- First, download Osmosis here.
- Unzip the folder and place it somewhere on your system where it will not be moved. We will need to add its location to the system path so that it can be run from the command line.
- Click on the Start Menu and type “system path.”
- You should see an option named “Edit the system environment variables.” Click on it.
- Click on the button named “Environment Variables.”
- At the bottom find the variable named “Path” and click “Edit…”
- You must add the directory where osm2pgsql.exe is located to the Path variable.
Add a semicolon to the end of the previous directory and then type in the full directory path of osmosis. For example, if you put the osmosis-latest folder directly in the C:\ directory the path would be:
- Click OK several times to save the new settings.
- osmosis should be functioning now. Let’s check it.
- Open the Windows Command Prompt. You can do this by clicking on the Start Menu and typing “cmd”. The Command Prompt application will come up and you can press Enter or click on it.
In the black command window that opens, type:
If everything is working right, you should get a message like this:
- If you don’t see output like this, and it says that it cannot find the application osmosis, then you may have entered the Path variable incorrectly.
Osmosis should be working correctly from the command line now. In order to work run operations on our data file, we need to change the working directory to the place that we’ve put the sample_osmosis.osm.pbf file. To make things simple, we have placed this file in the C:\ directory.
To change the working directory in the command prompt to the C:\ directory, type the following command and press Enter:
The prompt should change, indicating that you are now in the C:\ directory.
Now let’s learn our first Osmosis command. We will run a command that filters all of the schools from our large file.
In order to do this, we need to tell Osmosis a few things. We need to specify:
- an input file (sample_osmosis.osm.pbf)
- some rules which define what we want to filter
- an output file (we will output an uncompressed .osm file so we can open it in JOSM)
The command we will run is:
osmosis --rbf sample_osmosis.osm.pbf --nkv keyValueList="amenity.school" --wx schools.osm
Try running this command in the command prompt. When it finishes, you should see a new file in your directory, called schools.osm. If we open the new file in JOSM, we can see that only the schools have been filtered out from the sample file.
Let’s take a look at the command we ran piece by piece to understand how it all works. First, we call the name of the program.
Next, we supply the input file. Remember that this file is a compressed format. –rbf is actually shorthand for –read-pbf-fast. Osmosis understands that the file we supply after this flag is the file we want to read from.
The next bit of our command says –nkv keyValueList=”amenity.school”. You might guess that this indicates that osmosis should filter out everything with the tag amenity=school. –nkv is shorthand for –node-key-value. This command indicates that Osmosis should filter out only nodes with the keys and values supplied in the following list. Additionaly key.value sets can be added by placing commas in between them.
Lastly, we supply the name and format of the output file. We use the flag -wx, which is shorthand for –write-xml. Note that we could also use –wbf, which is the counterpart to –rbf, if we wanted to output the data again in PBF format.
The number of processing tasks that can be done with Osmosis is enormous, and to learn more it is best to refer to the Osmosis Detailed Usage page on the Wiki.
One useful task is being able to divide a big raw OSM file into separate parts, either by supplying rectangles or by creating bounding polygon files. You can get a basic grounding in this process at the Osmosis Examples page.