آموزش KML

KML فرمت فایلی است که برای نمایش داده های جغرافیایی در مرورگر Earth مانند Google Earth استفاده می شود. KML از یک ساختار مبتنی بر برچسب با عناصر و ویژگی های تو در تو استفاده می کند و بر اساس استاندارد XML است. همه تگ ها به حروف کوچک و بزرگ حساس هستند و باید دقیقاً همانطور که در مرجع KML فهرست شده اند ظاهر شوند. مرجع نشان می دهد که کدام تگ ها اختیاری هستند. در یک عنصر معین، برچسب ها باید به ترتیب نشان داده شده در مرجع ظاهر شوند.

اگر با KML تازه کار هستید، این سند و فایل‌های نمونه همراه ( SamplesInEarth ) را کاوش کنید تا در مورد ساختار اصلی یک فایل KML و متداول‌ترین برچسب‌های مورد استفاده آشنا شوید. بخش اول ویژگی هایی را توضیح می دهد که می توان با رابط کاربری Google Earth ایجاد کرد. این ویژگی‌ها شامل مکان‌ها، توضیحات، پوشش‌های زمین، مسیرها و چندضلعی‌ها می‌شود. بخش دوم ویژگی هایی را توضیح می دهد که نیاز به نوشتن KML با یک ویرایشگر متن دارند. هنگامی که یک فایل متنی با پسوند .kml یا .kmz ذخیره می شود، مرورگرهای Earth می دانند چگونه آن را نمایش دهند.

نکته: برای دیدن «کد» KML برای یک ویژگی در Google Earth، می‌توانید به سادگی روی ویژگی در نمایشگر سه‌بعدی Google Earth کلیک راست کرده و Copy را انتخاب کنید. سپس محتویات کلیپ بورد را در هر ویرایشگر متنی قرار دهید. ویژگی بصری نمایش داده شده در Google Earth به متن معادل KML آن تبدیل می شود. حتما این ویژگی را تجربه کنید.

تمام نمونه هایی که در اینجا توضیح داده شده اند در فایل نمونه های KML هستند. با دانلود آن فایل برای مشاهده نمونه ها در Google Earth شروع کنید.

برای اطلاعات بیشتر

مرجع KML 2.2 جزئیات مربوط به فرمت فایل KML را ارائه می دهد. اگر با XML آشنایی دارید، به KML 2.2 Schema نیز علاقه مند خواهید شد.

برای بحث در مورد نحوه استفاده از برخی از ویژگی‌های کلیدی در KML، به راهنمای توسعه‌دهنده مراجعه کنید.

فهرست مطالب

اسناد پایه KML

ساده‌ترین نوع اسناد KML آنهایی هستند که می‌توانند مستقیماً در Google Earth ایجاد شوند—یعنی نیازی به ویرایش یا ایجاد هیچ KML در یک ویرایشگر متنی ندارید. مکان‌ها، همپوشانی‌های زمین، مسیرها و چند ضلعی‌ها همگی می‌توانند مستقیماً در Google Earth ایجاد شوند.

مکان‌ها

علامت مکان یکی از متداول ترین ویژگی های مورد استفاده در Google Earth است. موقعیتی را روی سطح زمین با استفاده از یک پین زرد رنگ به عنوان نماد مشخص می کند. ساده ترین Placemark فقط شامل یک عنصر <Point> است که مکان علامت مکان را مشخص می کند. شما می توانید یک نام و یک نماد سفارشی برای Placemark مشخص کنید و همچنین می توانید سایر عناصر هندسی را به آن اضافه کنید.

فایل KML Samples را در Google Earth باز کنید و زیرپوشه Placemarks را گسترش دهید. این پوشه شامل سه نوع مکان نشان مختلف است: ساده ، شناور و اکسترود شده . کد KML برای نشانک مکان ساده به این صورت است:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>Simple placemark</name>
<description>Attached to the ground. Intelligently places itself at the height of the underlying terrain.</description>
<Point>
<coordinates>-122.0822035425683,37.42228990140251,0</coordinates>
</Point>
</Placemark> </kml>

