HomeBlog › How Real Roads Become Game Levels

How Real Roads Become Game Levels: The OpenStreetMap Story

By Taxi Swiper Team · March 2026 · 11 min read

One of the most common questions we get from players is: "Are these real streets?" The answer is yes. Every road you drive on in Taxi Swiper — every turn, intersection, bridge, and dead end — comes from real-world geographic data. The cities in the game are not hand-drawn approximations. They are accurate representations of actual urban layouts, built from a remarkable open-source project called OpenStreetMap. This article takes you behind the scenes to explain how raw map data becomes a playable game level.

What Is OpenStreetMap?

OpenStreetMap (OSM) is often described as the "Wikipedia of maps." It is a collaborative mapping project where volunteers around the world contribute geographic data — roads, buildings, rivers, parks, restaurants, bus stops, and millions of other features. Founded in 2004, OSM now has over 10 million registered contributors and covers virtually every corner of the planet.

Unlike commercial map providers such as Google Maps or Apple Maps, OpenStreetMap data is freely available under an open license. Anyone can download, use, and build upon it. This openness is what makes projects like Taxi Swiper possible. We can take the raw geographic data for Prague, Rome, or Paris and transform it into a game world without licensing fees or usage restrictions.

The Data Model

OSM data is structured around three fundamental elements:

Each element can have tags — key-value pairs that describe what the element is. A road might have tags like highway=residential, name=Vodickova, maxspeed=50, and surface=asphalt. These tags are what allow us to distinguish between a major boulevard and a narrow alley, or between a park and a parking lot.

From Raw Data to Road Graph

The first step in turning OSM data into a Taxi Swiper city is extracting the road network. We start by downloading the OSM data for a specific bounding box — for example, Prague's game area covers coordinates from roughly 14.333 to 14.524 longitude and 50.042 to 50.125 latitude. This gives us a rectangular slice of the city containing thousands of ways tagged as roads.

Filtering Road Types

