Google Maps के KML इंपोर्टिंग यूटिलिटी

प्लैटफ़ॉर्म चुनें: Android iOS JavaScript
  1. शुरुआती जानकारी
  2. केएमएल लेयर जोड़ना
  3. केएमएल लेयर मिटाना
  4. केएमएल कंटेनर ऐक्सेस करना
  5. केएमएल प्लेसमार्क और KML ग्राउंड ओवरले ऐक्सेस करना
  6. केएमएल प्रॉपर्टी ऐक्सेस करना
  7. KML के साथ काम करने वाली सुविधाएं

शुरुआती जानकारी

KML, XML डेटा फ़ॉर्मैट का एक्सटेंशन है और मैप पर इलाके के हिसाब से डेटा दिखाता है. इस सुविधा का इस्तेमाल करके, आप KML ऑब्जेक्ट को भौगोलिक आकृतियों में बदल सकते हैं और उन्हें मैप के ऊपर एक लेयर के तौर पर रेंडर कर सकते हैं. मैप में अपना KML डेटा जोड़ने और उससे हटाने के लिए, क्रम से addLayerToMap() और removeLayerFromMap() को कॉल करें. KML ऑब्जेक्ट में प्रॉपर्टी ऐक्सेस करने के लिए, किसी भी प्लेसमार्क, ग्राउंडओवरले, दस्तावेज़ या फ़ोल्डर पर getProperties() को कॉल करें.

मैप में KML लेयर जोड़ें

मैप में डेटा लेयर जोड़ने के लिए, पहले KmlLayer क्लास का एक इंस्टेंस बनाएं. KmlLayer को इंस्टैंशिएट करने के दो तरीके हैं.

किसी स्थानीय संसाधन से KML डेटासेट इंपोर्ट करने और रेंडर करने के लिए, आपको इनकी ज़रूरत होगी:

  • GoogleMap ऑब्जेक्ट, जहां लेयर को रेंडर करना है.
  • KML डेटा वाली एक लोकल रिसॉर्स फ़ाइल.
  • एक Context ऑब्जेक्ट, जिसकी ज़रूरत किसी लोकल रिसॉर्स फ़ाइल को खोलने के लिए होती है.

Kotlin


val layer = KmlLayer(map, R.raw.geojson_file, context)

      

Java

KmlLayer layer = new KmlLayer(map, R.raw.geojson_file, context);

      

किसी स्थानीय स्ट्रीम से KML डेटासेट इंपोर्ट करने और रेंडर करने के लिए, आपको इनकी ज़रूरत होगी:

  • GoogleMap ऑब्जेक्ट, जहां लेयर को रेंडर करना है.
  • एक InputStream जिसमें KML डेटा होता है.
  • Context ऑब्जेक्ट, जो लोकल संसाधनों को खोलने के लिए ज़रूरी है.

Kotlin


val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java

InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

KmlLayer बनाने के बाद, इंपोर्ट किए गए डेटा को मैप पर जोड़ने के लिए, addLayerToMap()() को कॉल करें.

Kotlin


layer.addLayerToMap()

      

Java

layer.addLayerToMap();

      

KML लेयर मिटाना

मान लें कि आपने यह KmlLayer बनाया है:

Kotlin


val inputStream: InputStream? =  // InputStream containing KML data
val layer = KmlLayer(map, inputStream, context)

      

Java

InputStream inputStream = // InputStream containing KML data
KmlLayer layer = new KmlLayer(map, inputStream, context);

      

मैप से लेयर हटाने के लिए, removeLayerFromMap() को कॉल करें:

Kotlin


layer.removeLayerFromMap()

      

Java

layer.removeLayerFromMap();

      

KML कंटेनर ऐक्सेस करना

अपनी लेयर में जोड़े गए किसी भी कंटेनर को ऐक्सेस करने के लिए, बनाई गई लेयर पर getContainers() को कॉल किया जा सकता है. यह देखने के लिए कि किसी कंटेनर में नेस्ट किए गए कंटेनर हैं या नहीं, hasContainers() को कॉल किया जा सकता है. लेयर में किए गए काम की तरह ही, नेस्ट किए गए इन कंटेनर को ऐक्सेस करने के लिए, getContainers() को कॉल किया जा सकता है

उन कंटेनर को ऐक्सेस करने के लिए जिन्हें KmlLayer या KmlContainer: में नेस्ट नहीं किया गया है

Kotlin


for (containers in layer.containers) {
    // Do something to container
}

      

Java

for (KmlContainer containers : layer.getContainers()) {
    // Do something to container
}

      

उन कंटेनर को ऐक्सेस करने के लिए जो KmlLayer या KmlContainer में नेस्ट हैं:

Kotlin