ساختار این فایل به شرح زیر است:

  • یک هدر XML. این خط 1 در هر فایل KML است. هیچ فاصله یا کاراکتر دیگری نمی تواند قبل از این خط ظاهر شود.
  • یک اعلان فضای نام KML. این خط 2 در هر فایل KML 2.2 است.
  • یک شی Placemark که حاوی عناصر زیر است:
    • نامی که به عنوان برچسب Placemark استفاده می شود
    • توصیفی که در "بالون" پیوست شده به Placemark ظاهر می شود
    • نقطه ای که موقعیت مکانی را بر روی سطح زمین مشخص می کند ( طول جغرافیایی، عرض جغرافیایی و ارتفاع اختیاری)

اگر می‌پرسید Placemark کجاست، دقیقاً بالای ساختمان 41 Google است، جایی که ما Google Earth را توسعه دادیم!

چیزی که کاربران معمولاً در Google Earth از آن به عنوان "مکان مکان" تصور می کنند، در واقع یک عنصر <Placemark> با فرزند <Point> در KML است. علامت مکان نقطه ای تنها راه برای کشیدن نماد و برچسب در نمایشگر سه بعدی Google Earth است. به‌طور پیش‌فرض، نماد، پین زرد آشنا است. در KML، یک <Placemark> می تواند شامل یک یا چند عنصر هندسی باشد، مانند LineString، Polygon یا Model. اما فقط یک <Placemark> با یک نقطه می تواند نماد و برچسب داشته باشد. نقطه برای قرار دادن نماد استفاده می شود، اما هیچ نمایش گرافیکی از خود نقطه وجود ندارد.

HTML توصیفی در مکان‌ها

فایل KML Samples نمونه ای از تقریباً هر کاری که می توانید با متن Placemark انجام دهید دارد. می توانید پیوندها، اندازه فونت ها، سبک ها و رنگ ها را اضافه کنید و تراز متن و جداول را مشخص کنید. اگر می‌خواهید فهرست کامل را ببینید، نمونه «HTML توصیفی» (در پوشه Styles and Markup) را در یک ویرایشگر متن کپی و جای‌گذاری کنید.

نشانه گذاری خودکار در Google Earth (نسخه 4.0 و جدیدتر)

Google Earth 4.0 دارای یک ویژگی نشانه گذاری خودکار است که به طور خودکار متنی مانند www.google.com را به لینک های فعال تبدیل می کند که کاربر می تواند روی آنها کلیک کند. متن داخل تگ <description>، تگ <Snippet> و عنصر <text> <BalloonStyle> همگی به طور خودکار به لینک های HTTP استاندارد تبدیل می شوند. نیازی نیست خودتان تگ های <a href= ...> را اضافه کنید.

با استفاده از عنصر CDATA

اگر می خواهید HTML استاندارد را در یک تگ <description> بنویسید، می توانید آن را در داخل یک تگ CDATA قرار دهید. اگر این کار را نکنید، براکت های زاویه باید به عنوان ارجاعات موجود نوشته شوند تا از تجزیه نادرست HTML Google Earth جلوگیری شود (به عنوان مثال، نماد > به صورت &gt و نماد < به صورت &lt; نوشته می شود). این یک ویژگی استاندارد XML است و مختص Google Earth نیست.

تفاوت بین نشانه گذاری HTML با تگ های CDATA و بدون CDATA را در نظر بگیرید. ابتدا، در اینجا <description> با برچسب های CDATA است:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>CDATA example</name> <description> <![CDATA[ <h1>CDATA Tags are useful!</h1> <p><font color="red">Text is <i>more readable</i> and <b>easier to write</b> when you can avoid using entity references.</font></p> ]]> </description> <Point> <coordinates>102.595626,14.996729</coordinates> </Point> </Placemark> </Document> </kml>

