목차
- 소개
- 둘러보기 구조
- 둘러보기 타임라인
- 비행 이동(FlyTo) 및 비행 이동 모드(flyToMode)
- 일시중지 및 대기
- 업데이트
- 사운드 추가
- 설명 풍선 전환
- 과거 이미지 통합
- 알려진 문제
소개
Google 어스 5.0의 새로운 기능인 둘러보기를 사용하면 지리공간 데이터 사이로 비행을 할 수 있으며 다음도 가능합니다.
- 위치 사이의 구체적인 비행 시간
- 위치 사이에서 중단 없는 매끄러운 비행
- 둘러보기 도중 사전 정의된 시간에 사운드 파일 재생
- 둘러보기 경계 내의 KML 지점을 임시로 업데이트
Google 어스 클라이언트 시점으로 둘러보기에 대한 자세한 내용은 Google 어스 사용자 가이드를 참조해 주세요.
Google 확장 네임스페이스
둘러보기를 정의하는 KML 요소는 gx 프리픽스를 사용하는 OGC KML 표준의 확장 집합에 포함되어 있습니다. 이 요소를 사용하려면 다음과 같이 KML 파일의 시작 <kml>
요소에 올바른 네임스페이스 URI를 추가해야 합니다.
<kml xmlns="http://www.opengis.net/kml/2.2" xmlns:gx="http://www.google.com/kml/ext/2.2">
gx 확장 집합에 있는 둘러보기 관련 요소는 다음과 같습니다.
<gx:Tour> | <gx:playMode> |
<gx:Playlist> | <gx:Wait> |
<gx:Flyto> | <gx:AnimatedUpdate> |
<gx:flyToMode> | <gx:SoundCue> |
<gx:TourControl> | <gx:duration> |
Google 어스 5.0에서는 둘러보기가 지원되지만 다른 일부 지오 브라우저에서는 지원되지 않을 수도 있습니다. 브라우저에서 특정 확장 프로그램을 지원하지 않는 경우, 이러한 확장 프로그램을 사용한 데이터는 무시되고 KML 파일의 나머지 데이터만 오류 없이 로드됩니다.
용어
둘러보기 프리미티브(Tour Primitive): 둘러보기의 작업을 정의하는 요소 집합 중 하나입니다. 둘러보기 프리미티브의 한 예로는 <gx:FlyTo>
요소 및 관련 하위 요소에 의해 정의되는 비행 이동이 있습니다.
재생목록(Playlist): 둘러보기를 정의하는 둘러보기 프리미티브의 목록을 위한 컨테이너입니다. 재생목록은 타임라인에 따라 시각화할 수 있습니다(자세한 내용은 둘러보기 타임라인 참조).
둘러보기 구조
둘러보기는 특정 요소를 순서대로 KML 파일에 삽입하는 방식으로 구성됩니다. KML 파일에는 둘러보기와 함께 기타 합법적인 KML 요소가 포함될 수 있습니다.
아래 예제는 전체 둘러보기 및 여러 위치표시가 있는 폴더(Folder)를 보여줍니다. 둘러보기는 뉴질랜드의 남쪽 섬에서 시작하며 타라나키 산 위를 거쳐 북쪽으로 비행하며, 기본(smooth) 및 경유(bounce) 비행 이동 모드는 물론 설명 풍선을 여는 <gx:balloonVisibility>
메소드까지도 보여줍니다. 둘러보기 요소는 아래에 자세하게 설명되어 있습니다.
<?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"> <Document> <name>A tour and some features</name> <open>1</open> <gx:Tour> <name>Play me!</name> <gx:Playlist> <gx:FlyTo> <gx:duration>5.0</gx:duration> <!-- bounce is the default flyToMode --> <Camera> <longitude>170.157</longitude> <latitude>-43.671</latitude> <altitude>9700</altitude> <heading>-6.333</heading> <tilt>33.5</tilt> </Camera> </gx:FlyTo> <gx:Wait> <gx:duration>1.0</gx:duration> </gx:Wait> <gx:FlyTo> <gx:duration>6.0</gx:duration> <Camera> <longitude>174.063</longitude> <latitude>-39.663</latitude> <altitude>18275</altitude> <heading>-4.921</heading> <tilt>65</tilt> <altitudeMode>absolute</altitudeMode> </Camera> </gx:FlyTo> <gx:FlyTo> <gx:duration>3.0</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <LookAt> <longitude>174.007</longitude> <latitude>-39.279</latitude> <altitude>0</altitude> <heading>112.817</heading> <tilt>68.065</tilt> <range>6811.884</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <gx:FlyTo> <gx:duration>3.0</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <LookAt> <longitude>174.064</longitude> <latitude>-39.321</latitude> <altitude>0</altitude> <heading>-48.463</heading> <tilt>67.946</tilt> <range>4202.579</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <gx:FlyTo> <gx:duration>5.0</gx:duration> <LookAt> <longitude>175.365</longitude> <latitude>-36.523</latitude> <altitude>0</altitude> <heading>-95</heading> <tilt>65</tilt> <range>2500</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <gx:AnimatedUpdate> <gx:duration>0.0</gx:duration> <Update> <targetHref/> <Change> <Placemark targetId="pin2"> <gx:balloonVisibility>1</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:Wait> <gx:duration>6.0</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> <Folder> <name>Points and polygons</name> <Style id="pushpin"> <IconStyle> <Icon> <href>http://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png</href> </Icon> </IconStyle> </Style> <Placemark id="mountainpin1"> <name>New Zealand's Southern Alps</name> <styleUrl>#pushpin</styleUrl> <Point> <coordinates>170.144,-43.605,0</coordinates> </Point> </Placemark> <Placemark id="pin2"> <name>The End</name> <description> Learn more at http://developers.google.com/kml/documentation </description> <styleUrl>pushpin</styleUrl> <Point> <coordinates>175.370,-36.526,0</coordinates> </Point> </Placemark> <Placemark id="polygon1"> <name>Polygon</name> <Polygon> <tessellate>1</tessellate> <outerBoundaryIs> <LinearRing> <coordinates> 175.365,-36.522,0 175.366,-36.530,0 175.369,-36.529,0 175.366,-36.521,0 175.365,-36.522,0 </coordinates> </LinearRing> </outerBoundaryIs> </Polygon> </Placemark> </Folder> </Document> </kml>
둘러보기 타임라인
둘러보기는 일련의 둘러보기 프리미티브로 구성됩니다. 이러한 프리미티브에는 비행 이동, 대기(Wait), 둘러보기 컨트롤(TourControl), 애니메이션 업데이트(AnimatedUpdate) 및 사운드 큐(SoundCue)가 있습니다. 이 프리미티브 중 일부는 순서대로 재생되며, 한 프리미티브가 완료되어야 다음 프리미티브가 재생을 시작합니다. 다른 프리미티브는 일부 프리미티브와 동시에 실행되므로 여러 작업이 동시에 시작될 수 있습니다.
순서대로 시작되는 프리미티브
<gx:FlyTo>
<gx:Wait>
<gx:TourControl>
이러한 프리미티브는 순서대로 실행되며, 재생목록에서 다른 유형의 요소로 이동하기 전에 완료되어야 합니다. 이는 한 번에 하나의 연속 유형 프리미티브(비행 이동, 대기, 또는 둘러보기 컨트롤)만 실행할 수 있으며, 연속 유형 프리미티브가 재생되는 동안에는 추가적인 사운드 큐 또는 애니메이션 업데이트가 시작될 수 없음을 의미합니다.
동시에 시작되는 프리미티브
<gx:AnimatedUpdate>
<gx:SoundCue>
이러한 프리미티브는 재생목록에 표시될 때 대기열에 추가됩니다. 프리미티브가 시작되면 재생목록에서 다음 프리미티브로 즉시 이동하며, 사운드 큐 또는 애니메이션 업데이트가 완료되기를 기다리지 않습니다. 이는 다음을 의미합니다.
- 재생목록에 사운드 큐 또는 애니메이션 업데이트를 차례로 추가하여 원하는 횟수만큼 추가한 요소가 동시에 실행할 수 있습니다.
- 연속 유형 프리미티브가 재생되는 동안 사운드 큐 또는 애니메이션 업데이트를 실행할 수 있습니다(연속 유형 프리미티브가 재생되는 도중에 시작할 수는 없음).
아래 그림은 이러한 동작을 보여줍니다. 클릭하여 더 자세한 화면을 확인하세요. 재생목록의 각 프리미티브를 정의하는 KML 콘텐츠도 확인할 수 있습니다.
그림은 각 비행 이동이 완료되는 데 특정 시간(관련 <gx:duration>
요소에서 지정됨)이 소요되는 것을 보여줍니다. 이 시간이 경과해야만 다음 프리미티브가 시작됩니다.
반면 사운드 큐는 동시에 실행됩니다. 기본 타임라인의 다음 프리미티브가 즉시 시작되며, 이때 사운드 파일 또한 재생을 시작합니다. 사운드 파일은 파일 또는 둘러보기 중 하나가 먼저 완료될 때까지 계속 재생됩니다. 사운드 파일보다 둘러보기가 먼저 종료되면 사운드 파일의 재생이 중지됩니다. 사운드 파일은 원하는 만큼 동시에 재생할 수 있으며, 각 파일이 자체 타임라인에 로드됩니다.
애니메이션 업데이트도 동일한 방식으로 작동합니다. 위치표시 아이콘의 크기가 5초 동안 커지도록 설정되어 있는 경우 기본 타임라인의 다음 프리미티브가 재생되는 동안 이러한 동작이 수행됩니다.
비행 이동(FlyTo) 및 비행 이동 모드(flyToMode)
둘러보기는 위치 사이를 이동하며, 각 위치는 <gx:FlyTo>
요소를 사용하여 정의됩니다. 여기에는 Google 어스 내 시점의 위치, 각도 및 고도를 정의하는 추상 보기(<Camera>
또는 <LookAt>
)가 포함되어 있습니다.
또한 브라우저에 위치 지점 접근 방식을 지시해 주는 비행 이동 모드도 지정할 수 있습니다. <gx:Tour>
소개에 앞서, 위치표시에서 위치표시로 이동하는 방식으로 브라우저에서 '둘러보기'가 재생되었습니다. 여기서 브라우저가 위치표시에 접근하면서 비행 속도(브라우저에 의해 정의됨)가 줄어들고, 마지막에는 속도 0에서 멈췄다가 다시 다음 위치표시로 이동했을 것입니다. 이 동작 또한 <gx:flyToMode>bounce</gx:flyToMode>
요소 속성을 사용하여 둘러보기에서 지정할 수 있습니다.
기본 비행 이동 모드를 사용하면 공간에서 원활하고 제어가 가능한 비행을 할 수 있습니다. 위치 지점 간 속도는 <gx:duration>
요소를 추가하여 제어할 수 있습니다. 이 요소는 현재 위치 지점에서 다음으로 정의된 보기까지 브라우저가 이동하는 데 소요되는 시간을 정의합니다. 경유 없이 이어지는 비행은 기본 비행 이동 모드로 설정된 일련의 비행 이동으로 구성됩니다. 어스 브라우저는 속도와 곡선 경로를 위치 지점 간에 삽입함으로써 KML에서 지정한 정확한 시간에 각 위치표시에 도달할 수 있도록 합니다. 경유 비행 이동 모드와는 달리 다음과 같은 이벤트에 의해 비행이 멈출 때까지 속도가 0이 되는 경우는 없습니다.
- 둘러보기 종료
- 경유 비행 이동 모드의 한 위치 지점
- 대기
일시중지, 애니메이션 업데이트 및 사운드 큐는 비행을 중단하지 않습니다.
초기 비행 이동
재생목록에 포함되어 있는 첫 번째 <gx:FlyTo>
는 Google 어스의 뷰어 시점에서 비행을 시작합니다. 정해진 비행 시간을 따라야 하므로, 둘러보기 시작 시 어스에서의 뷰어 위치에 따라 첫 번째 위치 지점으로 이동하는 속도가 크게 달라집니다. 최적의 보기 환경을 제공하려면, 초기 비행 이동에 5초 이상의 시간을 할당하고 경유 모드를 사용하는 것이 좋습니다.
첫 번째 비행 이동으로 <gx:flyToMode>
가 기본으로 설정되어 있고 추가적인 기본 비행 이동이 이어지는 경우, 뷰어의 최초 위치가 기본 곡선의 한 위치 지점으로 간주되며 첫 번째 위치 지점과 후속 지점 간의 경로 곡선에 영향을 미치게 됩니다. 즉, 둘러보기가 시작되었을 때 사용자가 어스 클라이언트에서 무엇을 보고 있었는지에 따라 각 뷰어에서 재생되는 기본 비행 이동의 초기 경로가 달라지게 됩니다. 최초 위치 지점에 여전히 기본 비행 이동을 적용하고 싶은 경우에는 첫 번째 비행 이동 이후 둘러보기 코드에 <gx:Wait>
를 삽입할 수 있습니다. 그러면 둘러보기의 나머지 부분에서 최초 위치가 구분됩니다.
예제
다음 예제는 경유 및 기본 비행 이동 모드의 차이점을 보여줍니다. 각 둘러보기는 동일한 위치표시로 이동하지만 서로 다른 비행 이동 모드를 사용합니다. Google 어스에서 둘러보기를 재생하려면 각 코드 스니펫 상단의 링크를 클릭한 다음 Google 어스의 장소 패널에서 둘러보기 이름을 더블클릭합니다.
<gx:FlyTo> <gx:duration>4.0</gx:duration> <!-- bounce is the default flyToMode --> <LookAt> <longitude>-121.303179</longitude> <latitude>45.993041</latitude> <altitude>0</altitude> <heading>-27.923387</heading> <tilt>71.600075</tilt> <range>22570.546801</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <!-- ...snip... --><gx:FlyTo> <gx:duration>4.0</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <LookAt> <longitude>-121.303179</longitude> <latitude>45.993041</latitude> <altitude>0</altitude> <heading>-27.923387</heading> <tilt>71.600075</tilt> <range>22570.546801</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <!-- ...snip... -->
대기 및 일시중지
대기를 사용하면 둘러보기에서 공간 이동은 멈추지만 사운드 파일과 애니메이션 업데이트는 계속 진행됩니다. 대기 시간은 KML에서 지정할 수 있습니다.
일시중지를 사용하면 마치 사용자가 일시중지 버튼을 누른 것처럼 둘러보기가 현재 위치에서 중단됩니다. 이때 일시중지는 모든 프리미티브에 영향을 미칩니다. 사용자가 Google 어스의 둘러보기 컨트롤에서 재생 버튼을 선택하는 경우에만 둘러보기가 다시 재생됩니다.
대기
이 요소는 카메라에만 영향을 미치며, 카메라가 움직이지 않는 시간을 지정합니다. 현재 재생 중인 사운드 파일 또는 애니메이션 업데이트는 영향을 받지 않으며, 대기 중에도 계속해서 재생됩니다. 대기는 다음 비행 이동이 시작되거나 둘러보기가 종료되기 전에 사운드 파일이나 업데이트가 종료될 수 있도록 시간을 부여하는 데 사용할 수 있습니다.
<gx:Wait> <gx:duration>10.0</gx:duration> <!-- wait time in seconds --> </gx:Wait>
대기 시간은 <gx:duration>
요소를 사용하여 초 단위로 지정합니다. 지정한 시간이 경과되면 재생목록에 지정된 다음 작업으로 둘러보기가 이어집니다. 대기는 기본 비행 경로를 중단하므로 비행 이동 모드와 상관없이 대기 바로 이전의 위치 지점에서 카메라의 이동 속도는 0이 됩니다.
일시중지
사용자 제어 일시중지는 <gx:TourControl>
와 관련 하위 요소인 <gx:playMode>
를 사용하여 지정합니다. 하위 요소에서 사용할 수 있는 유일한 값은 일시중지입니다. 이 작업을 호출하는 것은 사용자가 Google 어스에서 일시중지 버튼을 클릭하는 것과 유사합니다. 둘러보기가 특정 위치 지점에서 멈추고 재생 버튼을 클릭할 때까지 일시중지 상태가 유지됩니다. 일시중지 도중에는 사용자가 어스 환경을 마음대로 탐색할 수 있습니다. 재생 버튼을 클릭하면 사용자는 일시중지가 설정되었던 둘러보기의 위치 지점으로 돌아가게 됩니다.
일시중지는 기본 비행 경로를 중단하지 않으므로, 브라우저에서는 일시중지가 발생한 양 위치 지점 사이의 속도를 일시중지가 발생하지 않은 것처럼 계산합니다.
<gx:TourControl> <gx:playMode>pause</gx:playMode> </gx:TourControl>
예제
대기와 관련된 예제는 아래에 나와 있습니다. 사운드 파일이 대기 중인 상태이며, 파일에는 10초 동안의 소개 내용이 포함되어 있습니다. 10초의 대기 시간이 사운드 큐 바로 뒤에 삽입되어 있으므로 소개 내용이 끝날 때까지 아래의 비행 이동이 실행되지 않습니다.
<?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"> <gx:Tour> <gx:Playlist> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- this file is ten seconds long --> </gx:SoundCue> <gx:Wait> <gx:duration>10</gx:duration> </gx:Wait> <gx:FlyTo> <gx:duration>5</gx:duration> <gx:flyToMode>bounce</gx:flyToMode> <LookAt> <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude> <heading>-172.3</heading> <tilt>10</tilt> <range>1200</range> <altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> </gx:Playlist> </gx:Tour> </kml>
다음 예제는 일시중지 사용을 보여줍니다. 사용자가 어스에서 특정 위치로 비행한 다음 둘러보기가 일시중지됩니다. 이때 사용자는 원하는 시간만큼 어스 환경을 탐색할 수 있습니다. 둘러보기를 다시 재생할 준비가 되면 사용자는 둘러보기 컨트롤에서 재생을 선택해야 합니다. 그러면 Google 어스가 둘러보기의 마지막 위치로 이동하여 재생을 다시 시작합니다.
<?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"> <gx:Tour> <gx:Playlist> <gx:FlyTo>
<gx:duration>5</gx:duration>
<gx:flyToMode>bounce</gx:flyToMode>
<LookAt>
<longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<heading>-172.3</heading>
<tilt>10</tilt>
<range>1200</range>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt>
</gx:FlyTo> <gx:TourControl> <gx:playMode>pause</gx:playMode> </gx:TourControl> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- this file is ten seconds long --> </gx:SoundCue> <gx:Wait> <gx:duration>10.0</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </kml>
업데이트
둘러보기 도중 어스 환경에서 KML 지점을 수정, 변경 또는 생성할 수 있으며, 지점의 크기, 스타일, 위치표시의 위치, 지면 오버레이(Ground Overlay) 추가, 도형 등과 관련된 작업을 수행할 수 있습니다. KML 업데이트에 대한 자세한 내용은 개발자 가이드의 업데이트 섹션을 참조하세요.
KML 업데이트는 둘러보기 도중에 실행할 수 있으며, <gx:AnimatedUpdate>
요소를 사용하여 설정할 수 있습니다. 둘러보기 도중 업데이트 동작은 아래와 같은 점에서 네트워크 링크(NetworkLink)와 다릅니다.
- 둘러보기를 종료하면 KML 업데이트가 취소됩니다.
- 현재 상태를 저장할 때 KML 업데이트가 포함되지 않습니다.
또한 보간이 적용되는 변경사항(즉, 크기 변경과 같이 중간 상태가 있는 변경사항)에는 지정한 기간 동안 애니메이션이 적용됩니다. 중간 단계가 없는 변경사항(예: 설명 풍선 열기 또는 닫기)은 지정한 기간이 종료되는 시점에만 업데이트됩니다. 기간을 지정하지 않으면 업데이트가 즉시 시작됩니다. <gx:duration>
의 기본값은 0.0입니다.
위에 나와 있는 차이점을 제외하면 <gx:AnimatedUpdate>
요소 내 업데이트(Update)는 <NetworkLinkControl>
내 업데이트(Update)와 동일한 방식으로 작동합니다. 이 업데이트는 마커 크기, 위치, 모양을 변경하고 지면 오버레이와 모델을 추가하는 데 사용할 수 있습니다. 또한 <gx:balloonVisibility>
요소를 사용하여 정보 풍선을 전환할 수도 있습니다.
<gx:AnimatedUpdate> 및 둘러보기 타임라인
애니메이션 업데이트는 타임라인에서 다른 프리미티브와 동시에 실행될 수 있습니다. 즉, 애니메이션 업데이트가 실행되는 동안 둘러보기에서 바로 재생목록의 다음 둘러보기 프리미티브를 계속 재생합니다. <gx:duration>
은 업데이트가 시작되기까지의 시간을 제어하지만 다음 둘러보기 프리미티브를 지연시키지는 않습니다.
다음 작업이 실행되기 전에 애니메이션 업데이트가 종료되도록 하려면, 애니메이션 업데이트와 다음 둘러보기 프리미티브 사이에 업데이트 기간과 동일한 기간으로 <gx:Wait>
를 삽입합니다.
또한 애니메이션 업데이트 기간이 마지막 <gx:FlyTo>
또는 <gx:Wait>
요소의 기간보다 길어지면 애니메이션 업데이트가 잘리게 되므로, <gx:duration>
값을 적절하게 변경하거나 추가 <gx:Wait>
요소를 재생목록 끝에 삽입하여 애니메이션 업데이트가 완료될 수 있도록 시간을 부여할 수 있습니다.
타임라인에 대한 자세한 내용은 위의 둘러보기 타임라인을 참조하세요.
예제
다음 스니펫 코드는 특정 위치표시 아이콘의 크기 변화를 1.0에서 10.0 사이의 값으로 보여줍니다. 6.5초에 걸쳐 크기가 변경되며, 이때 초기 상태의 아이콘이 점점 확장되어 최종 크기가 됩니다.
둘러보기 마지막 지점에는 <gx:Wait>
프리미티브가 포함되어 있습니다. 애니메이션 업데이트는 자체적으로 둘러보기 종료를 지연할 수 없습니다. 연속 유형 둘러보기 프리미티브만 둘러보기의 길이를 정의할 수 있습니다. 이 때문에 2.4초의 대기가 삽입되었습니다. 4.1초의 비행 이동과 함께 대기 요소는 둘러보기가 종료되기 전에 업데이트가 완료될 수 있는 시간을 부여합니다.
<?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"> <Document> <name>gx:AnimatedUpdate example</name> <open>1</open> <Style id="style"> <IconStyle id="iconstyle"> <scale>1.0</scale> </IconStyle> </Style> <Placemark id="mountainpin1"> <name>New Zealand's Southern Alps</name> <styleUrl>#style</styleUrl> <Point> <coordinates>170.144,-43.605,0</coordinates> </Point> </Placemark> <gx:Tour> <name>Play me!</name> <gx:Playlist> <!-- The order and duration of TourPrimitives is important; in this example, the AnimatedUpdate needs 6.5 seconds to complete. The FlyTo provides 4.1, and the Wait 2.4, giving the update time to complete before the Tour ends. AnimatedUpdates don't hold Tours open, but FlyTos and Waits do. For more information, refer to: http://developers.google.com/kml/documentation/touring.html#tourtimelines --> <gx:AnimatedUpdate> <gx:duration>6.5</gx:duration> <Update> <targetHref></targetHref> <Change> <IconStyle targetId="iconstyle"> <scale>10.0</scale> </IconStyle> </Change> </Update> </gx:AnimatedUpdate> <gx:FlyTo> <gx:duration>4.1</gx:duration> <Camera> <longitude>170.157</longitude> <latitude>-43.671</latitude> <altitude>9700</altitude> <heading>-6.333</heading> <tilt>33.5</tilt> <roll>0</roll> </Camera> </gx:FlyTo> <!-- wait for the AnimatedUpdate to complete --> <gx:Wait> <gx:duration>2.4</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> </Document> </kml>
사운드 추가
둘러보기는 사운드 파일을 포함할 수 있으며, 사운드 파일은 <gx:SoundCue>
요소를 사용하여 언제든지 재생할 수 있습니다. 하위 <href>
요소에서 사운드 파일을 지정하며, 시스템에 설치된 코덱에 따라 지원되는 유형이 다릅니다. 지원되는 유형으로는 다음이 포함되지만 이에 국한되지는 않습니다.
- mp3
- aac
기간은 지정할 수 없습니다.
사운드 파일은 기본 타임라인에서 다른 프리미티와 동시에 재생됩니다. 즉, 사운드 파일이 재생되는 도중 재생목록이 다음 둘러보기 프리미티브로 이동합니다. 자세한 내용은 둘러보기 타임라인을 참조하세요. 애니메이션 업데이트와 비슷하게, 사운드 파일은 둘러보기 종료를 지연할 수 없다는 점에 유의해 주세요. 연속 유형 둘러보기 프리미티브만 둘러보기의 길이를 정의할 수 있습니다. 사운드 파일이 완료되기 전에 둘러보기가 종료되면 사운드 파일의 재생이 중지됩니다.
여러 개의 사운드 파일 재생
Google 어스에서는 여러 개의 파일을 혼합하여 동시에 여러 개의 사운드 파일을 재생할 수 있습니다. 이는 둘러보기 시작 지점에서 배경 음악 파일이 로드되고, 둘러보기 내의 특정 위치 지점에 보이스오버가 제공되는 경우 유용하게 사용할 수 있습니다.
다음 프리미티브가 재생되기 전에 사운드 파일이 완료되도록 허용
사운드 파일이 재생되는 도중 둘러보기를 대기시키려면 <gx:Wait>
요소를 <gx:SoundCue>
프리미티브 바로 뒤에 추가합니다. <gx:Wait>
는 다음 프리미티브로 진행하기 전에 둘러보기가 대기해야 하는 시간을 초 단위로 지정합니다.
둘러보기가 종료된 후에는 사운드 파일을 계속해서 재생할 수 없으므로, 대기 요소를 사용하여 사운드 파일이 재생을 마칠 때까지 둘러보기 시간을 연장해야 합니다.
예제
아래의 둘러보기 예제는 15초 분량이며, <gx:FlyTo>
및 <gx:Wait>
기간이 함께 정의되어 있습니다. 첫 번째 사운드 클립은 15초 동안 지속되며, 둘러보기의 전체 시간에 걸쳐 재생됩니다. 두 번째 파일은 5초 간 대기 후 첫 번째 파일과 함께 10초 동안 재생됩니다. 둘러보기 시간을 연장하여 사운드 클립이 완료될 수 있는 시간을 허용하기 위해서는 <gx:Wait>
를 사용해야 합니다.
<?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"> <gx:Tour> <gx:Playlist> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/AJsBlues.mp3 </href> <!-- 15 second audio clip --> </gx:SoundCue> <gx:FlyTo> <gx:duration>5</gx:duration> <gx:flyToMode>bounce</gx:flyToMode> <LookAt> <longitude>-79.387</longitude>
<latitude>43.643</latitude>
<altitude>0</altitude>
<range>1200</range>
<tilt>10</tilt>
<heading>-172.3</heading>
<altitudeMode>relativeToGround</altitudeMode>
</LookAt> </gx:FlyTo> <gx:SoundCue> <href> http://dev.keyhole.com/codesite/cntowerfacts.mp3 </href> <!-- 10 second audio clip --> </gx:SoundCue> <gx:Wait> <gx:duration>10</gx:duration> <!-- continues the tour for 10 seconds --> </gx:Wait> <!-- while audio clip plays --> </gx:Playlist> </gx:Tour> </kml>
설명 풍선 전환
애니메이션 업데이트 내 <gx:balloonVisibility>
를 사용하여 둘러보기 도중에 위치표시의 설명 풍선을 열거나 닫을 수 있습니다. 풍선 표시 여부는 지정된 기간의 마지막 시점에 변경되며, 지정된 기간 동안에는 애니메이션이 적용되지 않습니다. <gx:duration>
값을 입력하지 않으면 기본값인 0.0이 할당됩니다(풍선을 즉시 열거나 닫음).
예제
balloonvisibility_tourexample.kml
<?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"> <Document> <name>balloonVisibility Example</name> <open>1</open> <gx:Tour> <name>Play me</name> <gx:Playlist> <gx:FlyTo> <gx:duration>5.0</gx:duration> <!-- bounce is the default flyToMode --> <LookAt> <longitude>-119.748584</longitude> <latitude>33.736266</latitude> <altitude>0</altitude> <heading>-9.295926</heading> <tilt>84.0957450</tilt> <range>4469.850414</range> <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode> </LookAt> </gx:FlyTo> <gx:AnimatedUpdate> <!-- the default duration is 0.0 --> <Update> <targetHref/> <Change> <Placemark targetId="underwater1"> <gx:balloonVisibility>1</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:Wait> <gx:duration>4.0</gx:duration> </gx:Wait> <gx:AnimatedUpdate> <Update> <targetHref/> <Change> <Placemark targetId="underwater1"> <gx:balloonVisibility>0</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:FlyTo> <gx:duration>3</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <LookAt> <longitude>-119.782630</longitude> <latitude>33.862855</latitude> <altitude>0</altitude> <heading>-19.314858</heading> <tilt>84.117317</tilt> <range>6792.665540</range> <gx:altitudeMode>relativeToSeaFloor</gx:altitudeMode> </LookAt> </gx:FlyTo> <gx:AnimatedUpdate> <Update> <targetHref/> <Change> <Placemark targetId="underwater2"> <gx:balloonVisibility>1</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:Wait> <gx:duration>4.0</gx:duration> </gx:Wait> <gx:AnimatedUpdate> <Update> <targetHref/> <Change> <Placemark targetId="underwater2"> <gx:balloonVisibility>0</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:FlyTo> <gx:duration>3</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <LookAt> <longitude>-119.849578</longitude> <latitude>33.968515</latitude> <altitude>0</altitude> <heading>-173.948935</heading> <tilt>23.063392</tilt> <range>3733.666023</range> <altitudeMode>relativeToGround</altitudeMode> </LookAt> </gx:FlyTo> <gx:AnimatedUpdate> <Update> <targetHref/> <Change> <Placemark targetId="onland"> <gx:balloonVisibility>1</gx:balloonVisibility> </Placemark> </Change> </Update> </gx:AnimatedUpdate> <gx:Wait> <gx:duration>4.0</gx:duration> </gx:Wait> </gx:Playlist> </gx:Tour> <Placemark id="underwater1"> <name>Underwater off the California Coast</name> <description> The tour begins near the Santa Cruz Canyon, off the coast of California, USA. </description> <Point> <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode> <coordinates>-119.749531,33.715059,0</coordinates> </Point> </Placemark> <Placemark id="underwater2"> <name>Still swimming...</name> <description>We're about to leave the ocean, and visit the coast...</description> <Point> <gx:altitudeMode>clampToSeaFloor</gx:altitudeMode> <coordinates>-119.779550,33.829268,0</coordinates> </Point> </Placemark> <Placemark id="onland"> <name>The end</name> <description> <![CDATA[The end of our simple tour. Use <gx:balloonVisibility>1</gx:balloonVisibility> to show description balloons.]]> </description> <Point> <coordinates>-119.849578,33.968515,0</coordinates> </Point> </Placemark> </Document> </kml>
과거 이미지 통합
사용자가 클라이언트에서 과거 이미지를 사용 설정한 경우 둘러보기에서 이미지를 가져올 날짜를 지정할 수 있습니다. 표시할 이미지의 날짜를 지정하려면 <gx:TimeStamp>
요소를 AbstractView
에 포함합니다. <gx:TimeStamp>
는 시간 기반 KML과 햇빛에도 영향을 미칩니다.
이후의 모든 이미지에는 마지막으로 지정한 날짜가 사용됩니다.
예제
<?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"> <gx:Tour> <name>Small town over time</name> <gx:Playlist> <gx:FlyTo> <gx:duration>5.0</gx:duration> <Camera> <gx:TimeStamp> <when>1990-08-04</when> </gx:TimeStamp> <longitude>-121.991</longitude> <latitude>47.857</latitude> <altitude>7000</altitude> <altitudeMode>absolute</altitudeMode> </Camera> </gx:FlyTo> <gx:FlyTo> <gx:duration>3.0</gx:duration> <gx:flyToMode>smooth</gx:flyToMode> <Camera> <gx:TimeStamp> <when>2009</when> </gx:TimeStamp> <longitude>-121.991</longitude> <latitude>47.857</latitude> <altitude>7000</altitude> <altitudeMode>absolute</altitudeMode> </Camera> </gx:FlyTo> </gx:Playlist> </gx:Tour> </kml>
알려진 문제
현재 Google 어스 클라이언트에서는 둘러보기 KML이 완전하게 작동하지 않습니다. 알려진 일부 문제가 아래에 나와 있습니다. 아래 문제는 향후 출시 버전에서 수정될 수 있습니다.
- 일련의 기본 비행 이동에서 생성한 곡선이
<gx:AnimatedUpdate>
및<gx:TourControl>
요소로 인해 분리되며, 이러한 요소의 비행 이동 위치 지점 중 하나가 선형 경로와 합쳐집니다. <gx:SoundCue>
로 로드한 사운드 파일이<gx:TourControl>
에 의해 실행된 일시중지 동안에도 계속해서 재생됩니다. 둘러보기가 다시 재생되면, Google 어스는 사운드 파일에서 일시중지가 실행된 위치 지점으로 되돌아갑니다.- 절대 모드 이외 고도 모드를 사용하는 경우 카메라가 위치 지점에 접근할 때 비행 이동의 경로가 위아래로 흔들릴 수 있습니다. 이 문제는 업데이트된 지형 데이터가 클라이언트에 로드되면서 발생합니다. 카메라가 위치 지점에 접근하면 위치 지점과 관련된 정보가 좀 더 세밀해집니다. 결과적으로 위치 지점 아래의 지면 고도가 업데이트되고 이 위치 지점으로 향하는 경로도 수정되어 위아래로 흔들리는 것입니다.
이런 이유로 Google 어스의 기록 메커니즘은 모든 비행 이동에 절대 고도 모드를 지정합니다. 또한 이러한 경로 수정으로 인해 둘러보기가 방해를 받는 경우 고도를 절대값으로 변환해야 합니다.