도쿄 카메라가 사이타마 지도에 찍힌 이유 — 지도 서비스의 진짜 비용은 좌표에 있다
대괄호를 노이즈로 지웠다가 동명 지역으로 빨려 들어갔고, bbox 는 옆 현을 못 막았다
일본 각지 YouTube 라이브 카메라를 지도에 꽂아 둔 서비스(tomarigi.me)를 보고 사이타마판을 직접 만들어 봤다. 해 보니 지도 서비스를 따라 만드는 비용은 코드가 아니라 좌표에 있었다. Leaflet 지도와 YouTube 임베드는 금방 붙는다. 남은 시간은 전부 「이 영상이 어디에 있나」 와 싸우는 데 들었다. 그 싸움에서 밟은 함정이 셋, 마지막에 남긴 방어선이 하나다.
서비스가 쌓는 자산은 매핑 하나
2026-08-22 에 tomarigi 를 브라우저 개발자 도구로 들여다봤다. Next.js 위에 Leaflet(Canvas 렌더러), 데이터는 /api/spots 한 번에 약 330KB · 1,312건을 통째로 받는다. 썸네일은 img.youtube.com 을 바로 쓴다. 레코드는 사실상 이게 전부다.
{"id":"...","name":"【LIVE】京都 随心院ライブ中継カメラ",
"lat":34.955,"lng":135.82,"category":"landmark",
"video_id":"5Ica9fIP_Ng","is_live":true}
영상은 원 배급자의 YouTube 임베드로 재생된다. 서비스가 쌓는 건 video_id ↔ 위경도 매핑 하나다. 그 1,312건을 어떻게 모았는지는 공개된 자료를 못 찾았다.
182건 중 36건
내 1차 수집(사이타마 대상) 결과다.
YouTube 검색 후보 182건
지오코딩 통과 36건 ← 80% 가 여기서 탈락
지오코딩은 지명 · 주소 문자열을 위경도로 바꾸는 일이다. 탈락 이유는 대부분 「제목에서 지명을 못 뽑음」 아니면 「뽑았는데 대상 지역 밖」 이었다. 그런데 통과한 쪽에도 틀린 게 섞여 있었다. 지도를 훑다가 도쿄 하천 카메라가 사이타마에 꽂혀 있는 걸 봤다.
함정 1 — 노이즈로 지운 대괄호가 유일한 주소였다
일본 하천 감시 카메라 제목은 이렇게 생겼다.
【呑川】池上映像監視局[大田区池上1]
【LIVE】 같은 머리표를 지우는 김에 대괄호 [] 도 같이 지웠다. 남은 지명 조각이 동명의 다른 지역으로 빨려 들어갔다.
【呑川】池上映像監視局[大田区池上1] → 埼玉県ふじみ野市池上 (실제: 도쿄 오타구)
【新河岸川】笹目橋映像監視局[板橋区…] → 埼玉県戸田市笹目 (실제: 도쿄 이타바시구)
【綾瀬川】内匠橋映像監視局[足立区…] → 群馬県富岡市内匠 (실제: 도쿄 아다치구)
함정 2 — bbox 는 옆 현을 못 막는다
세 번째 줄은 군마현이다. 사이타마 bbox(위경도 사각형) 검사를 걸어 두었는데 통과했다. 도미오카시(경도 138.90, 위도 36.24)가 그 사각형 안에 들어간다. 사이타마 서쪽 산간과 군마 동쪽이 경도로 겹치기 때문이다.
행정구역을 사각형으로 근사하면 경계에서 반드시 샌다.
함정 3 — 고쳤더니 폴백이 틀렸다
대괄호 주소를 1순위 후보로 올렸다. 이번엔 이렇게 됐다.
1순위 [調布市東つつじヶ丘2] → 도쿄 주소 → 대상 밖 → 탈락
2순위 채널명 「入間川」 → 埼玉県狭山市入間川 → 통과 (틀림)
후보를 신뢰도 순으로 쌓고 차례로 시도하는 설계였다. 처음엔 튼튼한 줄 알았다. 그런데 대괄호 주소가 있으면 그게 유일한 진실이다. 그게 대상 밖이라면 폴백 없이 버려야 했다. 확실한 정보가 「아니다」 라고 한 걸 덜 확실한 정보가 뒤집게 두면 안 된다.
마지막 방어선 — 좌표가 아니라 문자열
def in_target?(geocoded)
geocoded[:address].start_with?('埼玉県')
end
지오코더가 돌려준 정규 주소가 埼玉県 으로 시작하는지 본다. bbox 는 보조로만 남겼다. 다시 수집하니 다른 현이 섞인 건 0건, 최종 58건이 남았다. 그중 임베드가 허용돼 지도에서 바로 재생되는 건 24건이었다.
거부된 67건도 다시 훑었다. 거의 전부 맞게 버린 것이었다. 사이타마처럼 보인 3건은 「大宮」 이었는데, 大宮 은 나라현 나라시와 도쿄 스기나미구에도 있다. 실패 로그가 필터가 맞다는 증거가 됐다.
bbox · 문자열 · 경계 폴리곤
| 방법 | 잘 막는 것 | 놓치는 것 |
|---|---|---|
| bbox 사각형 | 엉뚱한 지방 | 옆 현 (경계는 사각형이 아니다) |
| 주소 접두 문자열 | 옆 현, 동명 지역 | 지오코더가 주소 자체를 틀리게 돌려줄 때 |
| 행정구역 경계 폴리곤 | 경계 근처 좌표 | 경계 데이터를 따로 들고 다녀야 한다 |
현 단위로 거르는 거라면 주소 문자열 하나로 충분했다. 시 · 구 경계까지 정확해야 할 때 폴리곤을 붙이면 된다.
지도 · 위치 데이터를 모으다가 좌표가 자꾸 엇나간다면 대개 코드보다 데이터 정제 쪽 문제다. 같이 볼 사람이 필요하면 https://www.negabaro.com/contact 로 연락 주면 된다.
동작 흐름
영상 제목에서 지명 · 주소 후보를 뽑는다 (대괄호 안 주소를 지우지 않는다)
대괄호 주소가 있으면 그것만 쓴다. 대상 밖이면 폴백 없이 버린다
지오코더가 돌려준 정규 주소의 접두(埼玉県)로 대상 지역을 판정
bbox 는 보조, 거부 로그를 다시 읽어 필터를 검증