ConvertKML2GPX.zip

Google Map 혹은 Google Earth를 사용하면, 현재 찾은 위치값을 별도로 저장하는 방법을 제공합니다. 이 때 사용하는게 KMZ 혹은 KML 입니다. 위치 정보를 XML 형식으로 저장만 한 것이 KML 이고, 이를 압축한 것이 KMZ이더군요. 여기서는 압축해제 기능은 없으므로, KML을 중심으로 바라보도록 하겠습니다.

Google Earth를 통해 특정 위치를 저장하게 다음 대략 다음과 같은 Format의 데이터를 볼 수 있습니다.

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:kml="http://www.opengis.net/kml/2.2" xmlns:atom="http://www.w3.org/2005/Atom">
<Document>
    <name>기온 거리 입구.kml</name>
    <Style id="sn_ylw-pushpin12">
        <IconStyle>
            <scale>1.1</scale>
            <Icon>
                <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
            </Icon>
            <hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
        </IconStyle>
    </Style>
    <StyleMap id="msn_ylw-pushpin0">
        <Pair>
            <key>normal</key>
            <styleUrl>#sn_ylw-pushpin12</styleUrl>
        </Pair>
        <Pair>
            <key>highlight</key>
            <styleUrl>#sh_ylw-pushpin6</styleUrl>
        </Pair>
    </StyleMap>
    <Style id="sh_ylw-pushpin6">
        <IconStyle>
            <scale>1.3</scale>
            <Icon>
                <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href>
            </Icon>
            <hotSpot x="20" y="2" xunits="pixels" yunits="pixels"/>
        </IconStyle>
    </Style>
    <Placemark>
        <name>기온 거리 입구</name>
        <LookAt>
            <longitude>135.7768254558997</longitude>
            <latitude>35.00373926533617</latitude>
            <altitude>0</altitude>
            <heading>-0.0001637968873225001</heading>
            <tilt>0</tilt>
            <range>639.2308830322888</range>
            <altitudeMode>relativeToGround</altitudeMode>
            <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode>
        </LookAt>
        <styleUrl>#msn_ylw-pushpin0</styleUrl>
        <Point>
            <altitudeMode>absolute</altitudeMode>
            <coordinates>135.7771083872684,35.00372287912489,46.1143527964634</coordinates>
        </Point>
    </Placemark>
</Document>
</kml>

이 값을 GPX로 변경해주는 사이트가 있는데, 그 사이트를 통해 변환해 보면, 대략 다음과 같이 표시됩니다.
http://www.gpsvisualizer.com/convert?output

<?xml version="1.0" ?>
- <gpx creator="GPS Visualizer http://www.gpsvisualizer.com/" version="1.0" xmlns="http://www.topografix.com/GPX/1/0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.topografix.com/GPX/1/0 http://www.topografix.com/GPX/1/0/gpx.xsd">
- <wpt lat="35.003722879" lon="135.777108387">
  <ele>46.1143527964634</ele>
  <name>기온 거리 입구</name>
  <sym>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</sym>
  </wpt>
  </gpx>

상당히 단순해진 모양을 볼 수 있는데, 대략 사용되는 값은 lat, lon, ele 그리고 name과 sym입니다. 굳이 내용을 살펴보면

latitude 라는 값, longitude 라는 값과 함께, element 값으로 구성된 좌표 정보와, 이 좌표에 대한 이름, 그리고 이 위치 값을 표시하기 위한 아이콘 이미지 위치(보통 URL)값으로 변한 것을 볼 수 있습니다.
이 중 latitude, longitude, element 값을 가져 올 때, /Document/Placemark/Point/coordinates 에 담긴
값을 사용하면 됩니다. 그 외에 /Document/Placemark/Point/name 에 있는 값을 name 으로 사용하면 됩니다.
마지막으로 아이콘은 /Document/Style/IconStyle/Icon/href 안의 값을 사용하면 됩니다.

이 작업은 Xml의 XPath를 통해 필요한 데이터를 조회하면 됩니다.
단지 문제는 namespace 부분만 고려해서 구성하면 됩니다.

이 자료의 소스는 여기의 첨부파일로 등록하였습니다. 이 자료는 Visual Studio 2010 으로 되어 있읍니다.
실행하면, 특정 폴더를 선택하면, 그 폴더에 있는 모든 KML 파일들을 읽고 그 안의 이름대로 GPX 파일을 생성하는 것입니다. 자세한 내용은 안의 소스를 참고하시면 됩니다. 또한 이 모든 것은 .NET Framework 2.0 기반으로 구성되어 있어, 큰 문제 없이 실행하실 수 있을 겁니다.

728x90

+ Recent posts