و اینجا <description> بدون تگ CDATA است، به طوری که کاراکترهای خاص باید از ارجاعات موجودیت استفاده کنند:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Entity references example</name> <description> &lt;h1&gt;Entity references are hard to type!&lt;/h1&gt; &lt;p&gt;&lt;font color="green"&gt;Text is &lt;i&gt;more readable&lt;/i&gt; and &lt;b&gt;easier to write&lt;/b&gt; when you can avoid using entity references.&lt;/font&gt;&lt;/p&gt; </description> <Point> <coordinates>102.594411,14.998518</coordinates> </Point> </Placemark> </Document> </kml>

پوشش های زمینی

پوشش های زمینی شما را قادر می سازد تا یک تصویر را بر روی زمین زمین "پرده" کنید. عنصر <Icon> حاوی پیوند به فایل jpg . با تصویر همپوشانی است. در اینجا نمونه ای از پوشش زمین در فایل نمونه KML است که فوران کوه اتنا را در سال 2001 نشان می دهد:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Folder>
<name>Ground Overlays</name>
<description>Examples of ground overlays</description>
<GroundOverlay>
<name>Large-scale overlay on terrain</name>
<description>Overlay shows Mount Etna erupting on July 13th, 2001.</description>
<Icon>
<href>https://developers.google.com/kml/documentation/images/etna.jpg</href>
</Icon>
<LatLonBox>
<north>37.91904192681665</north>
<south>37.46543388598137</south>
<east>15.35832653742206</east>
<west>14.60128369746704</west>
<rotation>-0.1556640799496235</rotation>
</LatLonBox>
</GroundOverlay>
</Folder> </kml>

توجه داشته باشید که فایل با همان دو خط مثال اول شروع می شود: سربرگ XML و اعلان فضای نام KML.

این مثال از یک پوشه (با عنوان "پوشش های زمین") به عنوان مکانیزمی برای گروه بندی و برچسب گذاری محتویات آن استفاده می کند. به نحوه نمایش پوشه در پانل Places توجه کنید که فایل KML Samples را در Google Earth بارگیری می کنید.

موقعیت یک پوشش زمین توسط تگ <LatLonBox> کنترل می شود. مقادیر مرزی برای عرض جغرافیایی شمالی و جنوبی و طول شرقی و غربی داده شده است. علاوه بر این، مقادیر چرخش برای تصاویری که محور y با شبکه شمال منطبق نیست، داده شده است. این مثال از یک تصویر JPEG برای پوشش استفاده می کند. Google Earth همچنین از فرمت های BMP، GIF، TIFF، TGA و PNG پشتیبانی می کند.

راه ها

انواع مختلفی از مسیرها را می توان در Google Earth ایجاد کرد و به راحتی می توان با داده های خود بسیار خلاق بود. در KML، یک مسیر توسط عنصر <LineString> ایجاد می شود. به مثال "Absolute Extruded" در پوشه Paths نگاهی بیندازید و می توانید ببینید که چگونه شکل توسط کد زیر ایجاد شده است:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document>
<name>Paths</name>
<description>Examples of paths. Note that the tessellate tag is by default
set to 0. If you want to create tessellated lines, they must be authored
(or edited) directly in KML.</description> <Style id="yellowLineGreenPoly">
<LineStyle>
<color>7f00ffff</color>
<width>4</width>
</LineStyle>
<PolyStyle>
<color>7f00ff00</color>
</PolyStyle>
</Style> <Placemark>
<name>Absolute Extruded</name>
<description>Transparent green wall with yellow outlines</description>
<styleUrl>#yellowLineGreenPoly</styleUrl>
<LineString>
<extrude>1</extrude>
<tessellate>1</tessellate>

<altitudeMode>absolute</altitudeMode>
<coordinates> -112.2550785337791,36.07954952145647,2357
-112.2549277039738,36.08117083492122,2357
-112.2552505069063,36.08260761307279,2357
-112.2564540158376,36.08395660588506,2357
-112.2580238976449,36.08511401044813,2357
-112.2595218489022,36.08584355239394,2357
-112.2608216347552,36.08612634548589,2357
-112.262073428656,36.08626019085147,2357
-112.2633204928495,36.08621519860091,2357
-112.2644963846444,36.08627897945274,2357
-112.2656969554589,36.08649599090644,2357 </coordinates>
</LineString> </Placemark>
</Document> </kml>

