지도 인터페이스미니맵결정

지도 인셋 규칙을 실측으로 정하기

인셋 지도를 언제 띄울지 정거장 155개를 전부 돌려서 정했다. 예외는 브뤼셀 하나였고, 104px이라는 크기는 끝까지 눈대중으로 남았다.

2026년 9월 13일5분

세계일주 기록 사이트에는 오른쪽 아래에 작은 지구본이 떠 있다. 지금 보는 도시가 세계 어디쯤인지 알려 주는 물건이다.

브라질에서 그게 쓸모가 없었다.

도시를 보면 카메라가 바짝 붙는데, 그 높이에서 화면에 담기는 건 528×330km다. 브라질은 그 스무 배쯤 된다. 그런데 지구본 속 브라질은 엄지손톱이고 내 위치는 그 안의 점이다. "세계 어디"는 알겠는데 "브라질 어디"를 모른다.

그래서 나라 하나만 그리는 작은 지도를 옆에 하나 더 붙였다.

언제 띄울까

처음엔 "큰 나라에서만"이라고 생각했다. 마침 카메라 코드에 그런 목록이 이미 있었다. 다닌 범위가 1,000km를 넘는 나라 — 인도, 브라질, 칠레, 페루, 콜롬비아, 아르헨티나, 볼리비아.

그걸 안 빌렸다. 베트남에서도 안 보이고 이탈리아에서도 안 보이는데 둘 다 목록에 없다.

그래서 조건을 목록 대신 계산으로 뒀다. 화면에 담기는 실제 거리를 줌에서 구하고, 지금 서 있는 자리에서 국경까지의 거리와 비교한다.

need = max((reach.w * 2) / view.w, (reach.h * 2) / view.h);
뜬다 = need > 1; // 이미 떠 있으면 1/1.05 — 경계에서 깜빡이지 않게

거리는 나라 중심 말고 지금 서 있는 자리를 기준으로 계산한다. 카메라가 그 도시를 화면 한가운데 두니까.

전부 돌려 보니 예외가 하나였다

여정에 정거장이 155개, 나라가 31개다. 전부 돌려 봤다.

정거장 155곳 · 나라가 화면보다 몇 배 큰가
1251020배1.00
채택 1.00
인셋 안 뜸
1 / 155
BE 브뤼셀
인셋 뜸
154 / 155
가리키면 이름이 나온다

154곳에서 나라가 화면보다 컸다. 안 걸린 건 브뤼셀 하나, 0.94배.

그리고 두 번째로 작은 값이 1.22(부다페스트)다. 0.94와 1.22 사이가 비어 있으니 임계값을 1.0에 둘지 1.1에 둘지 고민할 일이 없었다. 위 그림에서 선을 옮겨 봐도 브뤼셀만 왔다 갔다 한다.

다만 그 빈 구간은 전체 범위의 1.2%밖에 안 되고, 1.3까지 올리면 프라하와 아부다비가 따라 빠져 다섯 곳이 된다.

155곳 중 154곳이면 사실상 "항상"이다. 그래도 계산으로 남겨 뒀다. 규칙이 자기가 왜 그런지 설명하고, 나중에 카메라 줌이 바뀌면 조건이 알아서 따라오기 때문이다.

104px은 사실 눈대중이었다

폰에서 이 지도를 104px 정사각으로 잡았다.

근거를 대라면 댈 수 있다. 폰에서 기존 지구본이 140×70이니 넓이가 9,800이고, 104 정사각은 10,816이다. 거의 같다. 그래서 화면 양쪽 구석의 두 지도가 같은 무게로 앉는다.

순서가 반대다. 104는 눈으로 보고 정했다. 넓이가 비슷하다는 건 나중에 알아차렸고, 알아차리고 나서 근거로 삼았다.

넓이가 진짜 근거였다면 104가 아니라 99여야 한다. 9,801이니까.

그 크기에서는 모양만 보인다

104px에서 나라 모양은 읽히는데 경로는 안 읽힌다.

