|
목 차 |
1. 컴퓨터의 수 (Computer Number) 2. 파일의 구조 3. 벡터와 벡터지도 4. 작업 및 도구 5. 벡터지도 구조와 표현 6. 렌더 테마(Render Theme) (1) 규칙과 구조 (2) 문자 표현 (3) 행정구역 문자 화면제어 |
OSM의 정의된 키 place의 행정구역은 용어의 사전적 의미와 실제 사용에 있어서 부적합한 부분이 있으며, 줌 레벨에 따라 다른 지형지물이나 문자와의 간섭을 피해서 화면에 표시하는데도 한계가 있다.
카페에서 제작하는 GPSnMAP 지도는 이러한 문제점에 대한 개선 안으로 key: admin_level을 node로 새로 지정하여 행정구역 명의 문자를 줌 레벨에 따라서 화면에 나타나게 제어한다.
이는, 기존 OSM 지도의 key: place와 상호 호환성을 유지하고, 보다 세분화된 문자의 화면 렌더링 제어가 가능하다.
따라서, 기존 맵 뷰어의 테마에서 행정구역의 키값인 place와 node인 admin_level 모두 화면 제어가 가능하다.
아래의 도표는 행정구역의 구분에 따라서 적용된 admin_level과 줌 레벨을 보여준다.
분류 | place | admin_level | zoom level | 비 고 |
국가 | country | 2 | 4~6 | 대한민국 |
도, 자치도 | province | 3 | 7~8 | 경기도, 제주도 |
광역 시 | city | 4 | 7~12 | "시" 명칭을 생략한 이름만 사용 |
일반 시 | city | 5 | 9~12 | "시" 명칭을 생략한 이름만 사용 |
군 | county | 6 | 10~16 | |
구 | district | 7 | 12~16 | |
읍 | borough | 8 | 12~18 | |
면 | suburb | 9 | 12~18 | |
동 | town | 10 | 14~18 | |
리 | village | 11 | 16~20 | |
1동, 2동... | - | 12 | 18~20 | |
가, 로 | - | 13 | 18~19 | 명륜1가, 세종로 |
- | ||||
섬, 도 | island | 14 | 11 | 면적 30㎢ 이상 |
섬 | island | 15 | 12 | 면적 10~30㎢ |
섬 | island | 16 | 13 | 면적 1~10㎢ |
여 | islet | 17 | 14 | 면적 1㎢ 이하 |
- | ||||
부지 | plot | - | ||
장소 | locality | - | ||
대양 | ocean | - | ||
바다 | sea | - |
※주)
1. 상기의 admin_level 값은 2021년부터 제작된 GPSnMAP 지도에 적용된다.
이전 버전은 일부 값이 다르기 때문에 렌더링의 결과가 화면에 다르게 나타난다.
2. place 값에 적용하는 영문표기는 일반적인 예로 한국의 행정구역은 OSM에 공식적으로 지정된 값은 없다.
따라서, 시기나 매핑하는 사람에 따라서 다르게 적용되어 있는 경우가 있다.
아래의 테마는 node로 정의된 admin_level을 적용하여 작성이 되었다.
테마 코드는 로커스 전용으로 태그 place의 행정구역 및 locality와 island, islet이 포함이 되었다.
따라서, GPSnMAP 지도에서 기존의 다른 외부 테마를 사용하고자 한다면, place의 부분은 아래의 소스로 바꾸면 된다.
<?xml version="1.0" encoding="UTF-8"?>
<rendertheme version="1" locus-extended="1" fill-sea-areas="0" map-background="#ebeade" >
<!-- =====================================================
WAYS (면 & 선)
====================================================== -->
<rule e="way" k="*" v="*">
<!-- natural -->
<rule e="way" k="natural" v="*">
<!-- 바다를 표현 -->
<rule e="way" k="natural" v="sea">
<area fill="#9cc9e8" />
</rule>
<rule e="way" k="natural" v="nosea">
<area fill="#ebeade" />
</rule>
<!-- 육지 표현 -->
<rule e="way" k="natural" v="land" closed="yes">
<area fill="#f4f3e9" />
</rule>
</rule> <!-- natural 마침 -->
</rule> <!-- WAYS 마침 -->
<!-- =====================================================
NODES (점)
====================================================== -->
<rule e="node" k="*" v="*">
<!-- place -->
<rule e="node" k="place" v="*">
<!-- locality -->
<rule e="node" k="place" v="locality" zoom-min="15" zoom-max="22">
<rule e="node" k="*" v="*" zoom-min="15" zoom-max="22">
<caption k="name" font-family="default" font-style="bold" font-size="8dp" scale-font-size="15,1.1" fill="#000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
</rule>
<!-- admin_level -->
<rule e="node" k="admin_level" v="*">
<!-- 도, 여 (섬) -->
<rule e="node" k="admin_level" v="14|15|16|17" zoom-min="11" zoom-max="18">
<rule e="node" k="admin_level" v="14" zoom-min="11" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="10dp" scale-font-size="11,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="15" zoom-min="12" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="10dp" scale-font-size="11,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="16" zoom-min="13" zoom-max="18">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="11,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="17" zoom-min="15" zoom-max="18">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="11,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
</rule>
<!-- 가 -->
<rule e="node" k="admin_level" v="12" zoom-min="18" zoom-max="22">
<rule e="node" k="*" v="*" zoom-min="18" zoom-max="20">
<caption k="name" font-family="default" font-style="bold" font-size="8dp" scale-font-size="18,1.15" fill="#000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="*" v="*" zoom-min="21" zoom-max="22">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="10dp" scale-font-size="21,1.15" fill="#80000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 동 -->
<rule e="node" k="admin_level" v="10" zoom-min="15" zoom-max="20">
<rule e="node" k="*" v="*" zoom-min="15" zoom-max="17">
<caption k="name" font-family="default" font-style="bold" font-size="10dp" scale-font-size="15,1.15" fill="#000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="*" v="*" zoom-min="18" zoom-max="20">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="12dp" scale-font-size="18,1.15" fill="#777777" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 리 -->
<rule e="node" k="admin_level" v="11" zoom-min="15" zoom-max="18">
<rule e="node" k="admin_level" v="*" zoom-min="15" zoom-max="15">
<caption k="name" font-family="default" font-style="bold" font-size="12dp" fill="#336600" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="admin_level" v="*" zoom-min="16" zoom-max="18">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="12dp" scale-font-size="16,1.15" fill="#80336600" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 면 -->
<rule e="node" k="admin_level" v="9" zoom-min="13" zoom-max="16">
<rule e="node" k="admin_level" v="9" zoom-min="13" zoom-max="13">
<caption k="name" font-family="default" font-style="bold" font-size="10dp" fill="#663300" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="admin_level" v="9" zoom-min="14" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="12dp" scale-font-size="14,1.15" fill="#80663300" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 읍 -->
<rule e="node" k="admin_level" v="8" zoom-min="12" zoom-max="16">
<rule e="node" k="admin_level" v="*" zoom-min="12" zoom-max="12">
<caption k="name" font-family="default" font-style="bold_italic" font-size="10dp" fill="#636336" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="admin_level" v="*" zoom-min="13" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold_italic" font-size="12dp" scale-font-size="13,1.15" fill="#80636336" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 구 -->
<rule e="node" k="admin_level" v="7" zoom-min="13" zoom-max="16">
<rule e="node" k="admin_level" v="*" zoom-min="13" zoom-max="14">
<caption k="name" font-family="default" font-style="bold" font-size="11dp" scale-font-size="13,1.15" fill="#000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="admin_level" v="*" zoom-min="15" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="13dp" scale-font-size="15,1.15" fill="#80000000" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 군 -->
<rule e="node" k="admin_level" v="6" zoom-min="10" zoom-max="16">
<rule e="node" k="admin_level" v="6" zoom-min="10" zoom-max="10">
<caption k="name" font-family="default" font-style="bold" font-size="10dp" fill="#4f174f" stroke="#ffffff" stroke-width="2dp" />
</rule>
<rule e="node" k="admin_level" v="6" zoom-min="11" zoom-max="16">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="12dp" scale-font-size="11,1.15" fill="#804f174f" stroke="#ffffff" stroke-width="2dp" />
</rule>
</rule>
<!-- 특별시, 광역시, 자치시, 일반시 -->
<rule e="node" k="admin_level" v="4|5" zoom-min="7" zoom-max="14">
<rule e="node" k="admin_level" v="4|5" zoom-min="13" zoom-max="14">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="7,1.1" fill="#80223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="4|5" zoom-min="10" zoom-max="12">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="7,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="5" zoom-min="8" zoom-max="9">
<caption k="name" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="7,1.1" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
<rule e="node" k="admin_level" v="4" zoom-min="7" zoom-max="9">
<rule e="node" k="admin_level" v="4" zoom-min="7" zoom-max="8">
<circle r="2dp" fill="#ff9966" stroke="#999999" stroke-width="1dp" />
</rule>
<caption k="name" dy="12dp" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="7,1.2" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" />
</rule>
</rule>
<!-- 도-->
<rule e="node" k="admin_level" v="3" zoom-min="7" zoom-max="9">
<rule e="node" k="*" v="*" zoom-min="7" zoom-max="7">
<caption k="name" font-style="bold_italic" font-size="12dp" fill="#003300" stroke="#ffffff" stroke-width="1" />
</rule>
<rule e="node" k="*" v="*" zoom-min="8" zoom-max="8">
<caption k="name" font-style="bold_italic" font-size="13dp" fill="#80003300" stroke="#ffffff" stroke-width="1" />
</rule>
<rule e="node" k="*" v="*" zoom-min="9" zoom-max="9">
<caption k="name" font-style="bold_italic" font-size="14dp" fill="#50003300" stroke="#ffffff" stroke-width="1" />
</rule>
</rule>
<!-- 국가 -->
<rule e="node" k="admin_level" v="2" zoom-min="4" zoom-max="6">
<caption k="name" font-style="bold" font-size="16dp" scale-font-size="4,1.2" upper-case="true" fill="#000000" stroke="#ffffff" stroke-width="1" />
</rule>
</rule> <!-- place 마침 -->
</rule> <!-- NODES 마침 -->
</rendertheme>
Theme_Place_admin.xml
첨부된 place-admin_level.map의 country (admin_level=2)값은 영문 소문자 "korea"로 입력되어 있다.
따라서, caption 명령으로 이름을 나타내면, 위의 좌측 그림과 같이 화면에 영문 소문자로 표시된다.
옵션 upper-case="true"는 지도를 제작할 때, 해당 키 값이 영문 소문자로 만들었어도 우측 그림과 같이 이를 대문자로 화면에 표시한다.
province (admin_level=3)의 문자 옵션 font-family="serif"는 기기에 명조체 폰트가 설치되어 있으면 위와 같이 지정된 문자가 명조체로 표시된다.
만약에 기기에 명조체가 설치되지 않았다면 "default"와 같다.
옵션 font-family="default"는 기기에 현재 설정된 폰트로 문자를 나타낸다.
폰트 Serif와 Snas Serif와 차이점은 위의 그림과 같이 머리와 꼬리 부분의 유무로 알 수 있다.
꼬리가 없는 Snas Serif는 전체적으로 동일한 너비와 단순하고 깔끔한 선으로 이루어져 있다.
가장 일반적으로 사용되는 Serif 글꼴에는 Times New Roman, Garamond, Baskerville, Georgia 및 Courier New가 있다.
검은색에서 가장 인기 있는 Snas Serif 글꼴에는 Arial, Helvetica, Proxima Nova, Futura 및 Calibri가 있다.
city (admin_level=4, 5)는 일반적으로 이름이 명사화되어서 일상에서 이름 뒤에 "시"를 붙여서 사용하는 경우가 드물다.
따라서, 키값에 "시" 명칭을 제외한 이름만 사용한다.
줌 레벨 7~9 까지는 광역 시와 일반 시를 구분하여 렌더링 한다.
줌 레벨 7~8에서 광역 시는 행정구역 이름과 함께 행정구역 중심 부위에 원을 표시하여 위치를 나타낸다.
다음 명령문의 줌 레벨 7에서 렌더링 결과는 아래의 그림과 같다.
<rule e="node" k="admin_level" v="4" zoom-min="7" zoom-max="9"> <rule e="node" k="admin_level" v="4" zoom-min="7" zoom-max="8"> <circle r="2dp" fill="#ff9966" stroke="#999999" stroke-width="1dp" /> </rule> <caption k="name" dy="12dp" font-family="sans_serif" font-style="bold" font-size="8dp" scale-font-size="7,1.2" fill="#223e77" stroke="#ffffff" stroke-width="2.5dp" /> </rule> |
name 속성 값을 표시하는 caption 명령어의 옵션 dy="12dp"는 circle 명령어로 문자가 나타나는 위치에 원이 표시되기 때문에 문자의 원래 위치에서 12dp 아래 방향으로 떨어져서 표시된다.
명령어 circle은 지정된 피처의 중심 위치에 원을 그린다.
섬 (admin_level=14~17)은 줌 레벨에 따라서 면적의 크기로 구분되어 화면에 이름을 나타낸다.
면적 30㎢ 이상, 10~30㎢, 1~10㎢, 1㎢이하를 구분하여 각각 키 값을 설정하였는데, 이는 문자와 다도해 부분의 지형지물과 간섭을 최소화시키기 위해서다.
|
첫댓글 고맙습니다~~ㅎㅎ
아직은 아니지만 나중에 벡터맵과 테마파일 만들 때 도움이 많이 될거 같습니다~~ ^^
좋은 강의 감사합니다.
정보 감사합니다.
감사합니다.