دوربین ها

به روز رسانی فوریه 2009: اشاره ای به <gx:altitudeMode>، <gx:TimeStamp> و <gx:TimeSpan> اضافه شد.

<Camera> که با KML 2.2 معرفی شد، راه دیگری را برای تعیین دیدگاه ناظر و پارامترهای نمای مرتبط ارائه می دهد. <Camera> شبیه <LookAt> است، زیرا هر دو عنصر مکان و جهت یک دوربین مجازی را که در حال مشاهده زمین است، تعیین می کنند. تفاوت این است که LookAt دیدگاه را بر اساس نقطه مورد علاقه ای که مشاهده می شود مشخص می کند. دوربین در مقابل، دید را از نظر موقعیت و جهت گیری بیننده مشخص می کند.

هر دو <LookAt> و <Camera> از عنصر <AbstractView> ، که یک نوع انتزاعی پایه است، گسترش یافته اند. <Camera> و <LookAt> از نظر نحوه استفاده در یک فایل KML یکسان هستند - یعنی به عنوان فرزند هر عنصر مشتق شده از <Feature> (Placemark، ScreenOverlay، GroundOverlay، PhotoOverlay، Folder، Document، NetworkLink) یا به عنوان یک فرزند <NetworkLinkControl> . شما می توانید از یک <Camera> یا <LookAt> در یک ویژگی استفاده کنید، اما نه از هر دو به طور همزمان (یعنی فقط یک دوربین مجازی می تواند دیدگاه فعلی را مشخص کند).

تفاوت بین <Camera> و <LookAt>

عنصر <Camera> جدید انعطاف بیشتری را در نحوه تعیین نما فراهم می کند. مهمتر از همه، می توانید نمای دوربین را به گونه ای کج کنید که در بالای افق به آسمان نگاه کنید. <Camera> کنترل کامل شش درجه آزادی را بر روی نما فراهم می کند، بنابراین می توانید دوربین را در فضا قرار دهید و سپس آن را حول محورهای 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>
به چه نقطه ای نگاه می کنم؟ <طول جغرافیایی>، <طول جغرافیایی>، <ارتفاع>، <altitudeMode>
فاصله دیدگاه از نقطه مورد نظر چقدر است؟ <محدوده>
آیا نما به گونه ای است که شمال در بالای دید قرار دارد؟ اگر بله، از مقدار پیش‌فرض <heading> 0 استفاده کنید. اگر خیر، چرخش <heading> را از >0 تا 360 درجه مشخص کنید.
آیا منظره مستقیم به زمین نگاه می کند؟ اگر بله، از مقدار<tilt> پیش فرض استفاده کنید. اگر خیر، دوربین به سمت بالا به سمت افق متمایل می شود. چرخش <tilt> ≤ 90 درجه را مشخص کنید.
90 درجه مستقیماً در امتداد افق نگاه می کند. (اگر دور باشید و <tilt> برابر 90 درجه باشد، ممکن است اصلاً سطح زمین را نبینید.)

مثال

در اینجا یک نمونه <Placemark> حاوی عنصر <LookAt> است:

<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 Earth است:

عکس صفحه ماچوپیچو Placemark در Google Earth

اگر جهت دید شما سیاره را قطع می کند، از عنصر <LookAt> استفاده کنید، زیرا تعیین آن کمی ساده تر از <Camera> است.

عناصر کودک <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>
دوربین در کجای فضا قرار دارد؟ دوربین را در نقطه ای که با <طول جغرافیایی>، <طول جغرافیایی>، <ارتفاع> و <altitudeMode> مشخص شده است، قرار دهید. به طور کلی، قرار دادن دوربین روی زمین انتخاب ضعیفی است.
آیا جهت دوربین به گونه ای است که شمال در بالای دید قرار دارد؟ اگر بله، از مقدار پیش‌فرض <heading> 0 استفاده کنید. اگر خیر، دوربین را از >0 به 360 درجه، مطابق نقاط قطب‌نما بچرخانید.
آیا دوربین مستقیماً به زمین نگاه می کند؟ اگر بله، از مقدار پیش‌فرض <tilt> 0 استفاده کنید. اگر خیر، دوربین را از 0 تا 180 درجه بچرخانید تا زاویه چرخش حول محور X را مشخص کنید. (مقادیر منفی برای <tilt> مجاز است، اما این منجر به نمای وارونه می شود.)
آیا دوربین در هنگام مشاهده صحنه در سطحی است؟ اگر بله، از مقدار پیش‌فرض <roll> 0 استفاده کنید. توجه: مقدار <roll> زمانی که به عنوان فرزند <Camera> استفاده می‌شود معمولاً 0 است. می‌توانید مقداری بین -180 و +180 درجه تعیین کنید، اما این استفاده نادر است

نمودار زیر محورهای X ، Y و Z را نشان می دهد که به دوربین مجازی متصل شده اند.

  • محور X به سمت راست دوربین است و بردار سمت راست نامیده می شود.
  • محور Y جهت "بالا" را نسبت به صفحه تعیین می کند و بردار بالا نامیده می شود.
  • محور Z از مرکز صفحه به سمت نقطه چشم است. دوربین به سمت پایین محور -Z که بردار دید نامیده می شود نگاه می کند.

در اینجا مثالی از تنظیم یک <Camera> به عنوان نقطه نمای شروع در یک <Document> :

<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 Earth نشان می دهد:

زمان در AbstractViews

<Camera> و <LookAt> هر دو می‌توانند حاوی اطلاعات زمانی باشند که بر تصاویر تاریخی، نور خورشید و هر شیء دارای برچسب زمانی تأثیر می‌گذارد. <gx:TimeSpan> و <gx:TimeStamp> در AbstractViews استفاده می‌شوند و در فضای نام برنامه افزودنی Google قرار دارند. برای اطلاعات بیشتر، لطفاً به بخش Time with AbstractViews فصل زمان و انیمیشن مراجعه کنید.

مثال ها

مثال های زیر چرخش های مختلف <Camera> را نشان می دهند.

سرفصل

این مثال یک <Camera> را با عنوان 90 درجه (شرق) و شیب 90 درجه (به سمت افق) نشان می دهد. دوربین در ارتفاع 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 Earth است:

کج کردن

مثال زیر از یک <Camera> با شیب برابر 90 درجه استفاده می کند که به سمت افق می نگرد. از مقادیر پیش‌فرض برای <heading> ، <altitude> ، <altitudeMode> و <roll> استفاده می‌کند.

<Camera> حاوی مقدار <gx:TimeStamp> است. این بر تصاویر تاریخی و نور خورشید و همچنین نمایش هر گونه اشیاء دارای برچسب زمانی تأثیر می گذارد. در تصویر زیر، نور خورشید روشن شده است و <Camera> در ساعت 3:29 بعد از ظهر، UTC در 1 ژانویه 2009 (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 Earth نشان می دهد:

رول

این مثال شامل یک عنصر <roll> با مقدار 45 درجه است که باعث می شود دوربین به سمت چپ بچرخد.

<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 (دوباره).

توجه داشته باشید که هر بار که یک چرخش اعمال می شود، دو محور دوربین جهت خود را تغییر می دهند.

بازگشت به بالا