توجه کنید که چگونه واقعاً فقط یک خط در ارتفاع از سطح زمین کشیده شده است. تگ <tessellate> خط را به تکه های کوچکتر تقسیم می کند و تگ <extrude> خط را تا سطح زمین گسترش می دهد.

چند ضلعی ها

می توانید از Polygons برای ایجاد ساختمان های ساده و اشکال دیگر استفاده کنید. برای مثال، پوشه Polygons را در فایل KML Samples بررسی کنید.

نمونه پنتاگون با کشیدن پوسته های داخلی و خارجی ساده و سپس اکسترود کردن آنها به زمین ایجاد می شود. این هم کد:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Placemark>
<name>The Pentagon</name>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates>
-77.05788457660967,38.87253259892824,100
-77.05465973756702,38.87291016281703,100
-77.05315536854791,38.87053267794386,100
-77.05552622493516,38.868757801256,100
-77.05844056290393,38.86996206506943,100
-77.05788457660967,38.87253259892824,100
</coordinates>
</LinearRing>
</outerBoundaryIs>
<innerBoundaryIs>
<LinearRing>
<coordinates>
-77.05668055019126,38.87154239798456,100
-77.05542625960818,38.87167890344077,100
-77.05485125901024,38.87076535397792,100
-77.05577677433152,38.87008686581446,100
-77.05691162017543,38.87054446963351,100
-77.05668055019126,38.87154239798456,100
</coordinates>
</LinearRing>
</innerBoundaryIs>
</Polygon>
</Placemark> </kml>

2 سند KML پیشرفته

این بخش برخی از عناصر KML را که باید با استفاده از ویرایشگر متن نوشته شوند، مانند سبک‌های اشتراک‌گذاری شده برای هندسه، نمادهای برجسته شده برای علامت‌های مکان، و پوشش‌های صفحه توضیح می‌دهد. نوشتن KML "با دست" کمی پیشرفته‌تر از استفاده از رابط Google Earth برای ایجاد و اصلاح ویژگی‌ها است، اما با کمی تمرین، اکثر کاربران به راحتی می‌توانند فایل‌های KML را برای افزودن این جلوه‌ها ویرایش کنند.

سبک های هندسه

هنگامی که ویژگی‌هایی را در Google Earth ایجاد کردید و کد KML ایجاد شده توسط Google Earth را بررسی کردید، متوجه خواهید شد که چگونه سبک‌ها بخش مهمی از نحوه نمایش داده‌های شما هستند. کاربران قدرتمند می خواهند یاد بگیرند که چگونه سبک های خود را تعریف کنند.

اگر یک Style را در ابتدای یک سند KML تعریف کنید و همچنین یک شناسه برای آن تعریف کنید، می توانید از این سبک در Geometry، Placemarks و Overlays که در جای دیگری از Document تعریف شده اند استفاده کنید. از آنجایی که بیش از یک عنصر می‌تواند از یک سبک استفاده کند، سبک‌هایی که به این روش تعریف و استفاده می‌شوند، سبک‌های اشتراکی نامیده می‌شوند. شما یک Style را یک بار تعریف می کنید، و سپس می توانید چندین بار با استفاده از عنصر <styleUrl> به آن ارجاع دهید. اگر تعریف Style در همان فایل است، قبل از Style ID علامت # قرار دهید. اگر تعریف Style در یک فایل خارجی است، URL کامل را در عنصر <styleUrl> قرار دهید.

