OpenStreetMap logo OpenStreetMap

Transjabodetabek B41

Posted by rphyrin on 18 May 2025 in English.

Although I read the newspaper (almost) every day, lately I’ve been getting news faster through my social circle. It usually starts as a rumor from an online friend, popping up on my timeline :

“There’s a new bus route coming to town!”

“Look at this photo I took— they’re testing the route!”

“I tried the trial run. Here’s a draft of the route I recorded myself.”

That’s what I’d been hearing for the past few weeks.

And then, finally, that rumors showed up in the daily newspaper I read.

The Transjabodetabek B41 route, running from Vida to Cawang Sentral, was officially inaugurated on the morning of Thursday, May 15, 2025, by Jakarta Governor Pramono Anung and Bekasi Mayor Tri Adhianto, in Cawang. The route is operated with 12 buses, running daily from 5:00 AM to 10:00 PM (WIB). During peak hours (5:00–7:00 AM), buses arrive every 10 minutes, and every 20 minutes during off-peak hours. Covering a distance of 42 kilometers, the route takes about 60 minutes to complete. It includes six stops: across from the Vida Marketing Office, Cipendawa Intersection 1, Komsen, Jatibening 1, Cawang Taxi Pool, and Cawang Sentral. The fare is Rp 3,500 per trip, reduced to Rp 2,000 during peak hours. “Usually, traveling from Bekasi to Jakarta costs between Rp 15,000 to Rp 20,000. With this new fare, we hope residents can save money while enjoying a comfortable journey,” said Tri.

So, those rumors I thought were baseless? They turned out to be completely true. And the route is already up and running today.


About a year ago, when a new bus route was introduced in my town, I was among the first passengers to ride it from terminal to terminal—purely for local news reporting and research. I went to one terminal, boarded the bus, and documented everything: the surroundings, the bus interior, the atmosphere. I also activated my Tracklia GPS tracker on my phone to record every movement the bus made. Once I arrived at the final stop, I headed home, processed the data I had collected, and shared the results with the local community.

I wanted to do the same thing again with this new route—for research purposes.

So today, I did just that. I went to the Cawang Sentral bus stop, boarded the bus, turned on the Tracklia GPS tracker, and rode it all the way to the Vida stop. Then, I followed the same data-processing steps I had used a year ago. Fortunately, I still had that old Python script.

Now it’s done.

The route is visualized as dots, color-coded by the bus’s calculated instantaneous velocity.


But something still feels incomplete.

I think this bus route should be added to OSM too.

The problem is, I’ve never seriously mapped a bus route in OSM before.

So I started learning. I studied existing Transjakarta route relations, copied the relevant tags for the main relation, and figured out how relation members and roles work within it.

Using the color-coded GPS track I generated from my script, I began mapping the route in JOSM, step by step.

It was tricky.

First, I had to download the relevant OSM objects—mostly roads with various classifications like motorway, trunk, primary, secondary, etc.

Since this route covers a large area, selecting a massive rectangle in JOSM to download everything would be inefficient. Instead, I downloaded data selectively: combining bounding boxes with specific highway classifications. This meant constantly switching between osm.org and JOSM—inspecting roads, checking its tags, then crafting the right Overpass queries in JOSM to grab only what I needed. I repeated this process until I had all the necessary OSM data in JOSM.

Second, I sometimes had to split roads into smaller segments to allow the bus route to follow the correct path—turning left or right where needed. In JOSM, this meant selecting both the node where I wanted to cut and the road I wanted to split (holding Shift while clicking both), then pressing ‘P’ to split. Afterward, I’d pick the correct segment to include in the route.

Third, I had to carefully add each road segment to the route relation, one by one, making sure everything was connected without gaps. Thankfully, JOSM’s relation viewer helped verify connectivity.

And now—it’s finished.

This is probably my first-ever public_transport:version=2 bus route relation contribution, built entirely from scratch. I actually rode the bus, tracked the GPS data, and turned it into a OSM route.


P.S.

  1. The newspaper article mentioned “Cipendawa Intersection 1”, but based on what I verified in the field, it’s actually “Cipendawa Intersection 2.” My guess is that the article only covers the Vida → Cawang direction, whereas my field report is based on the Cawang → Vida route. So this work isn’t fully complete—someone still needs to take the Vida → Cawang ride, record the GPS track, and map it.
  2. The newspaper also mentioned “Jatibening 1.” When the bus passed through Jatibening, I was busy covering a weather report, so I might have missed that stop.
Email icon Bluesky Icon Facebook Icon LinkedIn Icon Mastodon Icon Telegram Icon X Icon

Discussion

Log in to leave a comment