지난번 글에서는 홈페이지에서 제공되는 iD 편집기를 기준으로 날짜 태그와 필터링 방법에 대해 설명드렸습니다. 오늘은 JOSM 편집기에서 오픈히스토리컬맵 (이하 OHM)을 어떻게 편집하는가를 전해드리고자 합니다.
OSM 프로젝트에서 JOSM 편집기는 활용하시는 분들도 많지만 진입장벽이 있고 전혀 쓰지 않는 분들도 계시기에, JOSM을 모르고 계신 분들을 기준으로 설명드리겠습니다. 이미 사용 중이시라면 OHM 관련하여 궁금하신 부분만 취해가셔도 좋습니다.
JOSM 편집기란
iD 편집기가 브라우저 환경에서 곧바로 편집하는 도구라면, JOSM은 서버에서 데이터를 내려받아 편집하고 업로드하는 설치형 프로그램입니다. iD와는 달리 데이터를 한번 다운로드하면 그 편집 영역에 어떠한 제한도 두지 않기 때문에, 국경이나 행정구역 같은 거대 지형지물을 편집하거나, 대량의 데이터를 편집할 때 강점을 보입니다. 또 iD보다 편집 기능이 더 많고, 여러 플러그인도 지원하여 나에게 알맞는 편집 환경을 꾸려나갈 수 있다는 점도 특징입니다.
OSM에서 iD 편집기가 주로 사용되는 것은 대부분의 경우 복잡한 편집을 요구하지 않아 iD 편집기로도 충분히 편집이 가능하기 때문이며 UI 면에서도 깔끔하기 때문입니다. 개인적으로도 iD 편집기에서 여러 태그를 검색하는 게 편리해서 왠만한 수정은 iD로 편집하고 있습니다.
반대로 OHM을 편집할 때에는 거의 매번 JOSM 편집기를 열게 됩니다. 물론 지난번에 보여드렸듯 날짜 필터링 등의 설정을 거치면 iD로도 OHM을 편집할 수 있습니다. 하지만 관계(Relation)로 각 시대별 동일 지물을 구현할 때에는 JOSM에서 편집해야 훨씬 편리한 경우가 많습니다. 더군다나 OSM보다 배로 많은 옛 국경이나 행정구역을 편집할 때, 아니면 여러 옛 지도 자료를 겹쳐가며 다각적으로 분석할 때에는 JOSM에서의 편집이 필수적이기도 합니다.
JOSM은 공식 홈페이지에서 설치하실 수 있으며 윈도우/맥OS 환경 자동 설치 프로그램도 제공합니다. Java로 구동되므로 최신 Java를 별도로 설치해야 할 수도 있습니다.
OHM 서버 설정과 데이터 불러오기
JOSM 설치 후 OHM을 편집하기 위해 가장 먼저 해야 할 것은 서버 주소 변경입니다. JOSM은 데이터를 불러올 때 OSM 서버로 자동 설정되어 있는데, OHM은 OSM과 별개의 서버로 굴러가기 때문에 바꿔야 합니다.
좌측 상단 탭의 편집 > 환경 설정(F12)에서 ‘OSM 서버’ 탭으로 들어갑니다. ‘기본 OSM 서버 URL 사용’ 체크란을 해제하고, 아래 URL 입력 란에 https://www.openhistoricalmap.org/api 를 입력한 뒤 ‘유효성 검사’ 버튼을 눌러 줍니다.
그 밑의 OAuth 2.0는 JOSM에서 서버에 접속할 때에 자동으로 로그인되도록 사전에 인증해 줍니다. ‘새 액세스 토큰’ 버튼을 누르면 OHM 홈페이지의 인증 창이 뜹니다.
OHM에서 로그아웃된 상태라면 먼저 로그인을 하시고, 그 다음으로 JOSM의 액세스를 승인해 주면 그 다음부터는 별도 로그인 없이 JOSM에서 OHM을 편집할 수 있게 됩니다.
서버 설정이 완료되었다면 데이터를 다운로드할 수 있습니다. 좌측 상단에 아래방향 초록 화살표 버튼을 누르면 ‘다운로드’ 창이 뜹니다. 지도에서 원하는 범위를 찾아 네모칸 구역으로 긋습니다.
네모칸의 범위가 너무 크면 서버 과부하를 이유로 경고 문구가 뜨면서 다운로드가 불가능해지므로, 적당한 크기로 설정하여 다운로드해 줍니다.
데이터를 성공적으로 불러온 모습입니다. 우측 ‘레이어’ 창에 '데이터 레이어 1’이라는 이름으로 다운로드한 데이터가 추가되어 있는 것을 볼 수 있습니다.
JOSM의 여러 편집용 창
iD 편집기에서 좌측에 편집용 탭이 뜨는 것처럼, JOSM에서도 편집용 창이 존재합니다. 편집용 창은 상단 탭의 '창’에서 필요한 만큼 체크하여 띄울 수 있습니다. 각 창은 우측에 고정되어 있는 것이 기본인데, 우측상단의 핀 버튼을 누르면 고정을 해제하고, X버튼을 누르면 꺼지게 됩니다.
편집용 창은 여러 개로 각자 분리되어 있는데 그 중에서도 레이어, 태그, 선택, 관계, 필터의 다섯 가지 창은 편집 과정에서 필수적으로 사용됩니다.
앞서 언급했던 레이어 창 (Alt+Shift+L)은 지도상에 표시되는 여러 층의 자료를 겹쳐 활용할 때 사용합니다. 편집할 때에는 데이터만 불러오는 게 아니고 OSM 지도, 위성사진, 옛지도 등의 참고자료도 필요한데, 그것들의 보이는 순서를 정할 수 있습니다.
초록색 체크는 지금 편집하는 레이어를 표시하는데, 반드시 그 표시가 뜬 레이어만 편집할 수가 있습니다. 그 옆의 눈 모양을 클릭하면 레이어를 껐다 킬 수 있습니다. 하단의 화살표는 레이어를 오르고 내릴 수 있으며, 눈 버튼으로 투명도를 조절하고, 휴지통으로 레이어를 삭제합니다.
태그 창 (Alt+Shift+P)은 객체에 부여된 태그의 키와 값을 표시합니다. iD 편집기의 태그 입력란과 동일한 기능을 하기에 익숙하시리라 생각합니다. 이 창을 통해서만 태그 편집을 할 수 있기에 가장 많이 쓰이는 창이기도 합니다.
관계 창 (Alt+Shift+R)은 데이터에서 관계(Relation) 유형으로 설정된 모든 객체를, 선택 창 (Alt+Shift+T)은 지금 내가 선택하고 있는 객체를 목록으로 보여줍니다. 둘은 함께 사용되는 경우가 많은데, 자세히 설명하기엔 이야기가 길어지므로 나중에 다시 소개해 보도록 하겠습니다.
JOSM의 필터링
마지막으로 필터 창 (Alt+Shift+F)은 '필터’의 목록을 나타내는 창입니다. 필터는 필터 구문을 등록한 다음 그것을 체크하거나 해제하면, 그 구문에 걸리는 객체를 비활성화하거나 숨겨 줍니다.
필터 창의 체크박스는 표시, 숨김, 반전이 있습니다.
- 표시는 그 필터 구문에 걸린 객체를 비활성화, 즉 회색으로 표시됩니다.
- 숨김은 걸린 객체를 숨깁니다.
- 반전은 현재 표시 결과를 역전하여 보여줍니다. 필터 구문에 걸리는 것들을 제외한 나머지 모든 것을 비활성화하거나 숨겨주게 됩니다.
세가지 체크박스는 쓰임새에 따라 조합해서 쓰는데, 표시+숨김+반전을 전부 체크하면 구문에 해당되는 객체만 표시할 수 있습니다. 또 여러 가지 필터를 생성하여 체크해 쓸 수도 있습니다.
필터 구문은 표 아래쪽 플러스 버튼으로 추가할 수 있습니다. 이 구문은 필터링을 거는 기준이 무엇인지를 정하는 조건문이라 보시면 됩니다. 특정 태그가 있는지 없는지, 태그의 값이 어떤 값과 동일한지 아니면 아예 없는지 등등을 구문으로 나타내는 것입니다.
가장 많이 쓰이는 구문은 등호를 쓴 (키)=(값)으로, 해당 태그가 적용되었는지를 보기 위해 활용하는 구문입니다.
위 사진은 경복궁 일대에 natural="wood" 라는 필터 구문을 적용하고 표시+숨김+반전을 체크한 것으로, natural=wood (숲) 객체만 표시되고 나머지는 모두 숨겨진 것을 볼 수 있습니다.
구문에 쓰이는 문자열은 종류가 매우 다양하고, 그 조합도 굉장히 많다보니 전부 소개하기는 어렵습니다. 입력 창 아래 ‘힌트’ 칸에 각 문자열이 어떻게 작동하는지를 설명해 놓고 있기 때문에 직접 보면서 입력해 보시는 것을 추천드립니다.
날짜 필터링
필터 구문은 모든 태그를 대상으로 하기 때문에, 날짜 태그 (start_date / end_date)도 JOSM에서 필터로 적용할 수 있습니다. 여기서는 등호(=) 외에 부등호(>,<)도 쓰입니다. 시작날짜 (start_date)를 예로 들어보겠습니다.
start_date=(날짜): 시작날짜가 입력값에 정확히 일치하는 객체start_date<(날짜): 시작날짜를 입력값보다 과거에 두는 객체start_date>(날짜): 시작날짜를 입력값보다 미래에 두는 객체
그냥 태그와는 달리 start_date=(날짜)는 처음부터 그 객체의 정확한 시작날짜를 알아야 하기 때문에 사용하는 경우가 드물고, 나머지 두 개가 주로 쓰이는 편입니다.
왼쪽은 start_date<"1910-01-01"으로, 오른쪽은 start_date>"1910-01-01"으로 필터를 추가한 뒤, 표시+숨김+반전 체크로 본 광화문 일대의 모습입니다. 좌측은 시작날짜가 1910년 이전인 객체, 우측은 시작날짜가 1910년 이후인 객체들만 보여주고 있습니다.
반대로 end_date의 경우에도 해당 날짜를 기준으로 등호, 부등호를 사용하면, 그 날짜에 철거되었거나, 그 전후에 철거된 건물을 숨기고 보여줄 수가 있습니다.
이 둘을 합쳐 start_date>(날짜) OR end_date<(날짜) 로 구문을 설정한 다음, 표시+숨김 체크를 하면 그 날짜에 존재했던 객체들만 표시됩니다. 여기서 OR은 흔히 말하는 논리 연산자로, '연산자 양쪽 중 하나를 만족하는 것’을 뜻합니다.
예를 들어서 기준일자를 2026년 1월 1일로 삼아서 start_date>2026-01-01 OR end_date<2026-01-01로 입력하면, 2026년 1월 1일 이후에 건설되었거나, 그 이전에 철거된 모든 객체들이 필터에 걸려 비활성화 (회색 표시)된 것을 볼 수 있습니다.
그리고 그 필터를 숨김 체크하면, 건설일자가 2026년 1월 1일 이전이고 (=그 시점에 존재하고 있고) 철거일자는 그 이후인 (=그 시점에 아직 철거되지 않은) 객체들만 표시됩니다. 결과적으로 해당 날짜에 존재했던 객체들의 모습을 표시하게 되는 겁니다.
위의 원리가 복잡하실 분들을 위한 간편 플러그인도 존재합니다. 환경 설정-플러그인 (단축키 F12)에서 ohm-date-filter를 검색한 뒤, 체크 표시를 하고 '목록 다운로드’를 누르면 우측에 OpenHistoricalMap Date Filter 창이 뜹니다. 이 창은 iD 편집기의 Date Range 처럼 편리하게 날짜 필터를 걸 수 있게 만들어 줍니다.
Range value에 원하는 날짜 범위를 입력한 뒤 Set을 클릭하고, 그 위의 시점 바를 움직여 날짜를 설정하면 그 시점에 존재했던 것을 제외한 모든 객체가 비활성화 처리됩니다. 그 상태에서 Save Filter 버튼을 누르면 해당 날짜로 설정된 구문이 필터 창에 추가되어 활용할 수 있습니다.
Overpass API
JOSM에서 지도를 편집할 때에는 모든 데이터를 전부 내려받게 됩니다. 필요없는 부분까지 샅샅이 불러오기 때문에 데이터가 무거워질 수도 있고, 업로드할 때 오류가 생길 수도 있습니다. 이 때 내가 원하는 태그가 달린 객체만 추려서 불러오는 기능이 바로 Overpass API입니다.
Overpass API의 서버도 OSM과 OHM이 별개로 운영됩니다. 여기서 또 JOSM에서는 서버 설정이 OSM으로 되어 있다는 사실을 기억해주셔야 합니다. 환경 설정-OSM 서버 에서 https://overpass-api.openhistoricalmap.org/api 를 입력하여 서버를 바꿔줍니다.
그런 다음 다운로드 창에서 상단 탭 가운데 'Overpass API에서 다운로드’를 클릭하면, 그냥 다운로드창에서 볼 수 있는 지도 영역 선택란과 함께 'Overpass 질의문’이 나타납니다.
Overpass 질의문은 불러올 데이터를 어떤 기준으로 할지 정하는 겁니다. 앞에서 이야기한 필터 구문과 원리가 완전히 똑같습니다. 심지어 구문도 똑같은 것으로 쓸 수 있습니다.
좌측의 ‘질의 마법사’ 버튼을 클릭하면 필터 구문 입력 창과 거의 똑같이 생긴 마법사 창이 뜹니다. 이것의 입력란에 기준이 되는 구문을 입력한 뒤, ‘쿼리를 구축하고 실행’ 버튼을 누르면 설정된 영역 내에 해당 조건문에 맞는 객체들만 다운로드하게 됩니다.
natural=wood로 구문을 설정하고 다운로드를 실행한 결과입니다. 다른 것 하나 없이 natural=wood 태그가 달린 객체들만 불러와진 것을 볼 수 있습니다. 그리고 애초에 내가 원하는 데이터만 불러왔으므로 필터를 따로 만들어 거를 필요도 없게 되었습니다.
OHM에서는 지난 글에서 소개해드렸다시피 수많은 데이터가 겹겹이 쌓여 있는 것이 기본적인 상태이기 때문에, JOSM에서도 날짜 필터링과 Overpass API를 적극 활용할 필요가 있습니다.
다음 시간에는 옛 지도를 배경으로 깔고 편집하는 방법을 소개해보도록 하겠습니다.





