فایل KML Samples شامل تعدادی سبک به اشتراک گذاشته شده است که هر کدام با یک شناسه در ابتدای فایل تعریف شده اند. توجه داشته باشید که اگر شناسه‌های شما رشته‌های توصیفی باشند، ساده‌ترین کار است تا بتوانید به راحتی بفهمید تأثیر آنها چیست. در اینجا یک مثال از یک سبک ("transBluePoly") است که یک رنگ آبی شفاف برای چهره های چند ضلعی و یک عرض خط 1.5 (و رنگ پیش فرض سفید) برای لبه های چند ضلعی تعریف می کند. این سبک توسط ساختمان 41 در مثال Google Campus (در پوشه Polygons) استفاده می شود:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<Style id="transBluePoly">
<LineStyle>
<width>1.5</width>
</LineStyle>
<PolyStyle>
<color>7dff0000</color>
</PolyStyle>
</Style> <Placemark>
<name>Building 41</name>
<styleUrl>#transBluePoly</styleUrl>
<Polygon>
<extrude>1</extrude>
<altitudeMode>relativeToGround</altitudeMode>
<outerBoundaryIs>
<LinearRing>
<coordinates> -122.0857412771483,37.42227033155257,17
-122.0858169768481,37.42231408832346,17
-122.085852582875,37.42230337469744,17
-122.0858799945639,37.42225686138789,17
-122.0858860101409,37.4222311076138,17
-122.0858069157288,37.42220250173855,17
-122.0858379542653,37.42214027058678,17
-122.0856732640519,37.42208690214408,17
-122.0856022926407,37.42214885429042,17
-122.0855902778436,37.422128290487,17
-122.0855841672237,37.42208171967246,17
-122.0854852065741,37.42210455874995,17
-122.0855067264352,37.42214267949824,17
-122.0854430712915,37.42212783846172,17
-122.0850990714904,37.42251282407603,17
-122.0856769818632,37.42281815323651,17
-122.0860162273783,37.42244918858722,17
-122.0857260327004,37.42229239604253,17
-122.0857412771483,37.42227033155257,17 </coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</Placemark>
</Document>
</kml>

توجه داشته باشید که عنصر <styleUrl> فرزند <Placemark> است (نه هندسه ای که بر آن تأثیر می گذارد).

سبک برای نمادهای برجسته

"نماد برجسته" در پوشه Styles and Markup به شما نشان می دهد که چگونه با KML یک افکت roll-over ایجاد کنید. Document دو سبک را تعریف می کند، یکی برای "normalPlacemark" و دیگری برای "HighlightPlacemark" (نشان داده می شود وقتی مکان نما روی نماد می چرخد). عنصر <StyleMap> دارای دو جفت کلید/مقدار است که هر سبک آیکون را به یک وضعیت نماد ترسیم می کند. دو حالت نماد وجود دارد: عادی و برجسته .

مراحل اساسی نشان داده شده در اینجا به شرح زیر است:

  1. برای نماد معمولی Placemark یک <Style> تعریف کنید و یک شناسه به آن اختصاص دهید (در اینجا "Normal Placemark"). <Style> شامل یک <Icon> با <href> برای تصویر واقعی برای استفاده است، همانطور که در زیر نشان داده شده است.
  2. برای نماد برجسته Placemark یک <Style> تعریف کنید و یک شناسه به آن اختصاص دهید (در اینجا، "highlightPlacemark").
  3. عنصر <StyleMap> را ایجاد کنید و یک شناسه به آن اختصاص دهید ("exampleStyleMap"). علامت مکان به این شناسه اشاره خواهد کرد.
  4. در عنصر <StyleMap>، "#normalPlacemark" را برای حالت عادی مشخص کنید.
  5. در عنصر <StyleMap>، "#highlightPlacemark" را برای حالت برجسته مشخص کنید.
  6. در Placemark، یک عنصر <styleUrl> اضافه کنید که به "#exampleStyleMap" اشاره دارد.
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Highlighted Icon</name>
<description>Place your mouse over the icon to see it display the new icon</description>
<Style id="highlightPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/red-stars.png</href>
</Icon>
</IconStyle>
</Style>
<Style id="normalPlacemark">
<IconStyle>
<Icon>
<href>http://maps.google.com/mapfiles/kml/paddle/wht-blank.png</href>
</Icon>
</IconStyle>
</Style>
<StyleMap id="exampleStyleMap">
<Pair>
<key>normal</key>
<styleUrl>#normalPlacemark</styleUrl>
</Pair>
<Pair>
<key>highlight</key>
<styleUrl>#highlightPlacemark</styleUrl>
</Pair>
</StyleMap>
<Placemark>
<name>Roll over this icon</name>
<styleUrl>#exampleStyleMap</styleUrl>
<Point>
<coordinates>-122.0856545755255,37.42243077405461,0</coordinates>
</Point>
</Placemark>
</Document>
</kml>

