इमेज मेनिफ़ेस्ट अपलोड करना

अगर आपको कोड एडिटर यूज़र इंटरफ़ेस (यूआई) या 'earthengine' कमांड-लाइन टूल के upload कमांड के मुकाबले, Google Earth Engine (EE) में इमेज अपलोड करने के लिए ज़्यादा विकल्प चाहिए, तो "मेनिफ़ेस्ट" के तौर पर जानी जाने वाली JSON फ़ाइल का इस्तेमाल करके, इमेज अपलोड करने के बारे में बताएं. साथ ही, कमांड-लाइन टूल के upload image --manifest कमांड का इस्तेमाल करें.

इस Colab नोटबुक में, इस बारे में पूरी जानकारी दी गई है. इसमें, मेनिफ़ेस्ट का इस्तेमाल करके इमेज टाइल को एक ऐसेट के तौर पर अपलोड करने का तरीका बताया गया है.

एक बार किया जाने वाला सेटअप

  1. मेनिफ़ेस्ट अपलोड की सुविधा, सिर्फ़ Google Cloud Storage में मौजूद फ़ाइलों के साथ काम करती है. अगर आपके पास पहले से कोई Google Cloud प्रोजेक्ट नहीं है, तो Google Cloud Storage का इस्तेमाल शुरू करने के लिए, Google Cloud प्रोजेक्ट बनाएं. ध्यान दें कि सेटअप के लिए, बिलिंग के लिए क्रेडिट कार्ड की जानकारी देना ज़रूरी है. फ़िलहाल, EE खुद से किसी से भी शुल्क नहीं ले रहा है. हालांकि, फ़ाइलों को EE पर अपलोड करने से पहले, उन्हें Google Cloud Storage में ट्रांसफ़र करने पर, थोड़ा शुल्क लिया जाएगा. आम तौर पर अपलोड किए जाने वाले डेटा के साइज़ (दस या सौ गीगाबाइट) के लिए, शुल्क काफ़ी कम होगा.
  2. अपने प्रोजेक्ट में, Cloud Storage API को चालू करें और एक बकेट बनाएं.
  3. Earth Engine का Python क्लाइंट इंस्टॉल करें. इसमें earthengine कमांड-लाइन टूल शामिल है. इसका इस्तेमाल, हम डेटा अपलोड करने के लिए करेंगे.
  4. अपने-आप अपलोड होने की सुविधा के लिए, अपने प्रोजेक्ट से जुड़े Google Cloud सेवा खाते का इस्तेमाल किया जा सकता है. टेस्टिंग के लिए, आपको सेवा खाते की ज़रूरत नहीं है. हालांकि, जब आपके पास समय हो, तो कृपया सेवा खाते का इस्तेमाल करना शुरू करें.

बहुत बड़ी सोर्स फ़ाइलों (100 जीबी या उससे ज़्यादा) को कई टाइल में बांटने पर, उन्हें तेज़ी से अपलोड किया जा सकता है.

ऐसेट आईडी और नाम

Cloud प्रोजेक्ट के मालिकाना हक वाली ऐसेट के लिए, ऐसेट के नामों के लिए इस नियम का इस्तेमाल करें: projects/some-project-id/assets/some-asset-id.

लेगसी प्रोजेक्ट और उपयोगकर्ता के मालिकाना हक वाली ऐसेट के नामों के बारे में जानें

पुराने लेगसी प्रोजेक्ट के लिए, मेनिफ़ेस्ट में मौजूद एसेट का नाम, Earth Engine में कहीं और दिखने वाले एसेट आईडी से थोड़ा अलग होना चाहिए. ऐसेट आईडी users/some_user या projects/some_project से शुरू होने वाली ऐसेट अपलोड करने के लिए, ऐसेट के नाम में आईडी से पहले projects/earthengine-legacy/assets/ स्ट्रिंग होनी चाहिए. उदाहरण के लिए, EE ऐसेट आईडी users/username/my_geotiff को projects/earthengine-legacy/assets/users/username/my_geotiff नाम का इस्तेमाल करके अपलोड किया जाना चाहिए.

