카메라

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> 요소는 다음 질문에 답이 되는 항목을 지정합니다.

질문
<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 어스에서 표시되는 위치표시는 다음과 같습니다.

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, YZ 축을 보여줍니다.

  • 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>로 변환됩니다. 변환 순서는 다음과 같습니다.

  1. <altitude> - Z 축에 따라 <altitude>로 변환
  2. <heading> - Z 축을 기준으로 회전
  3. <tilt> - X 축을 기준으로 회전
  4. <roll> - Z 축을 기준으로 다시 회전

회전이 적용될 때마다 두 개의 카메라 축의 방향이 변경됩니다.

맨위로