fun accessContainers(containers: Iterable<KmlContainer>) {
    for (container in containers) {
        if (container.hasContainers()) {
            accessContainers(container.containers)
        }
    }

      

Java

public void accessContainers(Iterable<KmlContainer> containers) {
    for (KmlContainer container : containers) {
        if (container.hasContainers()) {
            accessContainers(container.getContainers());
        }
    }
}

      

KML प्लेसमार्क और KML ग्राउंड ओवरले ऐक्सेस करें

लेयर में जोड़े गए किसी प्लेसमार्क या ग्राउंड ओवरले को ऐक्सेस करने के लिए, लेयर या कंटेनर पर getPlacemarks() या getGroundOverlays() को कॉल किया जा सकता है. इनमें से किसी भी एक को कॉल करने पर, KmlPlacemarks या KmlGroundOverlays का फिर से इस्तेमाल किया जा सकेगा.

उदाहरण के लिए, किसी लेयर से KmlPlacemark ऑब्जेक्ट को ऐक्सेस करने के लिए:

Kotlin


for (placemark in layer.placemarks) {
    // Do something to Placemark
}

      

Java

for (KmlPlacemark placemark : layer.getPlacemarks()) {
    // Do something to Placemark
}

      

KML प्रॉपर्टी ऐक्सेस करना

कंटेनर या प्लेसमार्क में किसी प्रॉपर्टी को ऐक्सेस करने के लिए, getProperty() को कॉल करें और उसे प्रॉपर्टी की कुंजी दें. यह देखने के लिए कि hasProperty() पर कॉल किया जा सकता है या नहीं, आप भी कॉल कर सकते हैं. इस सैंपल में, किसी कंटेनर से "name" प्रॉपर्टी की वैल्यू को वापस पाने का तरीका बताया गया है.

Kotlin


for (container in layer.containers) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"))
    }
}

      

Java

for (KmlContainer container : layer.getContainers()) {
    if (container.hasProperty("name")) {
        Log.i("KML", container.getProperty("name"));
    }
}

      

KML ज्यामिति क्लिक इवेंट

मैप पर ज्यामिति सुविधाओं में क्लिक इवेंट सुनने के लिए, KmlLayer.OnFeatureClickListener() का इस्तेमाल किया जा सकता है. नीचे दिया गया उदाहरण, किसी सुविधा पर क्लिक करने के बाद, सुविधा का आईडी लॉग करता है:

Kotlin


// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener { feature ->
    Log.i(
        "KML",
        "Feature clicked: " + feature.id
    )
}

      

Java

// Set a listener for geometry clicked events.
layer.setOnFeatureClickListener(new KmlLayer.OnFeatureClickListener() {
    @Override
    public void onFeatureClick(Feature feature) {
        Log.i("KML", "Feature clicked: " + feature.getId());
    }
});

      

डेमो ऐप्लिकेशन देखें

KML फ़ाइल इंपोर्ट करने और इसके साथ लेयर बनाने का उदाहरण देखने के लिए, डेमो ऐप्लिकेशन में KmlDemoActivity पर एक नज़र डालें. यह ऐप्लिकेशन, यूटिलिटी लाइब्रेरी के साथ भेजा जाता है. सेटअप गाइड में डेमो ऐप्लिकेशन चलाने का तरीका बताया गया है.

KML फ़ॉर्मैट में काम करने वाली सुविधाएं