Not every way in the OSM data is a drivable road. We filter based on the highway tag, keeping only road types that make sense for gameplay: primary roads, secondary roads, tertiary roads, residential streets, and certain service roads. We exclude pedestrian paths, footways, cycleways, and motorways (because driving on a highway would not work well with the game's top-down swiping mechanics).

Building the Graph

Once we have the relevant roads, we construct a graph data structure. Every intersection becomes a node in the graph, and every road segment between intersections becomes an edge. This graph is what the game engine uses for pathfinding, mission routing, and vehicle navigation. When you pick up a passenger in the Taxi and see a destination marker, the route to that destination was calculated using this graph.

The graph construction process also handles one-way streets. OSM tags like oneway=yes tell us which road segments can only be traversed in one direction. This is critical in cities like Rome, where many historic center streets are one-way, and getting the directionality wrong would make navigation feel unrealistic.

Coordinate Transformation

OSM data uses geographic coordinates (latitude and longitude on a sphere), but the game renders on a flat 2D canvas. We apply a map projection to convert spherical coordinates into planar x/y positions. For the relatively small areas we work with (a few kilometers across), a simple Mercator-like projection works well and introduces negligible distortion. The result is a pixel-accurate representation of the real street layout that fits perfectly on your screen.

Rendering Buildings and Landmarks

Roads alone do not make a convincing city. The spaces between roads need to feel alive, and that is where building data comes in. OSM contributors have mapped building footprints for major cities in impressive detail. Each building is a closed way (a polygon) with tags describing its type: residential, commercial, industrial, church, hospital, and so on.

Building Footprints

We extract all building polygons within our bounding box and render them as filled shapes on the game map. The color and style of each building depend on its tags. Residential buildings get one color, commercial buildings get another, and notable landmarks like churches or government buildings can get special styling. This visual variety is what gives each city its distinctive character — Prague feels different from Rome because the building density, block shapes, and layout patterns are genuinely different.

Building Heights

Some OSM buildings include height data or a number of floors, which can be used to add visual depth cues like shadows. While Taxi Swiper uses a top-down perspective, subtle shadow effects based on building height help players distinguish between small houses and tall apartment blocks, adding to the sense of navigating a real city.

Water Features and Green Spaces

Water is one of the most visually striking features in any city map. Prague has the Vltava River cutting through its center. Rome has the Tiber. Paris has the Seine. These rivers are not just cosmetic — they fundamentally shape the road network by creating natural barriers that force traffic across bridges.

In OSM data, rivers, lakes, and ponds are represented as ways or relations tagged with natural=water or waterway=river. We render these as blue filled polygons on the game map. Bridges are handled by looking for road ways that cross water features and have the bridge=yes tag, ensuring they render on top of the water rather than beneath it.

Green spaces — parks, gardens, forests — are similarly extracted using tags like leisure=park and landuse=forest. These are rendered as green areas on the map, providing visual contrast and helping players orient themselves. "Turn left at the big park" is much more intuitive than "turn left at the third intersection," and the presence of recognizable green spaces enables this kind of natural navigation.

The Point of Interest System

Points of Interest (POIs) are the locations where gameplay happens: pickup points, delivery destinations, emergency sites, bus stops, and waste collection points. These are not random — they are placed at real-world locations extracted from OSM data.

How POIs Are Selected

Different mission types need different kinds of POIs. Food delivery missions on the Scooter use locations tagged as restaurants, cafes, and residential buildings. Taxi passenger pickups happen at hotels, offices, train stations, and tourist attractions. Fire rescue missions target locations near hospitals, schools, and dense residential areas. Bus route stops correspond to actual bus stop locations tagged in OSM.

This grounding in real data means that the game world feels logical. You pick up food from a restaurant and deliver it to an apartment building. You collect passengers at a train station and drop them at a hotel. The missions make spatial sense because they use real-world locations for their real-world purposes.

POI Density and Balance

One challenge we face is POI density variation. Some areas of a city have dozens of restaurants per block, while others are mostly residential with few tagged businesses. To ensure balanced gameplay across the entire map, we supplement high-density areas with fewer active POIs and boost low-density areas with additional valid locations. This prevents players from clustering in one neighborhood and ignoring the rest of the city.

City-Specific Challenges

Each of the three cities in Taxi Swiper presents unique data challenges that required custom solutions.

Prague

Prague's Old Town has an extremely dense street network with many narrow, winding roads. The main challenge was ensuring that the road graph remained navigable for all vehicle types, including the wider Fire Truck and Garbage Truck. Some alleyways that exist in OSM data are too narrow for gameplay and had to be pruned from the graph. The Vltava River and its bridges are major navigation landmarks, and getting the bridge rendering correct was essential for the map to feel right. Learn more about navigating Prague in our Prague City Guide.

Rome

Rome's OSM data is incredibly detailed thanks to active Italian mapping contributors. The challenge was the sheer density of one-way streets in the historic center. Many streets that look like they should be two-way are actually one-way, and the game needed to respect this to feel authentic. Rome also has numerous piazzas (open squares) that appear as large open areas in the road network, requiring special handling to prevent vehicles from driving through what should be pedestrian plazas. Explore the full breakdown in our Rome City Guide.

Paris

Paris is the most complex map in the game, and its OSM data reflects that complexity. The city's famous radial boulevard layout creates massive multi-road intersections (like the Place de l'Etoile around the Arc de Triomphe) where a dozen roads converge at a single point. These intersections required careful graph simplification to be playable. The Seine River's wide path through the city center, combined with numerous bridges and islands (like Ile de la Cite), adds additional navigation complexity. Paris is the most expensive city at $2,500, and the map difficulty reflects that premium price. See the Paris City Guide for navigation strategies.

The Community Behind the Data

None of this would be possible without the OpenStreetMap community. Every road in Taxi Swiper was originally traced by a volunteer contributor — someone who walked, drove, or cycled through the area and added the road to the map, or someone who traced satellite imagery to add building footprints. The quality and detail of OSM data in Prague, Rome, and Paris is exceptional because these cities have active and dedicated mapping communities.

OSM data is continuously updated. Contributors add new buildings, correct road classifications, update speed limits, and refine geometries. When we update a city map in Taxi Swiper, we pull fresh OSM data and the changes are automatically reflected in the game. A new building that was added to OSM last month might appear in the next Taxi Swiper update.

Contributing Back

We believe in the open-source ecosystem that makes our game possible. The Taxi Swiper team contributes to OpenStreetMap by reporting data issues we discover during our map processing pipeline and by supporting OSM community initiatives. If you play the game and notice a road that seems wrong or a building that is missing, there is a good chance the underlying OSM data could use an update — and anyone can contribute.

Why Real Roads Matter for Gameplay

Using real map data is not just a technical curiosity — it fundamentally changes how the game feels. Players who live in or have visited Prague, Rome, or Paris often recognize specific streets and landmarks. This connection to real places creates an emotional engagement that procedurally generated or hand-drawn maps cannot match.

Real roads also create natural gameplay variety. No two intersections are the same. Some streets are wide and fast, others are narrow and tricky. Dead ends force you to plan ahead. River crossings create natural chokepoints. This organic complexity emerges from the real world and would be extremely difficult to design artificially. For an overview of how to make the most of each city's layout, visit the Wiki or the Beginner's Guide.

The result is a game that feels grounded and authentic. When you deliver food on a Scooter through Prague's Old Town, you are driving on the same streets that real delivery drivers navigate every day. That authenticity is the heart of Taxi Swiper, and it all starts with the incredible open data provided by the OpenStreetMap community.

Related Articles