हां, इसका मतलब है कि projects/some_projects/some_asset जैसे आईडी को ऐसे नामों में बदल दिया जाता है जिनमें projects दो बार दिखता है: projects/earthengine-legacy/assets/projects/some_projects/some_asset. यह भ्रमित करने वाला है, लेकिन Google Cloud API के स्टैंडर्ड के मुताबिक काम करने के लिए ज़रूरी है.

मेनिफ़ेस्ट का इस्तेमाल करना

नीचे दिए गए कोड ब्लॉक में एक बुनियादी मेनिफ़ेस्ट दिखाया गया है. यह gs://earthengine-test नाम की Google Cloud Storage बकेट से, small.tif नाम की फ़ाइल अपलोड करता है.

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://earthengine-test/small.tif"
          ]
        }
      ]
    }
  ]
}

इसका इस्तेमाल करने के लिए, इसे manifest.json नाम की फ़ाइल में सेव करें और चलाएं:

earthengine upload image --manifest /path/to/manifest.json

(gs://earthengine-test/small.tif फ़ाइल मौजूद है और उसे सार्वजनिक तौर पर पढ़ा जा सकता है. इसका इस्तेमाल जांच के लिए किया जा सकता है.)

टाइलसेट

JSON का मेनिफ़ेस्ट स्ट्रक्चर थोड़ा मुश्किल होता है. हालांकि, अपलोड से जुड़ी सामान्य समस्या को हल करने के लिए, यह ज़रूरी है: कई सोर्स फ़ाइलों के पिक्सल को एक एसेट में जोड़ने के सभी संभावित तरीकों के बारे में बताने का तरीका. खास तौर पर, फ़ाइलों को एक साथ ग्रुप करने के दो अलग-अलग तरीके हैं:

  • मोज़ेक. कभी-कभी एक से ज़्यादा फ़ाइलें, एक से ज़्यादा टाइल दिखाती हैं. उदाहरण के लिए, हर टाइल एक डिग्री का स्क्वेयर होती है. ऐसी फ़ाइलों को EE एसेट में एक ही बैंड में, मोज़ेक (एक साथ मर्ज) किया जाना चाहिए.
  • अलग-अलग बैंड. कभी-कभी, एक से ज़्यादा फ़ाइलें एक से ज़्यादा बैंड दिखाती हैं. ऐसी फ़ाइलों को ईई ऐसेट में बैंड के तौर पर एक साथ स्टैक किया जाना चाहिए.

(हो सकता है कि आपको दोनों तरीकों का इस्तेमाल एक साथ करना पड़े, लेकिन ऐसा बहुत कम होता है.)

इन विकल्पों के बारे में बताने के लिए, मेनिफ़ेस्ट में टाइलसेट की अवधारणा को शामिल किया गया है. एक टाइलसेट, एक GDAL सोर्स से जुड़ा होता है. इस वजह से, किसी एक टाइलसेट में मौजूद सभी सोर्स का GDAL स्ट्रक्चर एक ही होना चाहिए (बैंड की संख्या और टाइप, प्रोजेक्शन, ट्रांसफ़ॉर्म, और वैल्यू मौजूद न होना). GDAL सोर्स में कई बैंड हो सकते हैं. इसलिए, एक टाइलसेट में कई ईई बैंड का डेटा हो सकता है.

मोज़ेक डालने की सुविधा के लिए, मेनिफ़ेस्ट इस तरह दिखेगा:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/N30W22.tif"
          ]
        },
        {
          "uris": [
            "gs://bucket/N31W22.tif"
          ]
        }
      ]
    }
  ]
}

अलग-अलग बैंड के लिए, मेनिफ़ेस्ट ऐसा दिखेगा (जैसा कि यहां बताया गया है, आपको bands सेक्शन भी जोड़ना होगा):

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "bands": ...,
  "tilesets": [
    {
      "id": "tileset_for_band1",
      "sources": [
        {
          "uris": [
            "gs://bucket/band1.tif"
          ]
        }
      ]
    },
    {
      "id": "tileset_for_band2",
      "sources": [
        {
          "uris": [
            "gs://bucket/band2.tif"
          ]
        }
      ]
    }
  ]
}