پوشش های صفحه نمایش

پوشش‌های صفحه را نمی‌توان مستقیماً در Google Earth ایجاد کرد و بنابراین ایجاد آن‌ها از پوشش‌های زمینی دشوارتر است. مجموعه ای جامع از نمونه ها در پوشه Screen Overlays در فایل KML Samples موجود است.

به عنوان مثال، پوشه «موقعیت‌یابی مطلق: بالا سمت چپ» را در فایل نمونه‌های KML فعال کنید و یک همپوشانی روی صفحه نمایش در سمت چپ بالای پنجره مشاهده خواهید دید. این با کد KML زیر ایجاد شده است:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<ScreenOverlay>
<name>Absolute Positioning: Top left</name>
<Icon>
<href>http://developers.google.com/kml/documentation/images/top_left.jpg</href>
</Icon>
<overlayXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<screenXY x="0" y="1" xunits="fraction" yunits="fraction"/>
<rotationXY x="0" y="0" xunits="fraction" yunits="fraction"/>
<size x="0" y="0" xunits="fraction" yunits="fraction"/>
</ScreenOverlay>
</kml>

تعیین موقعیت با نگاشت یک نقطه در تصویر مشخص شده توسط <overlayXY> به نقطه ای از صفحه که توسط <screenXY> مشخص شده است، کنترل می شود. در این حالت، گوشه سمت چپ بالای تصویر (0،1) با همان نقطه روی صفحه منطبق شده است.

نمونه های دیگر موجود در پوشه را بررسی کنید تا ببینید چگونه می توان موقعیت های ثابت دیگر را به دست آورد و تصاویری با اندازه پویا با اندازه صفحه ایجاد کرد. (توجه داشته باشید که xunits و yunits را می توان به عنوان "پیکسل" برای کنترل دقیق نیز مشخص کرد.) برای جزئیات بیشتر، به مرجع KML 2.2 مراجعه کنید.

یک پیوند شبکه حاوی یک عنصر <Link> با یک <href> (یک مرجع فرامتن) است که یک فایل را بارگذاری می کند. <href> می تواند یک مشخصات فایل محلی یا یک URL مطلق باشد. با وجود نام، <NetworkLink> لزوماً فایل ها را از شبکه بارگیری نمی کند.

<href> در یک پیوند مکان هر یک از موارد زیر را مشخص می کند:

  • یک فایل تصویری که توسط نمادها در سبک‌های نماد، همپوشانی‌های زمین و همپوشانی‌های صفحه استفاده می‌شود
  • یک فایل مدل که در عنصر <Model> استفاده می شود
  • یک فایل KML یا KMZ که توسط یک پیوند شبکه بارگیری شده است

فایل مشخص شده می تواند یک فایل محلی یا یک فایل روی یک سرور راه دور باشد. در ساده‌ترین شکل، پیوندهای شبکه راهی مفید برای تقسیم یک فایل KML بزرگ به فایل‌های کوچکتر و قابل مدیریت‌تر در همان رایانه است.

تا کنون، تمام مثال‌های ما مستلزم این بوده است که کد KML از دستگاه محلی به Google Earth تحویل داده شود. پیوندهای شبکه به شما قدرت ارائه محتوا را از یک مکان راه دور می دهد و معمولاً برای توزیع داده ها به تعداد زیادی از کاربران استفاده می شود. به این ترتیب، اگر داده ها نیاز به اصلاح داشته باشند، فقط باید در محل منبع تغییر داده شوند و همه کاربران به طور خودکار داده های به روز شده را دریافت می کنند.

اسکریپت CGI برای KML

