2009년 2월 업데이트: <gx:altitudeMode>, <gx:TimeStamp> 및 <gx:TimeSpan>에 대한 내용이 추가되었습니다.
KML 2.2에서 소개된 <Camera>
를 사용하면 사용자의 시점과 이와 연결된 보기 매개변수를 추가로 지정할 수 있습니다. <Camera>
는 <LookAt>
과 유사한데, 이는 두 요소 모두 지구를 바라보는 가상 카메라의 위치와 방향을 정의하기 때문입니다. 하지만 LookAt의 경우, 보고 있는 관심가는 장소의 측면에서 보기를 지정한다는 점에서 차이가 있습니다. 반면 카메라는 뷰어의 위치와 방향 측면에서 보기를 지정합니다.
<LookAt>
과 <Camera>
모두 기본 추상 유형인 <AbstractView>
요소로부터 파생됩니다. <Camera>
및 <LookAt>
이 KML 파일에서 사용되는 방식은 동일합니다. 즉, <Feature>
에서 파생된 요소(위치표시(Placemark), 화면 오버레이(ScreenOverlay), 지면 오버레이(GroundOverlay), 사진 오버레이(PhotoOverlay), 폴더(Folder), 문서(Document), 네트워크 링크(NetworkLink))의 하위 요소 또는 <NetworkLinkControl>
의 하위 요소로 사용됩니다. 지점 내에서 <Camera>
또는 <LookAt>
을 사용할 수 있지만 둘을 동시에 사용할 수는 없습니다(하나의 가상 카메라만 현재 시점을 지정할 수 있음).
<Camera>
및 <LookAt>
의 차이점
새로운 <Camera>
요소를 사용하면 보기를 더욱 자유롭게 지정할 수 있습니다. 가장 중요한 점은 카메라 보기를 기울여 지평선 위의 하늘을 볼 수 있다는 점입니다. <Camera>
를 사용하면 6단계 자유도로 보기를 제어할 수 있으므로, 카메라를 공간에 배치한 다음 x, y 및 z 축을 기준으로 회전할 수 있습니다. 회전을 지정하지 않은 경우 두 요소는 동일합니다.
<Camera>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</Camera>
<LookAt>
<longitude>-121</longitude>
<latitude>37</latitude>
<altitude>2000</altitude>
<altitudeMode>clampToGround</altitudeMode>
</LookAt>
다음 섹션에서는 <LookAt>
요소를 간략하게 검토하며, 이를 통해 새로운 <Camera>
요소의 사용 방법과 비교해 볼 수 있습니다.
<LookAt>
에 대한 검토사항
<LookAt>
요소는 현재 보고 있는 지구상의 위치 지점, 관심가는 장소로부터 시점까지의 거리 및 보기 각도를 지정합니다. 이 요소에 대한 구문은 다음과 같습니다.
<LookAt id="ID"> <longitude></longitude> <!-- kml:angle180 --> <latitude></latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <range></range> <!-- double --> <tilt>0</tilt> <!-- float --> <heading>0</heading> <!-- float --> <altitudeMode>clampToGround</altitudeMode> <!--kml:altitudeModeEnum:clampToGround, relativeToGround, absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </LookAt>
다음 그림은 <LookAt>
시점이 형성되는 방식을 보여줍니다.
<LookAt>
요소는 다음 질문에 답이 되는 항목을 지정합니다.
질문 | <LookAt> 내 사양 |
어느 위치 지점을 보고 있나요? | <longitude>, <latitude>,<altitude>, <altitudeMode> |
관심가는 장소로부터 시점까지의 거리는 얼마인가요? | <range> |
정북이 보기 상단이 되도록 보기 방향이 설정되어 있나요? | '예'인 경우 기본 <heading> 값인 0을 사용합니다. '아니요'인 경우 <heading> 회전을 0°에서 360° 사이로 지정합니다. |
지구를 바로 내려다보도록 보기가 설정되어 있나요? | '예'인 경우 기본 <tilt> 값을 사용합니다. '아니요'인 경우 카메라가 지평선을 향하여 위로 기울어진 것이므로 <tilt> 회전을 90° 이하로 지정합니다. 90°로 지정하면 지평선을 따라 바로 보게 됩니다. 거리가 너무 멀고 <tilt>가 90°인 경우 지구 표면이 표시되지 않을 수 있습니다. |
예제
<LookAt>
요소가 있는 샘플 <Placemark>
는 다음과 같습니다.
<Placemark>
<name>Machu Picchu, Peru</name>
<LookAt>
<longitude>-72.503364</longitude>
<latitude>-13.209676</latitude>
<altitude>0</altitude>
<range>14794.882995</range>
<tilt>66.768762</tilt>
<heading>71.131493</heading>
</LookAt>
<styleUrl>#msn_icon12</styleUrl>
<Point>
<coordinates>-72.516244,-13.162806,0</coordinates>
</Point>
</Placemark>
Google 어스에서 표시되는 위치표시는 다음과 같습니다.
보기 방향이 지구와 교차하는 경우에는 <Camera>
에 비해 지정하기가 조금 더 쉬운 <LookAt>
요소를 사용하세요.
<Camera>
의 하위 요소
<Camera>
요소를 사용하면 시점을 원하는 공간에 배치할 수 있으며, 원하는 방향으로 보기를 회전할 수 있습니다. 이 요소의 구문은 다음과 같습니다.
<Camera id="ID"> <longitude>0</longitude> <!-- kml:angle180 --> <latitude>0</latitude> <!-- kml:angle90 --> <altitude>0</altitude> <!-- double --> <heading>0</heading> <!-- kml:angle360 --> <tilt>0</tilt> <!-- kml:anglepos180 --> <roll>0</roll> <!-- kml:angle180 --> <altitudeMode>clampToGround</altitudeMode> <!-- kml:altitudeModeEnum: relativeToGround, clampToGround, or absolute --> <!-- or, gx:altitudeMode can be substituted: clampToSeaFloor, relativeToSeaFloor --> </Camera>
<Camera>
요소는 다음 질문에 답이 되는 항목을 지정합니다.
질문 | <Camera> 내 사양 |
공간의 어느 위치에 카메라가 있나요? | <longitude>, <latitude>, <altitude> 및 <altitudeMode>에 의해 지정된 위치 지점에 카메라를 배치합니다. 일반적으로 카메라를 지면에 두는 것은 좋지 않습니다. |
정북이 보기 상단이 되도록 카메라의 방향이 설정되어 있나요? | '예'인 경우 기본 <heading> 값인 0을 사용합니다. '아니요'인 경우 나침반 값에 따라 카메라를 0°에서 360° 사이로 회전합니다. |
지구를 바로 내려다보도록 카메라가 설정되어 있나요? | '예'인 경우 기본 <tilt> 값인 0을 사용합니다. '아니요'인 경우 카메라를 0°에서 180°로 회전하여 X 축을 기준으로 한 회전 각도를 지정합니다. <tilt>에 음수 값이 허용되지만 보기의 위아래가 바뀌게 됩니다. |
카메라의 수평이 화면을 바라보는 것과 일치하나요? | '예'인 경우 기본 <roll> 값인 0을 사용합니다. 참고: <Camera> 의 하위 요소로 사용된 경우 <roll> 값은 보통 0입니다. −180에서 +180° 사이의 값을 지정할 수 있지만 이렇게 사용하는 경우는 드뭅니다. |
다음 그림은 가상 카메라에 연결된 X, Y 및 Z 축을 보여줍니다.
- X 축은 카메라 오른쪽을 향하며, 오른쪽 벡터라고 부릅니다.
- Y 축은 화면을 기준으로 '위쪽' 방향을 정의하며, 위쪽 벡터라고 부릅니다.
- Z 축은 화면 중앙으로부터 시점을 향합니다. 카메라는 −Z 축을 내려다보며 이를 보기 벡터라고 부릅니다.
<Document>
내에서 시작 시점을 <Camera>
로 설정하는 예제는 다음과 같습니다.
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Golden Gate tour</name>
<open>1</open>
<Camera>
<longitude>-122.4790</longitude>
<latitude>37.8110</latitude>
<altitude>127</altitude>
<heading>18.0</heading>
<tilt>85</tilt>
<altitudeMode>absolute</altitudeMode>
</Camera> </Document> </kml>
Google 어스에서 이 시점은 다음과 같이 표시됩니다.
추상 보기(AbstractView)에서의 시간
<Camera>
와 <LookAt>
모두 시간 정보를 포함하고 있으며, 이러한 정보는 과거 이미지, 햇빛 및 시간이 태그로 지정된 모든 개체에 영향을 미칩니다. <gx:TimeSpan>
및 <gx:TimeStamp>
는 추상 보기 내에서 사용되며, Google 확장 네임스페이스에 포함되어 있습니다. 자세한 내용은 시간 및 애니메이션 파트의 추상 보기에서의 시간 섹션을 참조해 주세요.
예제
다음 예제는 <Camera>
회전의 여러 형태를 보여줍니다.
방위
다음 예제는 방위(동쪽)와 기울이기가 각각 90도인 <Camera>
를 보여줍니다(지평선을 향함). 카메라는 100미터의 고도에 배치되어 있습니다.
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark>
<name>100m looking east</name>
<Camera>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark> </Document> </kml>
Google 어스에서 표시되는 결과는 다음과 같습니다.
기울이기
이 예제에서는 기울이기가 90도이며 지평선을 바라보는 <Camera>
가 사용되었으며, <heading>
, <altitude>
, <altitudeMode>
및 <roll>
에 기본값이 사용되었습니다.
<Camera>
에는 <gx:TimeStamp>
값이 포함되어 있습니다. 이 값은 과거 이미지와 햇빛은 물론 시간이 태그로 지정된 개체를 표시하는 데 영향을 미칩니다. 아래 이미지에서 햇빛은 켜져 있으며, <Camera>
는 협정 세계시 2009년 1월 1일 오후 3시 29분의 시간에 해당하는 이미지를 표시하고 있습니다(현지 시간 오전 7시 30분).
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>At ground level</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<!-- altitude default is 0 (default altitudeMode is clampToGround) -->
<!-- heading default is 0 (north) -->
<tilt>90</tilt>
<!-- level -->
<!-- roll default is 0 -->
<!-- altitudeMode default is clampToGround -->
</Camera>
</Placemark>
</Document>
</kml>
Google 어스에서 이 시점은 다음과 같이 표시됩니다.
회전
이 예제에서는 값이 45도 설정된 <roll>
요소가 포함되어 있으며, 카메라가 왼쪽으로 회전합니다.
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:gx="http://www.google.com/kml/ext/2.2">
<Document>
<Placemark>
<name>Roll left</name>
<Camera>
<gx:TimeStamp><
when>2009-01-01T15:29:27Z</when>
</gx:TimeStamp>
<longitude>-122.4783</longitude>
<latitude>37.8120</latitude>
<altitude>100</altitude>
<heading>90</heading>
<!-- east -->
<tilt>90</tilt>
<!-- level -->
<roll>45</roll>
<altitudeMode>absolute</altitudeMode>
</Camera>
</Placemark>
</Document>
</kml>
변환 순서
회전 순서는 중요합니다. 기본적으로 카메라는 지구를 향하여 -Z 축을 바로 내려다봅니다. 회전이 수행되기 전에 카메라는 Z 축을 따라 <altitude>
로 변환됩니다. 변환 순서는 다음과 같습니다.
- <altitude> - Z 축에 따라 <altitude>로 변환
- <heading> - Z 축을 기준으로 회전
- <tilt> - X 축을 기준으로 회전
- <roll> - Z 축을 기준으로 다시 회전
회전이 적용될 때마다 두 개의 카메라 축의 방향이 변경됩니다.