ध्यान दें कि अलग-अलग बैंड के मामले में, हमें हर टाइलसेट को अलग-अलग टाइलसेट आईडी देना होगा, ताकि साफ़ तौर पर जानकारी दी जा सके. टाइलसेट आईडी, कोई भी स्ट्रिंग हो सकती है - इन स्ट्रिंग को अपलोड की गई एसेट में नहीं रखा जाता. टाइलसेट आईडी का इस्तेमाल सिर्फ़ डेटा डालने के लिए किया जाता है, ताकि एक-दूसरे पर स्टैक किए गए टाइलसेट को अलग-अलग पहचाना जा सके.

बैंड

दूसरा अहम कॉन्सेप्ट, सोर्स फ़ाइलों को EE एसेट बैंड से मैच करना है. ऐसा करने के लिए, मेनिफ़ेस्ट के bands सेक्शन का इस्तेमाल किया जाता है.

bands सेक्शन को छोड़ा जा सकता है. ऐसा करने पर, पहले टाइलसेट की फ़ाइलों से, फिर अगले टाइलसेट की फ़ाइलों से, और इसी तरह से बैंड बनाए जाते हैं. डिफ़ॉल्ट रूप से, बैंड के नाम "b1", "b2" वगैरह होते हैं. बैंड के डिफ़ॉल्ट नामों को बदलने के लिए, आखिर में "बैंड" सेक्शन शामिल करें. जैसे:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/rgb.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "R",
      "tilesetBandIndex": 0
    },
    {
      "id": "G",
      "tilesetBandIndex": 1
    },
    {
      "id": "B",
      "tilesetBandIndex": 2
    }
  ]
}

ईई बैंड की संख्या, सभी टाइलसेट में मौजूद बैंड की कुल संख्या के बराबर होनी चाहिए.

अगर आपको किसी फ़ाइल के सभी बैंड इंजेस्ट नहीं करने हैं, तो tilesetBandIndex फ़ील्ड का इस्तेमाल करके यह बताया जा सकता है कि GDAL के किन बैंड को इंजेस्ट किया जाना चाहिए. पहले बैंड का tilesetBandIndex 0 है.

उदाहरण:

मान लें कि सोर्स फ़ाइल में चार बैंड हैं: "tmin", "tmin_error", "tmax", "tmax_error". हमें सिर्फ़ "tmin" और "tmax" को डालना है. काम के मेनिफ़ेस्ट सेक्शन इस तरह दिखेंगे:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "temperature",
      "sources": [
        {
          "uris": [
            "gs://bucket/temperature.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "tmin",
      "tilesetBandIndex": 0,
      "tilesetId": "temperature"
    },
    {
      "id": "tmax",
      "tilesetBandIndex": 2,
      "tilesetId": "temperature"
    }
  ]
}

मास्क के बैंड

बैंड मास्किंग को मेनिफ़ेस्ट के maskBands कॉम्पोनेंट से कंट्रोल किया जाता है. मास्क के तीन संभावित कॉन्फ़िगरेशन काम करते हैं. हालांकि, मास्क बैंड को हमेशा किसी फ़ाइल में आखिरी बैंड माना जाता है.

  1. एक ही फ़ाइल में मौजूद सभी डेटा बैंड के लिए मास्क.
  2. अन्य सभी फ़ाइलों से मिलने वाले सभी डेटा बैंड के लिए मास्क.
  3. कुछ डेटा बैंड के लिए मास्क.

1. आम तौर पर, एक GeoTIFF का इस्तेमाल किया जाता है, जिसके आखिरी बैंड का इस्तेमाल, दूसरे बैंड के लिए मास्क के तौर पर किया जाता है. यह सिर्फ़ बाइट टाइप के GeoTIFF फ़ाइलों के लिए काम करता है. इस मेनिफ़ेस्ट का इस्तेमाल करें:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "data_tileset"
    }
  ]
}

2. किसी मास्क GeoTIFF को किसी दूसरे GeoTIFF के सभी बैंड के लिए मास्क के तौर पर इस्तेमाल करने के लिए, इस मेनिफ़ेस्ट का इस्तेमाल करें:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset"
    }
  ]
}

