Finding Geolocation Leads with Bellingcat's OpenStreetMap Search Tool
Sometimes, the trickiest part of geolocating a photo can be knowing where to start looking.
In previous Bellingcat investigations, starting points have involved reverse image search, searching Google Earth for soil that is the right colour, looking for minarets and even identification of plants.
Bellingcat has built a new tool for searching OpenStreetMap data to help geolocate images and identify starting points for geolocation investigations, based on objects and structures you can identify in an image. You can think of it as a dramatically simplified version of the Overpass query language tool that some open source researchers may already be familiar with using via Overpass-Turbo.
Users can sign up for the tool and check it out here.
How the Tool Works
Let’s learn how the tool works by looking at an example. Here’s an image from somewhere in Belgium. For the purposes of this exercise, let’s imagine that we have already narrowed down to the country in which the picture was taken. Can we geolocate it with OpenStreetMap Search?
Firstly, we identify a couple unique things in the image that might be tagged in OpenStreetMap: the fountain, the tram tracks, and the convenience store on the corner. (The store also tells us that we’re somewhere French speaking – that’s helpful!)
In the OpenStreetMap Search Tool, we can select these features by clicking or dragging the presets to the selection pane.
The features all seem to be within about 100 metres of each other in the photograph, so we’ll leave the “Maximum distance between features” slider at its default setting of 100 metres.
Next, we scroll down and adjust the map to select the region of interest that we want to search. In general, the smaller you can make your region of interest, the better. Regions that are too large might not be searchable, resulting in a search query timeout. This is related to the number of items in OpenStreetMap for that region. In regions of the world which have fewer items in OpenStreetMap, larger search queries are possible. Currently, Western Europe tends to be the most densely detailed area. This map of OSM node density by Martin Raifer is helpful for building intuition for this.
We’ll select a wide area that includes the French-speaking region of Belgium.
Press search to run the query. When the query is complete, the results appear on the map and are listed as map chips, as can be seen below.
Our query returned 15 results (and took over 40 seconds to run — it would have taken longer and might not have succeeded if we had used a larger region of interest), mostly in Brussels, but also in a handful of smaller cities.
Looking at the results in map chip format, one of the responses stands out: number 8. Here we see a curve in the tram tracks over a water fountain, just as in the image. Click on the latitude/longtitude below the map chip to open the result in Google Maps and enter Google Street View.
Success! There’s no water in the fountain in the Google Street View image, and the corner store has a different name, but the intersection is clearly the same.
For some queries, it might not be immediately obvious from the map chips which result is the best. The user can toggle between OpenStreetMap, Google Maps, Google Terrain, or Satellite imagery using the toggle above the results. It is also possible to export the results as a CSV or a KML file that can be opened in Google Earth.
It can take some experience, intuition and guesswork to choose which features to include in your search query. Not everything is on OpenStreetMap. For example, you might see a tree in your image, but every individual tree is unlikely to be mapped. Additionally, OpenStreetMap is only as current as its last user-submitted edit, so certain features may not be up-to-date. Bellingcat’s tool is set up to search the database from April 2023 and will be updated twice a year.
On the OpenStreetMap web interface, the “query” tool can be used to view information about the features that exist in the map and how they are tagged.
For example, if we click on the small rectangular park in the centre of the map, we can see a list of all map features near the selected location.
In addition to many benches, trees (uncommon outside of very densely mapped Western European cities), and roads, we can also see the memorial “Chasseurs Ardennais.” Clicking on this item in the list shows all of the tags that are associated with it.
Browsing OpenStreetMap features like this can be useful for understanding how well mapped a location is. For example, in Khartoum, Sudan, we can see that there are far fewer mapped features, however roads, mosques, bus stops and parks are included.
Exercise: What other combinations of OpenStreetMap features can find the first example?
The simplest modification is to select “shop (any)” instead of “convenience store” combined with “fountain” and “railroad.” Notice that this returns many more results, because it is a more general query. However, the correct location is still included. Also notice that it includes many very similar locations, because it will return one result for each shop, as this is the first item in the query. Reversing “shop (any)” and “fountain” so that “fountain” is the first filter in the query will instead return one result for each fountain.
Making the search more general means that some queries might time out. Since we now know the area we are looking at, it is possible to experiment with filters by zooming in on Brussels and searching only that region.
“Plaza/square” and “water body” could also be useful search queries for this location. For example, “plaza/square,” “water body,” and “railroad” find it quite easily. Without “railroad,” it is more difficult, but can be matched using pedestrian paths or buildings.
Searching for Custom Features
There might be some features in an image that don’t yet have presets in our tool. You can search for those objects by adding a custom filter in the tool. To do this, you need to know the correct OpenStreetMap tag to query. OSM tags consist of a key and value (“key” = “value”), for example, “oneway” = “yes”. These tags carry a wealth of information about mappable things in the world. However, it is a collaboratively edited project, and sometimes these tags can be a bit chaotic. The best way to figure out how a particular object might be labelled is to consult the OpenStreetMap wiki.
If you are using a preset, there is also a link to the wiki for the key the preset uses. This can be a useful starting point. For example, let’s take a closer look at the convenience store preset we used above.
If you click on the link next to ‘shop’, you are taken to the wiki page for this key. The wiki contains other common values for this key. For example, we can see that “shop=bakery” is a valid OSM tag in the wiki.
When adding a custom feature, the search tool will suggest the most common OSM tag values as autocomplete suggestions. For instance, we can find ‘bakery’ in the list, or we can click it directly.
Now, we can click the “Add Custom Feature” button to add this as a search parameter.
In this case, we have added it as an “any” feature, meaning that it matches points, lines, and polygons, which are exactly what they sound like. A point can be anything represented by a single point on the map, and unfortunately can often be interchangeable with a polygon. For example, a bakery might be represented by a point at its location, or it could be a polygon that traces the outline of the building. Lines can be clearer – for example, roads, fences, walls, etc are all definitively lines. If you know what kind of object you are looking for, you can change the “Feature type” selector. Otherwise, using “any” will find any type of feature (but will be slightly slower).
This point/line/polygon taxonomy is different from how OpenStreetMap data itself is structured. It can be helpful to understand this structure when browsing the OpenStreetMap wiki, as you can also see how many of each type of object exists in the OSM database with that tag: nodes, ways, and relations.
- These are single geographic points. Some of these represent point features (for example, a power pylon or bus stop), but many of them are used as parts of ways.
- These are collections of points that either represent lines (like a road) or a polygon (like a building or industrial area).
- These are collections of ways or nodes that are linked in some way. For example, bus stops along a particular bus route, or disjointed polygons that are part of the same nature reserve.
So in this case, we can see that objects with the “shop” tag are mostly nodes (points), but about 20% are ways (lines/polygons, in this case probably polygons).
Using Custom Features to Geolocate Another Image
Let’s illustrate the use of a custom feature with a second, trickier example.
How could this image be geolocated with the OSM tool?
First, we need a region to start searching in. What appears to be Simplified Chinese characters can be seen on the wind turbines, so let’s assume that this image is taken in China.
Additionally, we can see a large mountain range in the background and the earth seen in the foreground of the picture appears to be very dry. These visual clues could suggest the image was taken in the deserts of Xinjiang, in far western China, so we will search there.
There are two obvious features that we can use with the OSM search tool: the wind turbines and the railway line. Though the mountains are clearly helpful for geolocation, it is not usable for the OSM search tool as they are much further than 500 metres away from our location. There is no preset in the tool for wind turbines so it is necessary to create a custom feature. To do this, it is important to know how wind turbines are tagged in OpenStreetMap. Googling “OSM tag wind turbine” finds the relevant wiki page.
On the wiki page, we can see that this tag is mainly applied to nodes (point features).
This is all the information need to go ahead and create a custom feature: generator:source=wind .
We can add the railroad feature as well, as it is visible in front of the wind turbines in the image. Since it is hard to tell from the photograph how close the railroad and the wind turbines really are, let’s set the distance slider to the maximum of 500 metres.
We’ll choose a search area that covers a wide region around Xinjiang. Note the warning message about the size of the search area. As mentioned earlier, search regions that are too large might not be searchable. However this is related to the amount of detail in OpenStreetMap, which tends to be highest in Europe and North America. Searches in other parts of the world can cover larger areas without posing as much of an issue.
After running the search, we have 100 results (“of many,” indicating there might be additional results not viewable unless we search a smaller area.) However, it is not immediately clear which of the results might be the one we are looking for.
You have a couple of options to examine the results; one is to use the ‘Google/Terrain/Satellite’ options to view the wind turbines, another is to click on the coordinates and explore them in Google Maps.
A third option to explore the results and find the right area, is to export these points as a KML file and open it up in Google Earth. Scroll to the bottom of the page and click the “Export as KML” button to download a KML file.
The points are scattered over a large area. However, because we are looking for wind turbines near large mountains, the points in the northwest are promising. Zooming in, we can see multiple wind turbines arranged in rows, similar to what can be seen in the photograph.
Looking more closely, we can see that not all of the wind turbines are pinned. This is because there is a maximum of 100 features returned from the OSM search tool. Still, even with this limited number of features, it was able to guide us to this wind farm location.
Following the rail line along the wind farm, one area looks particularly promising. We can see an earthen berm from the original image, the draining culvert, and a light coloured patch of soil that matches the soil in the image.
Finally, if we zoom in to Google Earth’s ground level view, we see a good terrain match with the background mountains at this location (partially outlined in red.)
This shows how even when there are few features in an image the OpenStreetMap Search Tool can be useful for geolocation – especially when combined with other tools such as Google Earth.
Access to the Tool
You can currently access Bellingcat’s OpenStreetMap Search Tool by visiting: https://osm-search.bellingcat.com/.
It requires a login with a Google account. As we are currently testing this tool, we cannot provide any guarantees about uptime or accessibility. Additionally, we are logging query requests in order to track performance and identify bugs.
Update (14 June, 2023): The source code for the OSM Search Tool is now available on Bellingcat’s Github page.
Bellingcat is a non-profit and the ability to carry out our work is dependent on the kind support of individual donors. If you would like to support our work, you can do so here. You can also subscribe to our Patreon channel here. Subscribe to our Newsletter and follow us on Twitter here and Mastodon here.