علاوه بر اشاره به فایل‌های حاوی داده‌های ایستا، <href> پیوند شبکه می‌تواند به داده‌هایی اشاره کند که به صورت پویا تولید می‌شوند - به عنوان مثال، توسط یک اسکریپت CGI واقع در یک سرور شبکه. با کمی دانش در مورد یک زبان برنامه نویسی مانند PHP، Python یا Perl، می توانید اسکریپتی ایجاد کنید که یک جریان (یا فایل) از داده های KML را به هر پیوند شبکه تحویل دهد.

دو چیز برای تحویل KML از طریق یک شبکه CGI ضروری است:

هنگامی که تماسی از مشتری (Google Earth) با سرور برقرار می شود، سرور باید (1) کد پاسخ HTTP 200 را برگرداند و (2) نوع محتوای پاسخ را روی text/plain یا application/vnd.google-earth.kml+xml.

پاسخ باید KML معتبر باشد. برای برنامه های پیچیده، مدیریت صحیح خطا بسیار مهم است.

نکته: یک راه ساده برای رسیدگی به خطاها، تجزیه خطای سرور به عنوان متن نام پوشه است. برای مثال، می‌توانید از سرور <Folder><name>database inaccessible</name></Folder> را به‌عنوان یک رشته بازگردانید. این آموزنده تر (و کاربر پسندتر) است تا اینکه اجازه دهید اتصال قطع شود.

مثال‌های زیر از پایتون استفاده می‌کنند، اما در هر زبان اسکریپتی دیگری به یک اندازه معتبر هستند.

ایجاد یک مکان نشان تصادفی

اسکریپت پایتون زیر مقادیر صحیح تصادفی برای طول و عرض جغرافیایی ایجاد می کند و سپس آن مقادیر را در عنصر <coordinates> یک <Point> وارد می کند. هر زمان که پیوند شبکه به روز می شود، اسکریپت پایتون دوباره اجرا می شود و KML با مقادیر طول و عرض جغرافیایی جدید تولید می کند.

#!/usr/bin/python

import random

