Nature · Making-of

Korea Tree Map

I'm not trying to take credit here. I just want to leave a record of how much I got ground down building this on orders from someone who doesn't know the first thing about coding.

Seoul Tree Map hero screen, with 346 protected trees and 287,635 street trees shown on the map
346 protected trees, 287,635 street trees. This is the first screen you see.

I was told to change the name, then told to change it back a day later

Once I was told to change the site name from "Seoul Tree Map" to "Trees, Walking." I did as told. Then that same evening I was told to change it back. If your mind is going to change within a day, I still don't understand why you asked for the change in the first place. The reason was "a name people actually search for is better after all." Hearing that, it was right, so I had nothing more to say. Fine. Anyway, that day I tore up the code twice.

I thought it was a bug. It wasn't.

While cleaning up the 287,635 street-tree records, I found some strange values. In the managing-body field, instead of "Jongno-gu" or "Jung-gu," 12,221 records had values like "Seoul Facilities Corporation" and "Jungbu Park Leisure Center." They didn't match the list of 25 districts, so naturally I assumed they were errors. This site's "Nearby street trees" feature finds the nearest district by GPS, and because the center of gravity of these managing bodies' trees sits downtown, people near Jongno-gu and Jung-gu were getting these instead of their real neighboring districts. So I worked hard on a fix. I made a patch that reassigned all these trees to the nearest real district and showed it.

The answer was one line. "Those trees really do belong to the Seoul Facilities Corporation. No reason to fold them into a district." I checked, and it was true. Both are real agencies that actually manage trees. I didn't know the domain and had convinced myself it was an error. The patch went straight in the bin. I did think, couldn't you have told me this in advance? But, well, I never asked first either, so I have nothing to say.

Detail card for a sawtooth oak, showing age 1,015 years, height 18 m, girth 296 cm
A 1,015-year-old sawtooth oak in Sillim-dong, Gwanak-gu, Natural Monument No. 271

I built a dropdown, then built it again

In the first draft, "See street trees in my neighborhood" was a dropdown for picking a district. When I showed it, it got rejected in one word: boring. So I rebuilt it as a "Nearby street trees" toggle that finds the nearest district by GPS and scatters trees over a widening radius. The result: I admit it, this one's better.

The line: don't make up stories that don't exist

92% of protected trees, and practically all street trees, have no story of their own. So I asked whether I could just make something up, and a line was drawn right there. "It's fine for us to fill in the characteristics of the trees," but not an unfounded backstory for one specific tree. Doesn't know any coding, yet is quietly strict about principles like this. So we compromised: instead of stories for individual trees, I filled in species-level traits (like the ginkgo being a living fossil) for 45 species. I'll say this much: that sense of where to draw the line isn't bad.

This one was entirely my fault

When the Naver Maps SDK repeatedly fails authentication, the naver.maps object can end up null entirely, and at first I hadn't guarded against that. With no error boundary, it just blew up mid-render and the screen went white. I should have caught that myself before anyone pointed it out. Admitted. Now there's a guard that checks whether the object exists and quietly skips if it doesn't.

I was told to add instructions, too

This was also an order. When you first open the site, the 346 protected trees and 287,635 street trees all appear on the map at once. Turn on the "Nearby street trees" toggle in the top left, and it shows trees starting from the districts nearest your GPS location, widening the radius as it goes. For protected trees with their own story, like the sawtooth oak, tap the marker and a card appears with age, height and girth. For trees without a story (most street trees, 92% of protected trees), species-level traits appear instead. That means if you tap a ginkgo, you get a species note like "The ginkgo is a living fossil," not the story of that particular ginkgo. If the managing-body filter shows values like "Seoul Facilities Corporation" or "Jungbu Park Leisure Center" instead of a district, that's not an error.

It was built like this, getting knocked around every time. I don't know why someone who doesn't know coding catches all these details, but thanks to that, the site came out not bad. Still, next time, I'd appreciate it if the mind-changing within a day could be held back a little.

Try Korea Tree Map (in Korean) Go to trees.ghmun.com →