KML एलिमेंट समर्थित? Comment
<address> कुछ हद तक प्रॉपर्टी की वैल्यू के तौर पर सेव किया गया हो
<AddressDetails> no
<Alias> no
<altitude> no
<altitudeMode> no
<atom:author> no
<atom:link> no
<atom:name> no
<BalloonStyle> कुछ हद तक सिर्फ़ <text> इस्तेमाल किया जा सकता है
<begin> लागू नहीं <TimeSpan> काम नहीं करता
<bgColor> no
<bottomFov> लागू नहीं <PhotoOverlay> काम नहीं करता
<Camera> no
<बदलें> कुछ हद तक सिर्फ़ स्टाइल में बदलाव किए जा सकते हैं
<color> कुछ हद तक इसमें #AABBGGRR और #BBGGRR शामिल हैं; <ScreenOverlay> और <GroundOverlay> में काम नहीं करता
<colorMode> हाँ
<cookie> no <NetworkLinkControl> काम नहीं करते
<coordinates> हाँ
<बनाएं> no
<Data> no
<मिटाएं> no
<description> हाँ सिर्फ़ सादा टेक्स्ट इस्तेमाल किया जा सकता है, कोई एचटीएमएल कॉन्टेंट इस्तेमाल नहीं किया जा सकता
<displayMode> no
<displayName> no
<Document> हाँ
<drawOrder> हाँ
<east> हाँ
<end> लागू नहीं <TimeSpan> काम नहीं करता
<expires> no <NetworkLinkControl> काम नहीं करते
<ExtendedData> कुछ हद तक सिर्फ़ बिना टाइप वाला <Data>, < SimpleData> या <Schema> का इस्तेमाल नहीं किया गया है, और फ़ॉर्म$[dataName] के लिए इकाई को बदला गया है, तो यह सुविधा काम नहीं करती.
<extrude> no
<fill> हाँ
<flyToView> no <NetworkLinkControl> काम नहीं करते
<फ़ोल्डर> हाँ
<gridOrigin> लागू नहीं <PhotoOverlay> काम नहीं करता
<GroundOverlay> हाँ
<heading> हाँ
<hotSpot> हाँ
<href> हाँ
<httpQuery> no
<Icon> हाँ
<IconStyle> हाँ
<ImagePyramid> लागू नहीं <PhotoOverlay> काम नहीं करता
<innerBoundaryIs> हाँ सीधे तौर पर <लीनियर Ring> ऑर्डर से लिया गया
<ItemIcon> लागू नहीं <ListStyle> काम नहीं करती
<key> हाँ
<kml> हाँ
<LabelStyle> no
<latitude> हाँ
<LatLonAltBox> no
<LatLonBox> हाँ
<leftFov> लागू नहीं <PhotoOverlay> काम नहीं करता
<LinearRing> हाँ
<LineString> हाँ
<LineStyle> हाँ
<Link> no
<linkDescription> लागू नहीं <NetworkLinkControl> काम नहीं करते
<linkName> लागू नहीं <NetworkLinkControl> काम नहीं करते
<linkSnippet> लागू नहीं <NetworkLinkControl> काम नहीं करते
<listItemType> लागू नहीं <ListStyle> काम नहीं करती
<ListStyle> no
<जगह की जानकारी> लागू नहीं <Model> काम नहीं करता
<Lod> हाँ
<longitude> हाँ
<LookAt> no
<maxAltitude> no
<maxFadeExtent> no
<maxHeight> लागू नहीं <PhotoOverlay> काम नहीं करता
<maxLodPixels> no
<maxSessionLength> no
<maxWidth> लागू नहीं <PhotoOverlay> काम नहीं करता
<message> no
<minAltitude> no
<minFadeExtent> no
<minLodPixels> no
<minRefreshPeriod> no <NetworkLink>
<मॉडल> no
<MultiGeometry> हाँ
<name> हाँ
<आस-पास> लागू नहीं <PhotoOverlay> काम नहीं करता
<NetworkLink> no
<NetworkLinkControl> no
<north> हाँ
<open> हाँ प्रॉपर्टी की वैल्यू के तौर पर सेव किया गया हो
<Orientation> लागू नहीं <Model> काम नहीं करता
<outerBoundaryIs> हाँ सीधे तौर पर <लीनियर Ring> ऑर्डर से लिया गया
<outline> हाँ
<overlayXY> no
<Pair> हाँ
<phoneNumber> कुछ हद तक प्रॉपर्टी की वैल्यू के तौर पर सेव किया गया हो
<PhotoOverlay> no
<Placemark> हाँ
<Point> हाँ
<Polygon> हाँ
<PolyStyle> हाँ
<range> हाँ
<refreshInterval> no
<refreshMode> no
<refreshVisibility> no
<Region> हाँ
<ResourceMap> लागू नहीं <Model> काम नहीं करता
<rightFov> लागू नहीं <PhotoOverlay> काम नहीं करता
<रोल> लागू नहीं <Camera> और <Model> काम नहीं करते
<rotation> हाँ
<rotationXY> no
<स्केल> लागू नहीं <Model> काम नहीं करता
<scale> हाँ
<Schema> no
<SchemaData> no
<ScreenOverlay> no
<screenXY> लागू नहीं <ScreenOverlay> काम नहीं करता
<shape> लागू नहीं <PhotoOverlay> काम नहीं करता
<SimpleData> लागू नहीं <SchemaData> काम नहीं करता
<SimpleField> लागू नहीं <schema> काम नहीं करता
<size> हाँ
<Snippet> no
<south> हाँ
<state> लागू नहीं <ListStyle> काम नहीं करती
<Style> हाँ
<StyleMap> कुछ हद तक हाइलाइट की गई स्टाइल नहीं दी गई है. इनलाइन StyleMaps काम नहीं करता
<styleUrl> हाँ
<targetHref> no <Alias> इस्तेमाल नहीं किया जा सकता
<tessellate> no
<text> हाँ
<textColor> no
<tileSize> लागू नहीं <PhotoOverlay> काम नहीं करता
<tilt> no
<TimeSpan> no
<TimeStamp> no
<topFov> लागू नहीं <PhotoOverlay> काम नहीं करता
<अपडेट करें> लागू नहीं <NetworkLinkControl< काम नहीं करता
<value> हाँ
<viewBoundScale> no
<viewFormat> no
<viewRefreshMode> no
<viewRefreshTime> no
<ViewVolume> लागू नहीं <PhotoOverlay> काम नहीं करता
<visibility> हाँ
<west> हाँ
<when> लागू नहीं <TimeStamp> मौजूद नहीं है
<width> हाँ