كاميرا

تم التحديث في شباط (فبراير) 2009: تمت إضافة إشارة إلى <gx:altitudeMode> و<gx:TimeStamp> و<gx:TimeSpan>.

مقدمة من خلال KML 2.2، ويوفر <Camera> طريقة إضافية لتحديد نقطة العرض للمراقب ومعلمات العرض المرتبطة بها. <Camera> يشبه <LookAt>، نظرًا لأن كلا العنصرين يحددان موضع واتجاه الكاميرا الافتراضية التي تعرض الأرض. ويتمثل الاختلاف في أن LookAt يحدّد طريقة العرض من حيث نقطة الاهتمام التي تتم مشاهدتها. وعلى العكس من ذلك، تحدد الكاميرا طريقة العرض من حيث موضع العارض واتجاهه.

تم تمديد كل من <LookAt> و<Camera> من العنصر <AbstractView>، الذي يعتبر نوعًا تجريديًا أساسيًا. <Camera> و<LookAt> متطابقان في كيفية استخدامهما في ملف KML—على وجه التحديد، كعنصر فرعي لأي عنصر مشتق من <Feature> (علامة موضعية، أو تراكب الشاشة، أو تراكب الأرض، أو تراكب صور، أو مجلد، أو مستند، أو ارتباط شبكة) أو كعنصر فرعي لـ <NetworkLinkControl>. يمكنك استخدام إما <Camera> أو <LookAt> ضمن العنصر، ولكن ليس كليهما في نفس الوقت (أي، يمكن لكاميرا افتراضية واحدة فقط تحديد نقطة العرض الحالية).

الاختلافات بين <Camera> و<LookAt>

يوفر العنصر <Camera> الجديد مرونة إضافية في كيفية تحديد العرض. والأهم من ذلك أنه يمكنك إمالة عرض الكاميرا بحيث تنظر عبر الأفق إلى السماء. يوفر <Camera> تحكمًا كاملاً في ست درجات من الحرية للتحكم في العرض، لذلك يمكنك وضع الكاميرا في الفضاء ثم تدويرها حول المحاور س وص وز. إذا لم يتم تحديد عمليات تدوير، فسيكون العنصران متكافئين:

<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>، <height>، <altitudeMode>
كم تبعد المسافة عن نقطة الاهتمام؟ <range>
هل اتجاه العرض موجه نحو الشمال في الجزء العلوي من العرض؟ إذا كانت الإجابة بنعم، فاستخدم القيمة التلقائية <heading> وهي 0. إذا كانت الإجابة "لا"، حدِّد الدوران <heading> من >0 إلى 360 درجة
هل ينظر العرض إلى الأرض مباشرة؟ إذا كانت الإجابة بنعم، فاستخدم القيمة الافتراضية<tilt>. في حالة "لا"، تتم إمالة الكاميرا لأعلى باتجاه الأفق؛ حدّد تدويرًا بقيمة <tilt> ≤ 90°.
تنظر أداة 90° بشكل مستقيم عبر الأفق. (قد لا تتمكن من مشاهدة سطح الأرض مطلقًا إذا كنت بعيدًا عن الأرض ويساوي 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:

لقطة شاشة لعلامة ماتشو بيتشو الموضعية في 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>
أين تقع الكاميرا في الفضاء؟ ضع الكاميرا عند النقطة المحددة بواسطة <longitude> و<latitude> و<height> و<altitudeMode>. وبوجه عام، من الأفضل وضع الكاميرا على الأرض بشكل سيء.
هل اتجاه الكاميرا نحو الشمال في أعلى العرض؟ إذا كانت الإجابة بنعم، فاستخدم القيمة الافتراضية <heading> وهي 0. إذا كانت الإجابة "لا"، أدر الكاميرا من >0 إلى 360 درجة، وفقًا لنقاط البوصلة.
هل تنظر الكاميرا مباشرةً إلى الأرض؟ إذا كانت الإجابة بنعم، فاستخدم القيمة التلقائية <tilt> وهي 0. إذا كانت الإجابة "لا"، أدر الكاميرا من 0 إلى 180 درجة لتحديد زاوية التدوير حول المحور X. (يُسمح باستخدام القيم السالبة لـ <tilt>، ولكن تؤدي هذه القيم إلى عرض مقلوب.)
هل مستوى الكاميرا عند مشاهدة المشهد؟ إذا كانت الإجابة بنعم، فاستخدم القيمة التلقائية 0 <roll>. ملاحظة: عادةً ما تكون قيمة <roll> عند استخدامه كفرع لـ <Camera> 0. يمكنك تحديد قيمة بين -180 و+180 درجة، ولكن هذا الاستخدام نادر.

يوضّح الرسم البياني التالي المحاور X وY وZ المرتبطة بالكاميرا الافتراضية.

  • يشير المحور X نحو يمين الكاميرا ويُطلق عليه المتّجه الأيمن.
  • يحدّد المحور ص الاتجاه "لأعلى" بالنسبة إلى الشاشة ويُسمى المتجه لأعلى.
  • أما المحور 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. للحصول على مزيد من المعلومات، يُرجى الرجوع إلى القسم الوقت الذي يحتوي على 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 مساءً بالتوقيت العالمي المنسق في 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 إلى <height>
  2. <heading> - تدوير حول المحور Z.
  3. <tilt> - تدوير حول المحور X.
  4. <roll> - تدوير المحور Z (مرة أخرى)

لاحظ أنه في كل مرة يتم فيها تطبيق دوران، يغير محوران الكاميرا اتجاههما.

الرجوع إلى أعلى الصفحة