KML वह फ़ाइल फ़ॉर्मैट है जिसका इस्तेमाल Google Earth जैसे अर्थ ब्राउज़र में भौगोलिक डेटा दिखाने के लिए किया जाता है. KML, नेस्ट किए गए एलिमेंट और विशेषताओं के साथ टैग-आधारित स्ट्रक्चर का इस्तेमाल करता है और एक्सएमएल स्टैंडर्ड पर आधारित होता है. सभी टैग केस-सेंसिटिव (बड़े और छोटे अक्षरों में अंतर) होते हैं और ये ठीक वैसे ही दिखने चाहिए जैसे KML रेफ़रंस में दिए गए हैं. रेफ़रंस से पता चलता है कि कौनसे टैग वैकल्पिक हैं. दिए गए एलिमेंट में, टैग उसी क्रम में दिखने चाहिए जिस क्रम में वे रेफ़रंस में दिखाए गए हैं. अगर आप KML के लिए नए हैं, तो KML फ़ाइल की बुनियादी संरचना और सबसे ज़्यादा इस्तेमाल किए जाने वाले टैग के बारे में जानने के लिए इस दस्तावेज़ और इसके साथ मिलने वाली नमूनों की फ़ाइलों (SamplesInEarth) को एक्सप्लोर करें. पहले सेक्शन में उन सुविधाओं के बारे में बताया गया है जिन्हें Google Earth यूज़र इंटरफ़ेस के साथ बनाया जा सकता है. इन सुविधाओं में शामिल हैं प्लेसमार्क, विवरण, ग्राउंड ओवरले, पाथ, और पॉलीगॉन. दूसरे सेक्शन में उन सुविधाओं के बारे में बताया गया है जिनके लिए टेक्स्ट एडिटर की मदद से KML फ़ाइल बनाना ज़रूरी होता है. जब टेक्स्ट फ़ाइल को .KML या .KMZ एक्सटेंशन के साथ सेव किया जाता है, तो Earth ब्राउज़र उसे दिखाने का तरीका जानते हैं. |
सलाह: अगर आपको Google Earth में किसी सुविधा के लिए KML "कोड" देखना है, तो इस सुविधा पर दायां क्लिक करें और 'कॉपी करें' चुनें. इसके बाद क्लिपबोर्ड के कॉन्टेंट को किसी भी टेक्स्ट एडिटर में चिपकाएं. Google Earth में दिखने वाली विज़ुअल सुविधा, इसके KML टेक्स्ट में बदल जाती है. इस सुविधा के साथ प्रयोग ज़रूर करें.
यहां दिए गए सभी उदाहरण, KML सैंपल फ़ाइल में मौजूद हैं. Google Earth में उदाहरण देखने के लिए उस फ़ाइल को डाउनलोड करके शुरुआत करें.
अधिक जानकारी के लिए
KML 2.2 संदर्भ से KML फ़ाइल फ़ॉर्मैट की जानकारी मिलती है. अगर आपको एक्सएमएल के बारे में जानकारी है, तो आप केएमएल 2.2 स्कीमा में भी दिलचस्पी ले सकते हैं.
KML की कुछ मुख्य सुविधाओं का इस्तेमाल करने के तरीके पर चर्चा के लिए, डेवलपर गाइड देखें.
विषय सूची
बेसिक KML दस्तावेज़
सबसे आसान KML दस्तावेज़ वे हैं जिन्हें सीधे Google Earth में लिखा जा सकता है—इसका मतलब है कि आपको टेक्स्ट एडिटर में किसी भी KML में बदलाव करने या उसे बनाने की ज़रूरत नहीं है. प्लेसमार्क, ग्राउंड ओवरले, पाथ, और पॉलीगॉन, सीधे Google Earth में लिखे जा सकते हैं.
प्लेसमार्क
प्लेसमार्क Google Earth में सबसे ज़्यादा इस्तेमाल की जाने वाली सुविधाओं में से एक है. यह पृथ्वी की सतह पर एक स्थिति को चिह्नित करता है, जिसमें पीले पुशपिन को आइकॉन के रूप में इस्तेमाल किया जाता है. सबसे आसान प्लेसमार्क में, सिर्फ़ एक <Point> एलिमेंट शामिल है जो प्लेसमार्क की जगह के बारे में बताता है. आप प्लेसमार्क के लिए एक नाम और एक कस्टम आइकन तय कर सकते हैं, और आप इसमें अन्य ज्यामिति तत्व भी जोड़ सकते हैं.
Google Earth में KML सैंपल फ़ाइल खोलें और प्लेसमार्क सबफ़ोल्डर को बड़ा करें. इस फ़ोल्डर में तीन अलग-अलग तरह के प्लेसमार्क हैं: आसान, फ़्लोटिंग, और हटाया गया. सामान्य प्लेसमार्क के लिए, 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>
इस फ़ाइल की बनावट नीचे दी गई है:
- एक्सएमएल हेडर. यह हर KML फ़ाइल में पंक्ति 1 है. इस लाइन से पहले कोई खाली जगह या दूसरे वर्ण नहीं दिख सकते.
- KML नेमस्पेस का एलान. हर KML 2.2 फ़ाइल में यह लाइन 2 है.
- प्लेसमार्क ऑब्जेक्ट में ये एलिमेंट होते हैं:
- प्लेसमार्क के लेबल के तौर पर इस्तेमाल किया जाने वाला नाम
- प्लेसमार्क के साथ "गुब्बारा" में दिखाई देने वाला ब्यौरा
- पॉइंट जो पृथ्वी की सतह पर प्लेसमार्क की जगह के बारे में बताता है (देशांतर, अक्षांश, और वैकल्पिक ऊंचाई)
अगर आप सोच रहे थे कि प्लेसमार्क कहां है, तो यह Google के बिल्डिंग 41 के ऊपर है, जहां हमने Google Earth को डेवलप किया था!
उपयोगकर्ता आम तौर पर, Google Earth में "प्लेसमार्क" के तौर पर देखते हैं. यह असल में KML में <Point> चाइल्ड वाला <प्लेसमार्क> एलिमेंट होता है. Google Earth के 3D व्यूअर में आइकॉन और लेबल बनाने के लिए, पॉइंट प्लेसमार्क ही एक तरीका है. डिफ़ॉल्ट रूप से, आइकॉन जाना-पहचाना पीला पुशपिन होता है. KML में, <प्लेसमार्क> में एक या ज़्यादा ज्यामिति तत्व हो सकते हैं, जैसे कि लाइनस्ट्रिंग, पॉलीगॉन या मॉडल. हालांकि, सिर्फ़ पॉइंट वाले <प्लेसमार्क> में आइकॉन और लेबल हो सकता है. इस पॉइंट का इस्तेमाल आइकॉन को रखने के लिए किया जाता है, लेकिन पॉइंट को ग्राफ़िक के तौर पर नहीं दिखाया जाता.
प्लेसमार्क में जानकारी देने वाला एचटीएमएल
KML नमूने की फ़ाइल में प्लेसमार्क टेक्स्ट की मदद से किए जा सकने वाले करीब-करीब सभी काम के उदाहरण होते हैं. इसमें लिंक, फ़ॉन्ट साइज़, स्टाइल, और रंग जोड़े जा सकते हैं. साथ ही, टेक्स्ट अलाइनमेंट और टेबल की जानकारी भी दी जा सकती है. अगर आपको पूरी सूची देखनी है, तो "जानकारी देने वाला एचटीएमएल" प्लेसमार्क का उदाहरण कॉपी करें और उसे टेक्स्ट एडिटर में चिपकाएं (स्टाइल और मार्कअप फ़ोल्डर में).
Google Earth में ऑटो-मार्कअप (रिलीज़ 4.0 और उसके बाद के वर्शन)
Google Earth 4.0 में एक ऑटो-मार्कअप सुविधा है, जो www.google.com जैसे टेक्स्ट को सक्रिय हाइपरलिंक में बदल देती है. इसे उपयोगकर्ता क्लिक कर सकता है. <description> टैग, <snippet> टैग, और <BaloonStyle> के <text> एलिमेंट में मौजूद टेक्स्ट, अपने-आप स्टैंडर्ड एचटीटीपी हाइपरलिंक में बदल जाते हैं. आपको <a href= ...> टैग को खुद जोड़ने की ज़रूरत नहीं है.
CDATA एलिमेंट का इस्तेमाल करना
अगर आप <description> टैग के अंदर स्टैंडर्ड एचटीएमएल लिखना चाहते हैं, तो आप उसे एक CDATA टैग के अंदर रख सकते हैं. अगर आप ऐसा नहीं करते हैं, तो 'ऐंगल ब्रैकेट' को इकाई के रेफ़रंस के तौर पर लिखा जाना चाहिए, ताकि Google Earth, एचटीएमएल को गलत तरीके से पार्स न कर सके. उदाहरण के लिए, > सिंबल को > और < के तौर पर < लिखा जाता है. यह एक्सएमएल की स्टैंडर्ड सुविधा है और यह Google Earth के लिए यूनीक नहीं है.
CDATA टैग के साथ और CDATA के बिना एचटीएमएल मार्कअप के बीच के अंतर पर विचार करें. सबसे पहले, CDATA टैग के साथ <description> ये है:
<?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>
और यहां CDATA टैग के बिना <description> दिया गया है, ताकि खास वर्णों को इकाई के संदर्भ का इस्तेमाल करना चाहिए:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"> <Document> <Placemark> <name>Entity references example</name> <description> <h1>Entity references are hard to type!</h1> <p><font color="green">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.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>
ध्यान दें कि फ़ाइल की शुरुआत दो उदाहरणों से होती है: एक्सएमएल हेडर और KML नेमस्पेस का एलान.
इस उदाहरण में, कॉन्टेंट को ग्रुप करने और उसे लेबल करने के लिए, फ़ोल्डर (जिसका शीर्षक “ग्राउंड ओवरले” है) का इस्तेमाल किया गया है. ध्यान दें कि जब आप Google Earth में KML नमूने फ़ाइल लोड करते हैं, तो फ़ोल्डर की 'जगहें' पैनल में कैसा दिखता है.
ग्राउंड ओवरले की स्थिति को <LatLonBox> टैग से कंट्रोल किया जाता है. सीमा वाले उत्तर और दक्षिण देशांतर और पूर्व और पश्चिम देशांतर के लिए दिए गए होते हैं. इसके अलावा, रोटेशन की वैल्यू उन इमेज के लिए दी जाती हैं जिनके y-ऐक्सिस ग्रिड के उत्तर में नहीं होते. इस उदाहरण में, ओवरले के लिए JPEG इमेज का इस्तेमाल किया गया है. Google Earth में, BMP, GIF, TIFF, TGA, और PNG फ़ॉर्मैट भी इस्तेमाल किए जा सकते हैं.
पाथ
Google Earth में कई अलग-अलग तरह के पाथ बनाए जा सकते हैं. साथ ही, अपने डेटा का इस्तेमाल करके क्रिएटिव होना बहुत आसान है. KML में, पाथ <LineString> एलिमेंट से बनाया जाता है. पाथ फ़ोल्डर में "कुल निकाले गए" उदाहरण पर नज़र डालें और आप देख सकते हैं कि नीचे दिए गए कोड से आकार कैसे जनरेट हुआ है:
<?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> टैग, लाइन को ज़मीन तक फैला देता है.
पॉलीगॉन
आप साधारण इमारतें और अन्य आकार बनाने के लिए पॉलीगॉन का इस्तेमाल कर सकते हैं. उदाहरण के लिए, KML नमूने की फ़ाइल में पॉलीगॉन फ़ोल्डर देखें.
पंचभुज का उदाहरण, सरल अंदरूनी और बाहरी शैल खींचकर और फिर उन्हें ज़मीन पर गिराकर जनरेट किया जाता है. कोड यहां है :
<?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 में सुविधाएं बनाने और Google Earth से जनरेट किए गए KML कोड की जांच करने के बाद, आप देखेंगे कि आपके डेटा को कैसे दिखाया जाता है. जानकार उपयोगकर्ता अपनी खुद की शैली तय करने का तरीका सीखना चाहेंगे.
अगर आप किसी KML दस्तावेज़ की शुरुआत में शैली तय करते हैं और उसके लिए एक आईडी भी तय करते हैं, तो आप इस शैली को दस्तावेज़, कहीं और तय किए गए ज्यामिति, प्लेसमार्क, और ओवरले में इस्तेमाल कर सकते हैं. एक से ज़्यादा एलिमेंट एक ही स्टाइल का इस्तेमाल कर सकते हैं, इसलिए इस तरह से परिभाषित और इस्तेमाल किए गए स्टाइल को शेयर किए गए स्टाइल कहा जाता है. किसी स्टाइल को एक बार तय करें और फिर, <styleUrl> एलिमेंट का इस्तेमाल करके उसका रेफ़रंस कई बार दिया जा सकता है. अगर स्टाइल की परिभाषा एक ही फ़ाइल में है, तो स्टाइल आईडी के आगे # का निशान लगाएं. अगर स्टाइल की परिभाषा बाहरी फ़ाइल में है, तो पूरा यूआरएल <styleUrl> एलिमेंट में शामिल करें.
KML नमूने की फ़ाइल में कई शेयर की गई शैलियां होती हैं, जिनमें हर एक फ़ाइल की शुरुआत में एक आईडी के साथ तय होती है. ध्यान दें कि अगर आपके आईडी ज़्यादा जानकारी देने वाली स्ट्रिंग हैं, तो आप उन्हें आसानी से बता सकते हैं कि उनका क्या असर होता है. यहां पॉलीगॉन के चेहरों के लिए पारदर्शी नीले रंग और पॉलीगॉन के किनारों के लिए 1.5 (और सफ़ेद रंग की डिफ़ॉल्ट) चौड़ाई के लिए पारदर्शी नीला रंग बताया गया है. इस शैली का इस्तेमाल Google परिसर के उदाहरण (पॉलीगॉन फ़ोल्डर में) में बिल्डिंग 41 के लिए किया जाता है:
<?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> तत्व <प्लेसमार्क> का चाइल्ड है (न कि उस ज्यामिति को जो इसे प्रभावित करता है).
हाइलाइट किए गए आइकॉन के स्टाइल (स्टाइल)
स्टाइल और मार्कअप फ़ोल्डर में मौजूद "हाइलाइट किया गया आइकॉन" आपको बताता है कि KML की मदद से रोल-ओवर इफ़ेक्ट कैसे बनाया जाए. दस्तावेज़ दो शैलियों को परिभाषित करता है, एक "सामान्यप्लेसमार्क" के लिए और एक "हाइलाइट प्लेसमार्क" के लिए (जब कर्सर आइकॉन पर घूमता है). <StyleMap> एलिमेंट में दो कुंजी/वैल्यू पेयर होते हैं, जो हर आइकॉन स्टाइल को आइकॉन की स्थिति पर मैप करते हैं. आइकॉन की दो स्थितियां होती हैं: सामान्य और हाइलाइट.
यहां दिखाए गए बुनियादी चरण इस तरह हैं:
- प्लेसमार्क के सामान्य आइकॉन के लिए एक <Style> तय करें और उसे एक आईडी असाइन करें (यहां, "सामान्य प्लेसमार्क"). <Style> में इस्तेमाल होने वाली असल इमेज के लिए <href> के साथ <Icon> दिया गया है, जैसा कि नीचे दिखाया गया है.
- 'प्लेसमार्क' के हाइलाइट आइकॉन के लिए <स्टाइल> तय करें और उसे एक आईडी असाइन करें (यहां, "highlighthighlight" को हाइलाइट करें).
- <StyleMap> एलिमेंट बनाएं और उसमें एक आईडी असाइन करें ("exampleStyleMap"). प्लेसमार्क इस आईडी को दिखाएगा.
- <StyleMap> एलिमेंट में, सामान्य स्थिति के लिए "#normalप्लेसमार्क" तय करें.
- <StyleMap> एलिमेंट में, highlight की स्थिति के लिए "#highlightPLACES" बताएं.
- प्लेसमार्क में, <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 में सीधे नहीं लिखे जा सकते और इसलिए ग्राउंड ओवरले की तुलना में इन्हें बनाना ज़्यादा मुश्किल होता है. नमूनों के ज़्यादा बेहतर संग्रह को KML नमूने की फ़ाइल के स्क्रीन ओवरले फ़ोल्डर में शामिल किया जाता है.
उदाहरण के तौर पर, 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>
जगह की जानकारी को कंट्रोल करने के लिए, इमेज में दिख रहे किसी पॉइंट को < ओवरलेXY> की मदद से स्क्रीन पर दिखाए गए पॉइंट से मैप किया जाता है. इस मामले में, इमेज (0,1) के सबसे ऊपर बाएं कोने को स्क्रीन पर एक ही पॉइंट से जोड़ा जाता है.
फ़ोल्डर में दिए गए अन्य उदाहरणों की जांच करके जानें कि अन्य तय स्थानों को हासिल करने और स्क्रीन आकार के अनुसार डायनैमिक आकार वाली इमेज बनाने का तरीका क्या है. (ध्यान रखें कि ज़्यादा सटीक कंट्रोल के लिए, xunits और yunits को "pixel" के तौर पर भी बताया जा सकता है.) ज़्यादा जानकारी के लिए, KML 2.2 संदर्भ देखें.
नेटवर्क लिंक
नेटवर्क लिंक में, <href> (हाइपरटेक्स्ट रेफ़रंस) वाला ऐसा <Link> एलिमेंट होता है जिससे फ़ाइल लोड होती है. <href> एक स्थानीय फ़ाइल की विशेषताएं या संपूर्ण URL हो सकता है. <NetworkLink> नाम होने के बावजूद, यह ज़रूरी नहीं है कि सभी फ़ाइलें नेटवर्क से लोड हों.
लिंक में <href>, इनमें से किसी की जगह की जानकारी देता है:
- आइकॉन स्टाइल, ग्राउंड ओवरले, और स्क्रीन ओवरले में इस्तेमाल की जाने वाली इमेज फ़ाइल
- <Model> एलिमेंट में इस्तेमाल की गई मॉडल फ़ाइल
- नेटवर्क लिंक से लोड की गई KML या KML फ़ाइल
बताई गई फ़ाइल, लोकल फ़ाइल या रिमोट सर्वर पर मौजूद फ़ाइल हो सकती है. अपने सबसे सामान्य रूप में, नेटवर्क लिंक एक बड़ी KML फ़ाइल को एक ही कंप्यूटर पर छोटी, प्रबंधित करने लायक ज़्यादा फ़ाइलों में बांटने का उपयोगी तरीका है.
अब तक के हमारे सभी उदाहरणों के लिए यह ज़रूरी था कि KML कोड स्थानीय मशीन से Google Earth पर भेजा जाए. नेटवर्क लिंक से आपको किसी रिमोट लोकेशन से कॉन्टेंट दिखाने की सुविधा मिलती है. आम तौर पर, इसका इस्तेमाल कई उपयोगकर्ताओं को डेटा देने के लिए किया जाता है. इस तरह से, अगर डेटा में बदलाव करने की ज़रूरत है, तो इसे सिर्फ़ स्रोत की जगह पर बदलना होगा और सभी उपयोगकर्ताओं को अपडेट किया गया डेटा अपने-आप मिल जाएगा.
KML के लिए CGI स्क्रिप्टिंग
स्टैटिक डेटा वाली फ़ाइलों के अलावा, नेटवर्क लिंक का <href> डाइनैमिक रूप से जनरेट होने वाले डेटा पर भी ले जा सकता है. उदाहरण के लिए, नेटवर्क सर्वर पर मौजूद CGI स्क्रिप्ट से. PHP, Python या Perl जैसी स्क्रिप्टिंग भाषा की कुछ जानकारी के साथ, आप एक स्क्रिप्ट बना सकते हैं और प्रत्येक नेटवर्क लिंक को KML डेटा की स्ट्रीम (या फ़ाइल) भेज सकते हैं.
CGI नेटवर्क से KML डिलीवर करने के लिए दो बातें ज़रूरी हैं:
क्लाइंट (Google Earth) से सर्वर को कॉल करने पर, सर्वर को
(1) एचटीटीपी 200 का रिस्पॉन्स कोड दिखाना चाहिए और (2) रिस्पॉन्स का कॉन्टेंट टाइप text/plain
या application/vnd.google-earth.kml+xml.
पर सेट करना होगा
जवाब एक मान्य KML होना चाहिए. जटिल ऐप्लिकेशन के लिए, सही गड़बड़ी को ठीक करना बहुत ज़रूरी है.
सलाह: गड़बड़ियों को ठीक करने का आसान तरीका यह है कि सर्वर की गड़बड़ी को फ़ोल्डर के नाम के तौर पर, टेक्स्ट के तौर पर पार्स किया जाए. उदाहरण के लिए, आप सर्वर से एक स्ट्रिंग के रूप में <Folder><name>database inaccessible</name></Folder>
ला सकते हैं. यह जानकारी, लोगों को ऐप्लिकेशन से कनेक्ट होने की जानकारी देने से ज़्यादा जानकारी देने के साथ-साथ उनके काम की भी है.
नीचे दिए गए उदाहरण Python का इस्तेमाल करते हैं, लेकिन वे किसी दूसरी स्क्रिप्टिंग भाषा में भी मान्य हैं.
रैंडम प्लेसमार्क जनरेट करना
नीचे दी गई Python स्क्रिप्ट, अक्षांश और देशांतर के लिए किसी भी क्रम में पूर्णांक वैल्यू जनरेट करती है. इसके बाद, उन वैल्यू को <Point> के <निर्देशांक> एलिमेंट में डाल देती है. नेटवर्क लिंक रीफ़्रेश होने पर, Python स्क्रिप्ट फिर से चलती है और नए अक्षांश और देशांतर वैल्यू के साथ 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 फ़ाइल का उदाहरण दिया गया है जो इस Python स्क्रिप्ट को लोड करती है:
<?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 सेकंड, मिनट या घंटे हो सकता है या एक बार व्यू का चलना बंद होने के बाद एक तय समय बीत सकता है. KML 2.2 संदर्भ में <viewरीफ़्रेशMode> देखें.
निर्देशांकों को एक एचटीटीपी 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
इस सुविधा का उपयोग कुछ बहुत क्रिएटिव ऐप्लिकेशन के लिए किया जा सकता है, लेकिन आप शुरुआत करें इसके लिए एक उदाहरण नीचे दिया गया है.
पॉइंट को सीधे अपने व्यू के तहत ट्रैक करना
नीचे दी गई सर्वर-साइड Python स्क्रिप्ट, 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 है जो Python स्क्रिप्ट लोड करता है:
<?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>
इस उदाहरण में दिए गए सिद्धांत का इस्तेमाल, कुछ बेहद जटिल ऐप्लिकेशन के लिए किया जा सकता है. उदाहरण के लिए, अगर आपके पास भौगोलिक जानकारी का डेटाबेस है, तो आप दर्शकों के निर्देशांक निकाल सकते हैं और व्यू के लिए खास डेटा के लिए डेटाबेस को कॉल कर सकते हैं. साथ ही, आप इसे Google Earth पर KML के तौर पर भेज सकते हैं.
3 KML MIME प्रकार
Google Earth (या किसी भी Earth ब्राउज़र) से अनुरोध का जवाब देते समय, KML सर्वर को नियमों के एक खास सेट का पालन करना चाहिए ताकि Google Earth अपने जवाबों को सही तरीके से समझ सके.
काम हो जाने पर, सर्वर को एचटीटीपी 200 का रिस्पॉन्स कोड दिखाना होगा. साथ ही, रिस्पॉन्स का कॉन्टेंट टाइप सही MIME टाइप पर सेट करना होगा, जैसा कि यहां बताया गया है.
Google Earth KML और KML फ़ाइलों को पढ़ता है. KML फ़ाइलों के लिए MIME प्रकार है
application/vnd.google-earth.kml+xml
KML फ़ाइलों के लिए MIME प्रकार है
application/vnd.google-earth.kmz
Apache के लिए, इन लाइनों को httpd.conf फ़ाइल में जोड़ें:
AddType application/vnd.google-earth.kml+xml .kml
AddType application/vnd.google-earth.kmz .kmz
Microsoft के IIS पर MIME टाइप सेट करने के बारे में ज़्यादा जानकारी के लिए Microsoft दस्तावेज़ देखें.
रिस्पॉन्स के मुख्य हिस्से में मान्य KML डेटा शामिल होना चाहिए. इसमें एक्सएमएल एलान (<?xml version="1.0" encoding="UTF-8"?>
) भी शामिल होना चाहिए. अगर सर्वर गलत KML दिखाता है, तो नेटवर्क लिंक बंद हो जाएगा और गड़बड़ी का मैसेज दिखाएगा.
आगे क्या करें?
क्या आप अधिक जानना चाहते हैं? डेवलपर की गाइड देखें, जिसमें KML की मुख्य सुविधाओं के बारे में बताया गया है. साथ ही, खास चीज़ों के बारे में जानकारी के लिए केएमएल रेफ़रंस ब्राउज़ करें.