latitude = random.randrange(-90, 90)
longitude = random.randrange(-180, 180)
kml = (
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>Random Placemark</name>\n'
   '<Point>\n'
   '<coordinates>%d,%d</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(longitude, latitude)
print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

در اینجا نمونه ای از یک فایل KML حاوی پیوند شبکه است که این اسکریپت پایتون را بارگیری می کند:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 1</description>
<NetworkLink>
<name>Random Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>A simple server-side script that generates a new random
placemark on each call</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/randomPlacemark.py</href>
</Link>
</NetworkLink>
</Folder>
</kml>

پرس و جوهای بازخوانی مبتنی بر نمایش

یک پیوند شبکه استاندارد یک پیوند یک طرفه است: داده ها فقط از سرور به Google Earth جریان می یابد. تازه سازی مبتنی بر نما ارتباط دو طرفه را امکان پذیر می کند. هنگامی که بازخوانی مبتنی بر نمایش فعال است، Google Earth مختصات نما را در یک زمان مشخص به سرور برمی‌گرداند. این ممکن است هر n ثانیه، دقیقه یا ساعت یکبار باشد یا زمانی که زمان مشخصی از توقف حرکت نما گذشته باشد. به <viewRefreshMode> در مرجع KML 2.2 مراجعه کنید.

مختصات با استفاده از HTTP GET که مختصات را به صورت زیر اضافه می کند به سرور برگردانده می شود (این اطلاعات جعبه مرزی پیش فرض است):

GET /path/to/server/script/query?BBOX=[longitude_west, latitude_south, longitude_east, latitude_north] HTTP/1.1

اگر درخواست در حالی انجام شود که کاربر از بالا به سانفرانسیسکو نگاه می کند، مختصات ممکن است به صورت زیر باشد:

GET /path/to/server/script/query?BBOX=-122.497790,37.730385,-122.380087,37.812331 HTTP/1.1

این ویژگی را می توان برای برخی از برنامه های بسیار خلاقانه استفاده کرد، اما برای شروع، یک مثال ساده در زیر ارائه شده است.

ردیابی یک نقطه مستقیماً زیر نظر شما

اسکریپت پایتون سمت سرور زیر پیام برگشت ارسال شده توسط Google Earth را تجزیه می کند و با علامت مکان در مرکز صفحه پاسخ می دهد. هر بار که پیوند شبکه به روز می شود، یک مکان نشان جدید ایجاد می شود.

#!/usr/bin/python

import cgi

url = cgi.FieldStorage()
bbox = url['BBOX'].value
bbox = bbox.split(',')
west = float(bbox[0])
south = float(bbox[1])
east = float(bbox[2])
north = float(bbox[3])

center_lng = ((east - west) / 2) + west
center_lat = ((north - south) / 2) + south

kml = ( 
   '<?xml version="1.0" encoding="UTF-8"?>\n'
   '<kml xmlns="http://www.opengis.net/kml/2.2">\n'
   '<Placemark>\n'
   '<name>View-centered placemark</name>\n'
   '<Point>\n'
   '<coordinates>%.6f,%.6f</coordinates>\n'
   '</Point>\n'
   '</Placemark>\n'
   '</kml>'
   ) %(center_lng, center_lat)

print 'Content-Type: application/vnd.google-earth.kml+xml\n'
print kml

و در اینجا KML برای پیوند شبکه است که اسکریپت پایتون را بارگیری می کند:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Folder>
<name>Network Links</name>
<visibility>0</visibility>
<open>0</open>
<description>Network link example 2</description>
<NetworkLink>
<name>View Centered Placemark</name>
<visibility>0</visibility>
<open>0</open>
<description>The view-based refresh allows the remote server to calculate
the center of your screen and return a placemark.</description>
<refreshVisibility>0</refreshVisibility>
<flyToView>0</flyToView>
<Link>
<href>http://yourserver.com/cgi-bin/viewCenteredPlacemark.py</href>

<refreshInterval>2</refreshInterval>
<viewRefreshMode>onStop</viewRefreshMode>
<viewRefreshTime>1</viewRefreshTime>
</Link>
</NetworkLink>
</Folder>
</kml>

اصل نشان داده شده در این مثال را می توان برای برخی کاربردهای بسیار پیچیده استفاده کرد. به عنوان مثال، اگر پایگاه داده ای از اطلاعات جغرافیایی دارید، می توانید مختصات بیننده را استخراج کنید، برای داده های مربوط به نما با پایگاه داده تماس بگیرید و آن را به عنوان KML به Google Earth برگردانید.

3 نوع KML MIME

هنگام پاسخ به درخواست Google Earth (یا هر مرورگر Earth)، یک سرور KML باید از مجموعه قوانین خاصی پیروی کند تا Google Earth بتواند پاسخ های خود را به درستی تفسیر کند.

به محض موفقیت، سرور باید کد پاسخ HTTP 200 را برگرداند و نوع محتوای پاسخ را بر روی یک نوع MIME مناسب تنظیم کند، همانطور که در اینجا توضیح داده شده است.

Google Earth فایل های KML و KMZ را می خواند. نوع MIME برای فایل های KML است

  • application/vnd.google-earth.kml+xml

نوع MIME برای فایل های KMZ است

  • application/vnd.google-earth.kmz

برای آپاچی، این خطوط را به فایل httpd.conf اضافه کنید:

  • AddType application/vnd.google-earth.kml+xml .kml
  • AddType application/vnd.google-earth.kmz .kmz

برای جزئیات بیشتر در مورد تنظیم انواع MIME در IIS مایکروسافت به مستندات مایکروسافت مراجعه کنید.

متن پاسخ باید حاوی داده‌های معتبر KML، از جمله اعلان XML ( <?xml version="1.0" encoding="UTF-8"?> ) باشد. اگر سرور KML نامعتبر را برگرداند، پیوند شبکه متوقف می‌شود، غیرفعال می‌شود و یک پیام خطا صادر می‌کند.

بعد چه می شود؟

آماده برای بیشتر؟ راهنمای توسعه‌دهنده را بررسی کنید، که ویژگی‌های کلیدی KML را توضیح می‌دهد. همچنین، برای اطلاعات در مورد عناصر خاص، مرجع KML را مرور کنید.