|
목 차 |
Mapsforge 벡터지도 만들기 기초(1) : osmosis 파일읽기, 쓰기 |
Mapsforge 벡터지도 만들기 기초(2) : 육지, 바다 병합 |
Mapsforge 벡터지도 만들기 기초(3) : 국토지리정보원 수치지도 등고선 벡터지도 만들기 |
OSM 지도 서버나 로커스스토어 등에서 구할 수 있는 Mapsforge 벡터지도는 등고선이 포함되어 있다.
이 등고선은 공개 DEM 데이터인 STRM3를 변환시켜서 만든것으로 등고선은 20m급 이다.
STRM3 보다 해상도가 높은 STRM1이나 다른 DEM을 사용하여 등고선으로 변환하여도 데이터 손실에 따른 등고선의 왜곡이 생긴다.
따라서, 샘플링 그리드가 90m인 STRM3을 사용하여 만들어진 20m급 등고선은 실제 지형과 더 많은 차이를 보인다.
공개된 국토지리정보원(지리원)의 수치지도에서 전국의 등고선은 5m급 이다.
여기서는 지도의 효율성을 위하여 등고선 간격을 10m로 하였다.
이는 벡터지도의 용량을 작게하고, 등고선과 지형지물, 문자 등과의 간섭을 고려하여 지도의 시인성을 좋게 하기 위함이다.
그리고, 최근의 Mapsforge 벡터지도 맵뷰어 앱들은 Hillshading (음영기복) 효과를 지원하기 때문에, 10m급 등고선으로도 사용하는데 불편함이 없다.
아래의 작업은 JOSM, 그로벌매퍼, Arcmap, QGIS 등의 툴을 사용하여, 수작업이나 스크립트, 또는 파이선 프로그램을 통하여 할 수 있다.
이 작업은 등고선 뿐만 아니라 수치지도나 다른 벡터 데이터를 이용하여 도로나 건물 등을 만들때도 똑같이 적용된다.
1. 데이터 최적화
수치지도 등고선을 형성하는 노드를 단순화 작업을 하여 등고선을 최적화시킨다.
지도 줌레벨 17~18에서 원본 데이터와 비교했을 때, 왜곡을 무시할 수 있는 정도로 데이터의 크기 약 1/3 정도가 작아진다.
참고로 지리원의 수치지도는 오류를 많이 포함하고 있어 수정작업을 필요로 한다.
등고선의 경우, 면으로된 것이 있어서 선으로 수정작업을 하여야 한다.
OSM 데이터는 면이 선보다 데이터 크기가 크다.
(등고선 자료 첨부)
2. 데이터 태그맵핑
등고선 데이터의 key/value를 설정한다.
등고선 | key | value |
주곡선 (10m) | contour_ext | elevation_minor |
계곡선 (50m) | contour_ext | elevation_major |
3. mapfile-writer 태그맵핑 정의
tag-mapping.xml 파일을 편집하여 아래의 내용을 포함시킨다.
등고선의 key/value와 줌레벨이 정의되어 있다.
<!-- Elevation TAGS -->
<ways>
<osm-tag key="contour_ext" value="elevation_minor" zoom-appear="16" force-polygon-line="true" />
<osm-tag key="contour_ext" value="elevation_medium" zoom-appear="15" force-polygon-line="true" />
<osm-tag key="contour_ext" value="elevation_major" zoom-appear="13" force-polygon-line="true" />
<osm-tag key="ele" value="150" zoom-appear="18" />
<osm-tag key="ele" value="250" zoom-appear="18" />
<osm-tag key="ele" value="350" zoom-appear="18" />
<osm-tag key="ele" value="450" zoom-appear="18" />
<osm-tag key="ele" value="550" zoom-appear="18" />
<osm-tag key="ele" value="650" zoom-appear="18" />
<osm-tag key="ele" value="750" zoom-appear="18" />
<osm-tag key="ele" value="850" zoom-appear="18" />
<osm-tag key="ele" value="950" zoom-appear="18" />
<osm-tag key="ele" value="1050" zoom-appear="18" />
<osm-tag key="ele" value="1150" zoom-appear="18" />
<osm-tag key="ele" value="1250" zoom-appear="18" />
<osm-tag key="ele" value="1350" zoom-appear="18" />
<osm-tag key="ele" value="1450" zoom-appear="18" />
<osm-tag key="ele" value="1550" zoom-appear="18" />
<osm-tag key="ele" value="1650" zoom-appear="18" />
<osm-tag key="ele" value="1750" zoom-appear="18" />
<osm-tag key="ele" value="1850" zoom-appear="18" />
<osm-tag key="ele" value="1950" zoom-appear="18" />
<osm-tag key="ele" value="2050" zoom-appear="18" />
<osm-tag key="ele" value="100" zoom-appear="14" />
<osm-tag key="ele" value="200" zoom-appear="14" />
<osm-tag key="ele" value="300" zoom-appear="14" />
<osm-tag key="ele" value="400" zoom-appear="14" />
<osm-tag key="ele" value="500" zoom-appear="14" />
<osm-tag key="ele" value="600" zoom-appear="14" />
<osm-tag key="ele" value="700" zoom-appear="14" />
<osm-tag key="ele" value="800" zoom-appear="14" />
<osm-tag key="ele" value="900" zoom-appear="14" />
<osm-tag key="ele" value="1000" zoom-appear="14" />
<osm-tag key="ele" value="1100" zoom-appear="14" />
<osm-tag key="ele" value="1200" zoom-appear="14" />
<osm-tag key="ele" value="1300" zoom-appear="14" />
<osm-tag key="ele" value="1400" zoom-appear="14" />
<osm-tag key="ele" value="1500" zoom-appear="14" />
<osm-tag key="ele" value="1600" zoom-appear="14" />
<osm-tag key="ele" value="1700" zoom-appear="14" />
<osm-tag key="ele" value="1800" zoom-appear="14" />
<osm-tag key="ele" value="1900" zoom-appear="14" />
<osm-tag key="ele" value="2000" zoom-appear="14" />
<osm-tag key="ele" value="2100" zoom-appear="14" />
<osm-tag key="ele" value="2200" zoom-appear="14" />
<osm-tag key="ele" value="2300" zoom-appear="14" />
<osm-tag key="ele" value="2400" zoom-appear="14" />
<osm-tag key="ele" value="2500" zoom-appear="14" />
<osm-tag key="ele" value="2600" zoom-appear="14" />
<osm-tag key="ele" value="2700" zoom-appear="14" />
<osm-tag key="ele" value="2800" zoom-appear="14" />
<osm-tag key="ele" value="2900" zoom-appear="14" />
<osm-tag key="ele" value="3000" zoom-appear="14" />
<osm-tag key="ele" value="3100" zoom-appear="14" />
<osm-tag key="ele" value="3200" zoom-appear="14" />
<osm-tag key="ele" value="3300" zoom-appear="14" />
<osm-tag key="ele" value="3400" zoom-appear="14" />
<osm-tag key="ele" value="3500" zoom-appear="14" />
<osm-tag key="ele" value="3600" zoom-appear="14" />
<osm-tag key="ele" value="3700" zoom-appear="14" />
<osm-tag key="ele" value="3800" zoom-appear="14" />
<osm-tag key="ele" value="3900" zoom-appear="14" />
<osm-tag key="ele" value="4000" zoom-appear="14" />
<osm-tag key="ele" value="4100" zoom-appear="14" />
<osm-tag key="ele" value="4200" zoom-appear="14" />
<osm-tag key="ele" value="4300" zoom-appear="14" />
<osm-tag key="ele" value="4400" zoom-appear="14" />
<osm-tag key="ele" value="4500" zoom-appear="14" />
<osm-tag key="ele" value="4600" zoom-appear="14" />
<osm-tag key="ele" value="4700" zoom-appear="14" />
<osm-tag key="ele" value="4800" zoom-appear="14" />
<osm-tag key="ele" value="4900" zoom-appear="14" />
<osm-tag key="ele" value="5000" zoom-appear="14" />
<osm-tag key="ele" value="5100" zoom-appear="14" />
<osm-tag key="ele" value="5200" zoom-appear="14" />
<osm-tag key="ele" value="5300" zoom-appear="14" />
<osm-tag key="ele" value="5400" zoom-appear="14" />
<osm-tag key="ele" value="5500" zoom-appear="14" />
<osm-tag key="ele" value="5600" zoom-appear="14" />
<osm-tag key="ele" value="5700" zoom-appear="14" />
<osm-tag key="ele" value="5800" zoom-appear="14" />
<osm-tag key="ele" value="5900" zoom-appear="14" />
<osm-tag key="ele" value="6000" zoom-appear="14" />
<osm-tag key="ele" value="6100" zoom-appear="14" />
<osm-tag key="ele" value="6200" zoom-appear="14" />
<osm-tag key="ele" value="6300" zoom-appear="14" />
<osm-tag key="ele" value="6400" zoom-appear="14" />
<osm-tag key="ele" value="6500" zoom-appear="14" />
<osm-tag key="ele" value="6600" zoom-appear="14" />
<osm-tag key="ele" value="6700" zoom-appear="14" />
<osm-tag key="ele" value="6800" zoom-appear="14" />
<osm-tag key="ele" value="6900" zoom-appear="14" />
<osm-tag key="ele" value="7000" zoom-appear="14" />
<osm-tag key="ele" value="7100" zoom-appear="14" />
<osm-tag key="ele" value="7200" zoom-appear="14" />
<osm-tag key="ele" value="7300" zoom-appear="14" />
<osm-tag key="ele" value="7400" zoom-appear="14" />
<osm-tag key="ele" value="7500" zoom-appear="14" />
<osm-tag key="ele" value="7600" zoom-appear="14" />
<osm-tag key="ele" value="7700" zoom-appear="14" />
<osm-tag key="ele" value="7800" zoom-appear="14" />
<osm-tag key="ele" value="7900" zoom-appear="14" />
<osm-tag key="ele" value="8000" zoom-appear="14" />
<osm-tag key="ele" value="8100" zoom-appear="14" />
<osm-tag key="ele" value="8200" zoom-appear="14" />
<osm-tag key="ele" value="8300" zoom-appear="14" />
<osm-tag key="ele" value="8400" zoom-appear="14" />
<osm-tag key="ele" value="8500" zoom-appear="14" />
<osm-tag key="ele" value="8600" zoom-appear="14" />
<osm-tag key="ele" value="8700" zoom-appear="14" />
<osm-tag key="ele" value="8800" zoom-appear="14" />
<osm-tag key="ele" value="8900" zoom-appear="14" />
</ways>
첨부 :
울릉도 등고선 (지리원)
울릉도 OSM 지도데이터와 육지, 바다, 등고선을 병합하여 컴파일한다.
c:\osmosis\bin\osmosis --rx file=ullung_osm.osm --s --rx file=ullung_land.osm --s --m --rx file=ullung_cont.osm --s --m --rx file=ullung_sea.osm --s --m --mw file=ullung.map tag-conf-file=tag-mapping.xml
tag-mapping.xml 파일에 정의된 줌레벨에 따라서 주곡선은 줌레벨 13에서, 계곡선은 줌레벨 16에서 지도에 나타난다.
지도를 만들때(컴파일) 등고선 데이터가 이 줌레벨부터 생성된다.
따라서, 설정된 줌레벨 이상에서는 테마 렌더에 의한 조작이 가능하지만, 이하 레벨에서는 렌더링을 하여도 표시가 되지 않는다.
최적화된 벡터지도를 만들기 위해서는 mapfile-writer 태그 맵핑 정의가 중요하다.
첫댓글 울릉도를 기반으로 지도를 만드는 모든것을 배울수 있는 기회가 되어 너무 감사합니다
기초자료를 얻어내고 만들어내는것은 불가능하지만 제공해주시는 중간자료를 가지고 합치고 조절하고 표현하는
방법을 알아갈수 있어 너무 좋읍니다.
고맙습니다.^^