3. किसी दूसरी फ़ाइल में किसी खास बैंड के लिए, GeoTIFF का इस्तेमाल मास्क के तौर पर करने के लिए, यहां दिए गए मेनिफ़ेस्ट का इस्तेमाल करें. पिछले मामले से यह फ़र्क़ है कि maskBands में bandIds फ़ील्ड सेट है:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "id": "data_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/data_file.tif"
          ]
        }
      ]
    },
    {
      "id": "mask_tileset",
      "sources": [
        {
          "uris": [
            "gs://bucket/mask_file.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "data_band",
      "tilesetId": "data_tileset"
    },
    {
      "id": "qa_band",
      "tilesetId": "data_tileset"
    }
  ],
  "maskBands": [
    {
      "tilesetId": "mask_tileset",
      "bandIds": ["data_band"]
    }
  ]
}

आखिरी उदाहरण में, हम data_tileset टाइलसेट के दो बैंड के साथ काम कर रहे हैं. हालांकि, हम सिर्फ़ एक बैंड (data_band) पर मास्क लागू कर रहे हैं. ऐसा, दिए गए एकमात्र maskBands सूची ऑब्जेक्ट के bandIds फ़ील्ड के हिसाब से किया जा रहा है.

ध्यान दें कि maskBands में बताए गए टाइलसेट के सिर्फ़ आखिरी बैंड का इस्तेमाल, मास्क बैंड के तौर पर किया जाता है.

पिरामिड स्कीम से जुड़ी नीति

डेटा डालने के दौरान, जब Earth Engine इमेज पिरामिड बनाता है, तो उसे बार-बार 2x2 पिक्सल वाले ग्रिड को एक पिक्सल में बदलना पड़ता है. ऐसा करने के लिए, पिक्सल की वैल्यू को किसी तरह बदलना पड़ता है. डिफ़ॉल्ट रूप से, पिक्सल वैल्यू का औसत निकाला जाता है. ऐसा करना, ज़्यादातर मामलों में सही होता है. ऐसा तब होता है, जब रेस्टर बैंड में कम या ज़्यादा, लगातार डेटा दिखता हो. हालांकि, दो स्थितियों में डिफ़ॉल्ट वैल्यू पर भरोसा करने पर गलत नतीजे मिलेंगे. ऐसे में, बैंड की परिभाषा में pyramidingPolicy फ़ील्ड को सेट करना ज़रूरी है. अगर इसे सेट नहीं किया जाता है, तो डिफ़ॉल्ट रूप से इसकी वैल्यू "MEAN" मानी जाती है.

रेस्टर इमेज की कैटगरी तय करने के लिए, पिक्सल को पिरामिड में व्यवस्थित करने का सबसे सही तरीका यह है कि अगली वैल्यू बनाने के लिए, चार वैल्यू में से ज़्यादातर वैल्यू को लिया जाए. उदाहरण के लिए, लैंड कवर की कैटगरी तय करने के लिए. ऐसा, "MODE" पिरामिड बनाने की नीति का इस्तेमाल करके किया जाता है:

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/landcover.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "landcover",
      "pyramidingPolicy": "MODE"
    }
  ]
}

ऐसे रेस्टर बैंड के लिए जहां "MEAN" और "MODE", दोनों का इस्तेमाल नहीं किया जा सकता (उदाहरण के लिए, बिट पैक किए गए पिक्सल), पिरामिड बनाने के लिए "SAMPLE" नीति का इस्तेमाल किया जाना चाहिए. "SAMPLE" फ़ंक्शन, हर 2x2 ग्रिड के ऊपरी बाएं पिक्सल की वैल्यू हमेशा लेता है. नीचे दिए गए उदाहरण में, पिरामिड बनाने के लिए "MEAN" नीति को ऐसे बैंड के लिए असाइन किया गया है जो लगातार बदलने वाले वैरिएबल ("NDVI") को दिखाता है. साथ ही, डेटा के "QA" बैंड के लिए "SAMPLE" नीति को असाइन किया गया है.

{
  "name": "projects/earthengine-legacy/assets/users/username/some_folder/some_id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/ndvi.tif"
          ]
        }
      ]
    }
  ],
  "bands": [
    {
      "id": "NDVI",
      "tilesetBandIndex": 0,
      "pyramidingPolicy": "MEAN"
    },
    {
      "id": "QA",
      "tilesetBandIndex": 1,
      "pyramidingPolicy": "SAMPLE"
    }
  ]
}

शुरू और खत्म होने का समय

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

आम तौर पर, शुरू और खत्म होने के समय का मतलब, निगरानी के समय से है, न कि सोर्स फ़ाइल बनने के समय से.