같은 나라, 쉼 104px 과 열림 358px
쉼104px
경로 26.6px · 안 읽힘
열림358px
경로 91.6px · 읽힘
윤곽은 각 크기에서 0.9px 보다 촘촘한 정점을 버린 것이라 두 판의 디테일이 실제로 다르다. 경로 px 은 정거장 좌표 bbox 의 긴 변 길이다. 40px 이라는 경계는 계산한 값이 아니라 내가 그어 놓은 선이다.

브라질 26.6px, 칠레 26.2px, 이탈리아 19.3px. 이만한 얼룩으로는 어디를 어떤 순서로 다녔는지 알 수 없다. 그래서 경로는 열었을 때 본다. 열면 358px, 브라질 경로는 91.6px가 된다.

여기에도 예외가 있다. 인도를 눌러 보면 같은 104px에서 경로가 55.5px다. 페루 58.3, 콜롬비아 55.9. 이 나라들은 쉬는 상태에서도 경로가 읽힌다. 안 읽히는 건 정거장이 한쪽에 몰린 나라들이다.

붙이고 나서 바뀐 것

화면 사각형을 뺐다가 다시 넣었다. 인셋 안에 "지금 화면이 이만큼"을 그리는 사각형인데, 기획 때 "지름 4px밖에 안 되니 빼자"고 적었다. 그런데 그 계산을 잘못했다. 목업 지구본의 세로를 나라의 가로와 견줬고, 지름 자리에 반지름을 넣었다. 실제로는 200px에서 22×12px로, 작지만 분명히 보인다. 숫자 하나 틀려서 멀쩡한 기능을 지울 뻔했다.

"인셋이 뜨면 지구본의 주황 점을 비운다"는 폐기했다. 글로는 말이 됐는데, 점을 빼니 그 자리에 배경색 구멍이 남아서 라이트 테마에서 흰 점으로 보였다. "왜 갑자기 흰 점이 생기냐"는 말을 듣고 되돌렸다.

손을 얹는 지점의 기준을 절대에서 상대로 바꿨다. 전에는 지도에 손을 올리는 순간 표시가 엉뚱한 데로 순간이동했다. 지구본에서는 석 달을 건너뛰기도 했다. 지금은 손이 닿은 곳을 현위치로 잡고 거기서 좌우로 걷는다. 기획서에 없던 항목이고, 두 지도 다 바꿨다.

ISO 코드 라벨도 뺐다. 104px에서 읽히게 키우면 420px로 열었을 때 간판이 된다.

104px, 손의 방향, 브뤼셀

104px은 눈으로만 확인했다. 폰에서 보고 그대로 두기로 했으니 보기에는 문제가 없는데, 처음에 눈으로 정한 값을 나중에 눈으로 확인한 것이라 숫자로 따지면 이 값이 맞는지는 모르겠다. 크기 슬라이더를 붙여서 다른 값과 나란히 놓고 보면 좀 더 분명해질 것 같다.

손을 따라 걷는 방향이 미정이다. 손의 가로 위치를 경로 위 거리로 읽으면 여정을 빠짐없이 훑을 수 있다. 대신 왔던 길을 되짚는 구간에서는 손은 오른쪽으로 가는데 표시가 지도에서 왼쪽으로 돌아온다. 나라 안 구간 124개 중 29개가 그렇다. 이탈리아가 최악인데 토리노를 네 번 들르며 사방으로 뻗어서, 손을 한쪽으로 미는 동안 표시가 제노바에서 브라로, 토리노로, 친퀘테레로 튄다.

대안은 손에서 제일 가까운 경로 위의 점을 잡는 것이다. 방향은 늘 맞지만, 손이 한 높이를 쓸면 세로로 먼 구간이 통째로 빠진다. 둘 다는 안 된다. 지금은 빠짐없이 훑는 쪽을 택해 뒀고, 쓰다가 거슬리면 한쪽만 바꾸지 않고 두 지도를 같이 되돌릴 생각이다.

브뤼셀에서는 인셋이 안 뜬다. 규칙대로다. 다만 브뤼셀에 서 있는 사람에게 "당신 나라는 화면에 다 들어오니 필요 없습니다"가 납득되는 말인지는 모르겠다. 155분의 1이라 일단 두고 본다.

끝