मैं कई बड़े KML डेटा सेट्स, जो इस क्षेत्र आधारित नेटवर्क-लिंक का एक पदानुक्रम का उपयोग कर सेवा कर रहे हैं है, KML reference में वर्णित हैं:क्षेत्र के आधार पर Google Earth API में नेटवर्क लिंक
networklinks साथ संयोजन के रूप में क्षेत्र का उपयोग करना, आप जिनमें से प्रत्येक एक विशिष्ट उप-क्षेत्र को इंगित करता है, संकेत के एक पदानुक्रम बना सकते हैं।
<viewRefreshMode>
, जैसा कि निम्न केएमएल फ़ाइल में दिखाया गया है, पर एक ऑनऑर्गियन विकल्प है, जो क्षेत्र सक्रिय होने पर केवल क्षेत्र डेटा लोड करने के लिए निर्दिष्ट करता है। यदि आप विस्तार के कई स्तरों के साथ नेस्टेड क्षेत्र प्रदान करते हैं, तो डेटा की बड़ी मात्रा केवल तभी लोड की जाती है जब उपयोगकर्ता का दृष्टिकोण अगले लोड को ट्रिगर करता है।
यह Google धरती में लोड होने पर अच्छी तरह से काम करता है।
मैं अब Google Earth plug-in का उपयोग कर एक आवेदन में इन लोड करने के लिए कामना करता हूं। और मुझे Google Earth API के माध्यम से लोड की गई सामग्री तक पहुंचने की आवश्यकता है; (यानी आवेदन में सामग्री को एकीकृत करने के लिए क्लिक ईवेंट संलग्न करें, शैलियों को बदलें)।
मुद्दा है, मैं नेटवर्क लिंक के लिए एक 'ऑन लोड' घटना के लिए किसी भी संदर्भ नहीं मिला है। मेरे मन में, जिस तरह से यह काम होता है: एपीआई के माध्यम से
- लोड उच्च-स्तरीय नेटवर्क लिंक, एक कॉल-बैक समारोह जो जब नेटवर्क लिंक भरी हुई है सक्रिय किया जाएगा संलग्न।
- कॉल-बैक फ़ंक्शन में, नेटवर्क लिंक द्वारा केएमएल को वापस पार्स करें। क्षेत्रीय पदानुक्रम में मध्यवर्ती स्तर के लिए, इस केएमएल में अगले क्षेत्र स्तर के लिए केवल नेटवर्क लिंक होंगे। इन्हें एपीआई के माध्यम से प्लग-इन में लोड करें, फिर उसी कॉल-बैक फ़ंक्शन को निर्दिष्ट करें, जो इन्हें लोड होने पर लागू किया जाएगा (यानी जब उनका क्षेत्र दृश्यमान हो)।
- आखिरकार, एम एल वास्तविक 'सामग्री' में शामिल होंगे लौट आए। इस चरण में हम किसी भी वांछित संशोधन करने के बाद वास्तविक सामग्री (यानी प्लेसमार्क) को प्लग-इन में लोड करते हैं (उदा। ईवेंट-श्रोताओं को जोड़ना, शैलियों को सेट करना आदि)।
मुझे लगता है कि जावास्क्रिप्ट निम्नलिखित की तरह कुछ दिखता है।
कृपया ध्यान दें: यह मेरे प्रश्न को समझने में सहायता करने के लिए सिर्फ एक मोटा स्केच है। मैं कर रहा हूँ नहीं क्यों इस कोड काम नहीं करता पूछ।
//create network link
var networkLink = ge.createNetworkLink("");
networkLink.setName("Regionated hierarchy root");
// create a Link object
//the network-links contained in the kml that will be returned in this file
//are region-based; they will only be loaded when the user zooms into the relevant
//region.
var link = ge.createLink("");
link.setHref("http://foo.com/regionatedRoot.kml");
// attach the Link to the NetworkLink
networkLink.setLink(link);
//specify the callback function to be invoked when the network link is loaded
//this is is the part that doesn't actually exist; pure fiction...
networkLink.onLoad = networkLinkLoaded;
// add the NetworkLink feature to Earth
ge.getFeatures().appendChild(networkLink);
// function which will be invoked when a network-link is loaded
// i.e. when its region becomes active
function networkLinkLoaded(kml) {
//parse the kml returned for child network links,
//this will create the network link KmlObject, with a
//region specified on it.
for (childNetworkLink in parseNetworkLinks(kml)) {
//and append them, again hooking up the call-back
childNetworkLink.onLoad = networkLinkLoaded;
ge.getFeatures().appendChild(childNetworkLink);
}
//if the user has zoomed in far enough, then the kml returned will
//contain the actual content (i.e. placemarks).
//parse the kml returned for content (in this case placemarks)
for (placemark in parsePlacemarks(kml)) {
//here we would attach event-listeners to the placemark
ge.getFeatures().appendChild(placemark);
}
}
क्या यह संभव है?
क्या मैंने अपनी सोच में गलत मोड़ लिया है? मेरा मानना है कि मैंने बड़े केएमएल डेटासेट के प्रबंधन के लिए अनुशंसित प्रथाओं का पालन किया है, लेकिन मुझे एपीआई के माध्यम से इनका उपयोग करने के बारे में अनिश्चितता है।
परिशिष्ट:
समस्या मैं हल करने के लिए कोशिश कर रहा हूँ के प्रकार का एक उदाहरण के रूप में: कल्पना कीजिए कि आप Google धरती प्लग इन का उपयोग कर एक वेब अनुप्रयोग का निर्माण कर रहे हैं, और आप हर सेट के लिए एक स्थान-चिह्न प्रदर्शित करना चाहते हैं दुनिया में यातायात-रोशनी के। प्लेसमार्क केवल उचित स्तर के विवरण पर प्रदर्शित होना चाहिए (उदाहरण के लिए जब कैमरा 5 किमी ऊंचाई पर होता है)। जब कोई उपयोगकर्ता किसी प्लेमार्क पर क्लिक करता है, तो हम चाहते हैं कि वेब ऐप ट्रैफिक-लाइट के उस सेट के आंकड़े लोड करे, और उन्हें साइडबार में प्रदर्शित करें।
आप यह कैसे इंजीनियर हैं?
आप सही हैं। 'ग्लोबल' लेवल इवेंट-हैंडलर सेट अप करके, मैं ईवेंट को संभालने का तरीका निर्धारित करने के लिए लक्ष्य आईडी पर फ़िल्टर कर सकता हूं। धन्यवाद! –
कोई चिंता नहीं, मदद करने में खुशी हुई। – Fraser