आसानी से समझने के लिए, खत्म होने के समय को एक खास सीमा के तौर पर माना जाता है. उदाहरण के लिए, अगर ऐसेट सिर्फ़ एक दिन के लिए है, तो शुरू और खत्म होने के समय के लिए, एक-दूसरे के बाद के दो दिनों की आधी रात का इस्तेमाल करें. उदाहरण के लिए, 1980-01-31T00:00:00 और 1980-02-01T00:00:00. अगर ऐसेट की कोई अवधि नहीं है, तो खत्म होने का समय, शुरू होने के समय के बराबर सेट करें. समय को मेनिफ़ेस्ट में, ISO 8601 स्ट्रिंग के तौर पर दिखाएं. हमारा सुझाव है कि तारीख की वैल्यू को आसान बनाने के लिए, यह मान लें कि खत्म होने का समय खास है. उदाहरण के लिए, रोज़ की ऐसेट के लिए अगले दिन की आधी रात.

उदाहरण:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "tilesets": [
    {
      "sources": [
        {
          "uris": [
            "gs://bucket/img_20190612.tif"
          ]
        }
      ]
    }
  ],
  "startTime": "1980-01-31T00:00:00Z",
  "endTime": "1980-02-01T00:00:00Z"
}

मेनिफ़ेस्ट के स्ट्रक्चर का रेफ़रंस

नीचे दिए गए JSON स्ट्रक्चर में, इमेज अपलोड करने के लिए मेनिफ़ेस्ट के सभी फ़ील्ड शामिल हैं. फ़ील्ड की परिभाषाएं देखने के लिए, यहां दिए गए मेनिफ़ेस्ट फ़ील्ड की परिभाषाओं वाले सेक्शन पर जाएं.

{
  "name": <string>,
  "tilesets": [
    {
      "dataType": <string>,
      "id": <string>,
      "crs": <string>,
      "sources": [
        {
          "uris": [
            <string>
          ],
          "affineTransform": {
            "scaleX": <double>,
            "shearX": <double>,
            "translateX": <double>,
            "shearY": <double>,
            "scaleY": <double>,
            "translateY": <double>
          }
        }
      ]
    }
  ],
  "bands": [
    {
      "id": <string>,
      "tilesetId": <string>,
      "tilesetBandIndex": <int32>,
      "missingData": {
        "values": [<double>]
      },
      "pyramindingPolicy": <string>
    }
  ],
  "maskBands": [
    {
      "tilesetId": <string>,
      "bandIds": [
        <string>
      ]
    }
  ],
  "footprint": {
    "points": [
      {
        "x": <double>,
        "y": <double>
      }
    ],
    "bandId": <string>
  },
  "missingData": {
     "values": [<double>]
  },
  "pyramidingPolicy": <string>,
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

मेनिफ़ेस्ट फ़ील्ड की परिभाषाएं

नाम

string

उस एसेट का नाम जिसे बनाना है. name का फ़ॉर्मैट "projects/*/assets/**" होता है (उदाहरण के लिए, "projects/earthengine-legacy/assets/users/USER/ASSET").

टाइलसेट

list

डिक्शनरी की सूची, जो टाइल सेट की प्रॉपर्टी तय करती है. ज़्यादा जानकारी के लिए, यहां दिए गए tilesets डिक्शनरी एलिमेंट फ़ील्ड देखें.

tilesets[i].dataType

string

डेटा का अंकों वाला डेटा टाइप बताता है. डिफ़ॉल्ट तौर पर, GDAL रिपोर्ट में वही टाइप दिखता है जिसे तय किया गया है. ऐसे में, टाइप तय करने की ज़रूरत नहीं है.

डेटा टाइप मान
सेट नहीं है "DATA_TYPE_UNSPECIFIED"
8-बिट का साइन वाला इंटिजर "INT8"
8-बिट का बिना हस्ताक्षर वाला पूर्णांक "UINT8"
16-बिट वाला साइन किया गया इंटिजर "INT16"
16-बिट का बिना हस्ताक्षर वाला पूर्णांक "UINT16"
32-बिट का साइन वाला इंटिजर "INT32"
32-बिट का बिना हस्ताक्षर वाला पूर्णांक "UINT32"
32-बिट फ़्लोट "FLOAT32"
64-बिट फ़्लोट "FLOAT64"

tilesets[i].id

string

टाइलसेट का आईडी. ऐसेट मेनिफ़ेस्ट में बताई गई टाइलसेट के बीच यूनीक होना चाहिए. प्रोसेस करने के दौरान इस आईडी को हटा दिया जाता है. इसका इस्तेमाल सिर्फ़ टाइलसेट को किसी बैंड से लिंक करने के लिए किया जाता है. खाली स्ट्रिंग एक मान्य आईडी है.

tilesets[i].crs

string

पिक्सल ग्रिड का कोऑर्डिनेट रेफ़रंस सिस्टम, जहां संभव हो वहां स्टैंडर्ड कोड (उदाहरण के लिए, EPSG कोड) के तौर पर और अन्य मामलों में WKT फ़ॉर्मैट में दिया गया.

tilesets[i].sources

list

इमेज फ़ाइल और उसके साइडकार की प्रॉपर्टी तय करने वाली डिक्शनरी की सूची. ज़्यादा जानकारी के लिए, यहां दिए गए sources डिक्शनरी एलिमेंट फ़ील्ड देखें.

tilesets[i].sources[j].uris

list

डाले जाने वाले डेटा के यूआरआई की सूची. सिर्फ़ Google Cloud Storage के यूआरआई का इस्तेमाल किया जा सकता है. हर यूआरआई को इस फ़ॉर्मैट में डालना ज़रूरी है: gs://bucket-id/object-id. मुख्य ऑब्जेक्ट, सूची का पहला एलिमेंट होना चाहिए. इसके बाद, साइडकार सूची में शामिल किए जाने चाहिए. अगर सेट किया गया है, तो हर यूआरआई के पहले ImageManifest.uriPrefix लगा होता है.

tilesets[i].sources[j].affineTransform

dictionary

वैकल्पिक ऐफ़ाइन ट्रांसफ़ॉर्म. इसकी वैल्यू सिर्फ़ तब दी जानी चाहिए, जब पिक्सल डालने के लिए uris (इसमें किसी भी साइडकार को शामिल किया गया है) का डेटा काफ़ी न हो. यह डायक्शनरी के तौर पर दिया जाता है, जिसमें ये कुंजियां होती हैं: "scaleX", "shearX", "translateX", "shearY", "scaleY", "translateY". ज़्यादा जानकारी के लिए, यह रेफ़रंस देखें.

कुंजियों और वैल्यू के उदाहरण:

{
  "scaleX": 0.1,
  "shearX": 0.0,
  "translateX": -180.0,
  "shearY": 0.0,
  "scaleY": -0.1,
  "translateY": 90.0
}

बैंड

list

डिक्शनरी की सूची, जो टाइलसेट से सोर्स किए गए किसी एक बैंड की प्रॉपर्टी तय करती है. ध्यान दें कि एसेट का बैंड क्रम, bands के क्रम जैसा ही है. ज़्यादा जानकारी के लिए, यहां दिए गए bands डिक्शनरी एलिमेंट फ़ील्ड देखें.

bands[i].id

string

बैंड का आईडी (नाम).

bands[i].tilesetId

string

बैंड से जुड़े टाइलसेट का आईडी.

bands[i].tilesetBandIndex

int32

बैंड से जुड़े टाइलसेट से, शून्य पर आधारित बैंड इंडेक्स.

bands[i].missingData.values

list

वैल्यू की सूची (डबल टाइप), जो बैंड में कोई डेटा नहीं दिखाती.

bands[i].pyramidingPolicy

string

पिरामिड स्कीम से जुड़ी नीति. ज़्यादा जानकारी के लिए, यह लिंक देखें. आपको ये विकल्प दिखेंगे:

  • "MEAN" (डिफ़ॉल्ट)
  • "MODE"
  • "SAMPLE"

maskBands

list

डिक्शनरी की सूची, जो टाइलसेट से लिए गए एक मास्क बैंड की प्रॉपर्टी तय करती है. ज़्यादा से ज़्यादा एक मास्क बैंड दिया जा सकता है. ज़्यादा जानकारी के लिए, यहां दिए गए maskBands डिक्शनरी एलिमेंट फ़ील्ड देखें.

maskBands[i].tilesetId

string

मास्क बैंड से जुड़े टाइलसेट का आईडी. टाइलसेट के आखिरी बैंड का इस्तेमाल, हमेशा मास्क बैंड के तौर पर किया जाता है.

maskBands[i].bandIds

list of strings

उन बैंड के आईडी की सूची जिन पर मास्क बैंड लागू होता है. अगर यह खाली है, तो मास्क बैंड ऐसेट के सभी बैंड पर लागू होता है. हर बैंड के लिए, सिर्फ़ एक मास्क बैंड हो सकता है.

फ़ुटप्रिंट

dictionary

एक डिक्शनरी, जो किसी इमेज में मौजूद सभी मान्य पिक्सल के फ़ुटप्रिंट की प्रॉपर्टी तय करती है. अगर यह फ़ील्ड खाली है, तो डिफ़ॉल्ट फ़ुटप्रिंट पूरी इमेज होगी. ज़्यादा जानकारी के लिए, यहां दिए गए footprint डिक्शनरी एलिमेंट फ़ील्ड देखें.

footprint.points

list

किसी इमेज में मौजूद सभी मान्य पिक्सल के फ़ुटप्रिंट की जानकारी देने वाले पॉइंट की सूची. पॉइंट को एक डिक्शनरी से तय किया जाता है. इसमें "x" और "y" कुंजियां होती हैं, जिनकी वैल्यू फ़्लोट होती है. बिंदुओं की सूची, एक रिंग के बारे में बताती है. यह रिंग, एक साधारण पॉलीगॉन के बाहरी हिस्से को बनाती है. इसमें इमेज के सभी मान्य पिक्सल के बीच के हिस्से शामिल होने चाहिए. यह एक लीनियर रिंग होनी चाहिए: आखिरी बिंदु, पहले बिंदु के बराबर होना चाहिए. कोऑर्डिनेट, bandId के तय किए गए बैंड के प्रोजेक्शन में होते हैं.

ध्यान दें: हर पिक्सल के बीच जैसे कि नॉन-इंटिजर कोऑर्डिनेट का इस्तेमाल करें, क्योंकि footprint में एक पिक्सल (1x1 रेक्टैंगल) को शामिल किया जाता है, अगर वह पिक्सल फ़ुटप्रिंट से इंटरसेक्शन करता है. आस-पास के पिक्सल को गलती से चुनने से बचने के लिए, पूर्णांक वैल्यू वाले निर्देशांक का इस्तेमाल न करें. ऐसा इसलिए, क्योंकि ये पिक्सल के बीच की सीमाएं होती हैं. पिक्सल के बीच में फ़ुटप्रिंट बनाकर, ऐसे पिक्सल शामिल होने से रोका जा सकता है जिनकी ज़रूरत नहीं है. इससे, ज़रूरी पिक्सल के मैप की सीमा से जुड़ने पर गड़बड़ियां हो सकती हैं. जैसे, एंटीमिडियन या पोल.

उदाहरण के लिए, चार मान्य पिक्सल वाली 2x2 इमेज के लिए, यहां दी गई एक संभावित रिंग है:

[
  {
    "x": 0.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 1.5
  },
  {
    "x": 1.5,
    "y": 0.5
  },
  {
    "x": 0.5,
    "y": 0.5
  }
]

footprint.bandId

string

उस बैंड का आईडी जिसका सीआरएस, फ़ुटप्रिंट के निर्देशांक तय करता है. अगर यह फ़ील्ड खाली है, तो पहले बैंड का इस्तेमाल किया जाता है.

missingData.values

list

वैल्यू (डबल टाइप) की सूची, जो इमेज के सभी बैंड में कोई डेटा नहीं दिखाती. यह उन सभी बैंड पर लागू होता है जिन्होंने अपना missingData नहीं बताया है.

pyramidingPolicy

string

पिरामिड स्कीम से जुड़ी नीति. अगर कोई वैल्यू नहीं दी जाती है, तो डिफ़ॉल्ट रूप से "MEAN" नीति लागू होती है. यह उन सभी बैंड पर लागू होता है जिनके लिए, बैंड की जानकारी नहीं दी गई है. ज़्यादा जानकारी के लिए, यह लिंक देखें. आपको ये विकल्प दिखेंगे:

  • "MEAN" (डिफ़ॉल्ट)
  • "MODE"
  • "SAMPLE"

uriPrefix

string

मेनिफ़ेस्ट में तय किए गए सभी uris के आगे जोड़ा जाने वाला वैकल्पिक प्रीफ़िक्स.

startTime

integer

ऐसेट से जुड़ा टाइमस्टैंप, अगर कोई है. आम तौर पर, यह उस समय से जुड़ा होता है जब सैटलाइट इमेज ली गई थी. किसी समयावधि से जुड़ी एसेट के लिए, जैसे कि एक महीने या साल की औसत वैल्यू, यह टाइमस्टैंप उस समयावधि की शुरुआत से जुड़ा होता है. इसे 1970-01-01 के बाद के सेकंड और (ज़रूरी नहीं) नैनोसेकंड के तौर पर दिखाया जाता है. यह माना जाता है कि यह समय, यूटीसी टाइम ज़ोन में है.

endTime

integer

किसी समयावधि से जुड़ी एसेट के लिए, यह टाइमस्टैंप उस समयावधि के आखिर का होता है. जैसे, किसी महीने या साल की औसत वैल्यू. इसे 1970-01-01 के बाद के सेकंड और (ज़रूरी नहीं) नैनोसेकंड के तौर पर दिखाया जाता है. यह माना जाता है कि यह समय, यूटीसी टाइम ज़ोन में है.

प्रॉपर्टी

dictionary

की-वैल्यू पेयर की कोई भी फ़्लैट डिक्शनरी. कुंजियां स्ट्रिंग होनी चाहिए और वैल्यू, संख्याएं या स्ट्रिंग हो सकती हैं. उपयोगकर्ता की अपलोड की गई एसेट के लिए, सूची की वैल्यू का इस्तेमाल अभी तक नहीं किया जा सकता.

सीमाएं

JSON मेनिफ़ेस्ट का साइज़

JSON मेनिफ़ेस्ट फ़ाइल का साइज़ 10 एमबी से ज़्यादा नहीं होना चाहिए. अगर आपको कई फ़ाइलें अपलोड करनी हैं, तो डेटासेट के बारे में बताने के लिए, वर्णों की संख्या कम करने के तरीकों पर विचार करें. उदाहरण के लिए, uris सूची में मौजूद हर यूआरआई के लिए, Google Cloud की बकेट का पाथ देने की ज़रूरत को खत्म करने के लिए, uriPrefix फ़ील्ड का इस्तेमाल करें. अगर साइज़ को और कम करना है, तो फ़ाइल के नाम छोटे करें.

इमेज फ़ाइल का फ़ॉर्मैट

हर इमेज फ़ाइल, TIFF इमेज होनी चाहिए. अगर मेनिफ़ेस्ट में सीआरएस की जानकारी नहीं दी गई है, तो फ़ाइल एक ऐसी GeoTIFF होनी चाहिए जिसमें सीआरएस एम्बेड किया गया हो.

TIFF फ़ाइलों को DEFLATE, JPEG-XL/JXL, LERC, LERC_DEFLATE, LERC_ZSTD, LZMA, LZW, WEBP या ZSTD की मदद से कंप्रेस किया जा सकता है.

बड़ी फ़ाइलों को अपलोड करने का बेहतर अनुभव पाने के लिए सुझाव:

  • सबसे सही विकल्प: ZSTD, स्पीड और कंप्रेशन के बीच एक अच्छा बैलेंस देता है.
  • इस्तेमाल न करें: LZMA, डेटा को अच्छी तरह से कंप्रेस करने के बावजूद बहुत धीमा हो सकता है.
  • बिना कंप्रेस की गई फ़ाइलें: इनसे फ़ाइलों का साइज़ बड़ा हो जाएगा और अपलोड होने में ज़्यादा समय लगेगा.
  • लोस वाली कंप्रेसिंग (उदाहरण के लिए, JPEG): इससे पिक्सल वैल्यू बदल सकती हैं. लॉसलेस कंप्रेसन का इस्तेमाल करें (जैसे, DEFLATE, LZMA, LZW, ZSTD) का इस्तेमाल न करें, जब तक कि आपको अपने डेटा पर पड़ने वाले संभावित असर के बारे में जानकारी न हो.