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

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

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

  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 सेवा खाते का इस्तेमाल किया जा सकता है. टेस्टिंग के लिए, आपको सेवा खाते की ज़रूरत नहीं है. हालांकि, जब आपके पास समय हो, तो कृपया सेवा खाते का इस्तेमाल करना शुरू करें.

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

Cloud प्रोजेक्ट में ऐसेट के लिए, projects/my_cloud_project/assets/my_asset का इस्तेमाल करें.

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

हां, इसका मतलब है कि 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.csv नाम की फ़ाइल अपलोड करता है.

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

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

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

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

शेपफ़ाइल अपलोड करने के लिए, सिर्फ़ .shp फ़ाइल की जानकारी दें. अन्य फ़ाइलों का पता अपने-आप चल जाएगा.

एक से ज़्यादा सोर्स

एक से ज़्यादा CSV या शेपफ़ाइल सोर्स तय किए जा सकते हैं. हर सोर्स के लिए एक फ़ाइल होनी चाहिए. इस मामले में, हर CSV फ़ाइल का स्ट्रक्चर एक जैसा होना चाहिए. उदाहरण के लिए, हमारे पास दो CSV फ़ाइलें हैं, region1.csv और region2.csv:

आईडी आकार
1 {"type":"Point","coordinates":[-119,36]}
2 {"type":"Point","coordinates":[-118,37]}
3 {"type":"Point","coordinates":[-117,38]}
आईडी आकार
4 {"type":"Point","coordinates":[-112,40]}
5 {"type":"Point","coordinates":[-111,41]}
6 {"type":"Point","coordinates":[-110,42]}

इनका स्ट्रक्चर एक जैसा है, लेकिन कॉन्टेंट अलग-अलग है. इन्हें Cloud स्टोरेज बकेट: gs://earthengine-test/region1.csv और gs://earthengine-test/region2.csv में अपलोड किया गया है. इन्हें Earth Engine की एसेट के तौर पर डालने के लिए, sources सूची में दो एंट्री वाला मेनिफ़ेस्ट बनाएं. जैसे:

{
  "name": "projects/some-project-id/assets/some-asset-id",
  "sources": [
    {
      "uris": [
        "gs://earthengine-test/region1.csv"
      ]
    },
    {
      "uris": [
        "gs://earthengine-test/region2.csv"
      ]
    }
  ]
}

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

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

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

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

उदाहरण:

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

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

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

{
  "name": <string>,
  "sources": [
    {
      "uris": [
        <string>
      ],
      "charset": <string>,
      "maxErrorMeters": <double>,
      "maxVertices": <int32>,
      "crs": <string>,
      "geodesic": <boolean>,
      "primaryGeometryColumn": <string>,
      "xColumn": <string>,
      "yColumn": <string>,
      "dateFormat": <string>,
      "csvDelimiter": <string>,
      "csvQualifier": <string>,
    }
  ],
  "uriPrefix": <string>,
  "startTime": {
    "seconds": <integer>
  },
  "endTime": {
    "seconds": <integer>
  },
  "properties": {
    <unspecified>
  }
}

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

नाम

string

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

स्रोत

list

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

sources[i].uris

list

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

sources[i].charset

string

स्ट्रिंग को डिकोड करने के लिए इस्तेमाल किए जाने वाले डिफ़ॉल्ट कोड के बाइट का नाम. अगर यह खाली है, तो डिफ़ॉल्ट रूप से, चरित्र सेट "UTF-8" माना जाता है.

sources[i].maxErrorMeters

double

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

sources[i].maxVertices

int32

वर्टेक्स की ज़्यादा से ज़्यादा संख्या. अगर यह शून्य नहीं है, तो ज्यामिति को अलग-अलग हिस्सों में बांटा जाएगा. हर हिस्सा इस सीमा के अंदर होगा.

sources[i].crs

string

डिफ़ॉल्ट सीआरएस कोड या डब्ल्यूकेट स्ट्रिंग, जो किसी ऐसी ज्यामिति के निर्देशांक रेफ़रंस सिस्टम के बारे में बताती है जिसके लिए कोई निर्देशांक रेफ़रंस सिस्टम तय नहीं किया गया है. इसे खाली छोड़ने पर, डिफ़ॉल्ट तौर पर EPSG:4326 का इस्तेमाल किया जाएगा. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].geodesic

boolean

ज्यामिति में किनारों को समझने के लिए डिफ़ॉल्ट रणनीति, जिनके लिए कोई रणनीति तय नहीं की गई है. अगर यह वैल्यू 'गलत' है, तो प्रोजेक्शन में किनारे सीधे होते हैं. अगर यह वैल्यू 'सही' है, तो किनारों को पृथ्वी की सतह पर सबसे छोटे रास्ते का पालन करने के लिए, घुमाया जाता है. अगर यह फ़ील्ड खाली है, तो सीआरएस के प्रोजेक्ट किए गए निर्देशांक सिस्टम के लिए, डिफ़ॉल्ट रूप से गलत पर सेट होता है. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].primaryGeometryColumn

string

जब एक से ज़्यादा ज्यामिति कॉलम हों, तो पंक्ति की मुख्य ज्यामिति के तौर पर इस्तेमाल करने के लिए ज्यामिति कॉलम.

अगर इसे खाली छोड़ा जाता है और एक से ज़्यादा ज्यामिति कॉलम मौजूद होते हैं, तो पहले ज्यामिति कॉलम का इस्तेमाल किया जाता है. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].xColumn

string

पॉइंट की ज्यामिति का पता लगाने के लिए, अंकों वाले x-कोऑर्डिनेट कॉलम का नाम. अगर yColumn भी तय किया गया है और दोनों कॉलम में संख्या वाली वैल्यू हैं, तो सीआरएस में दिए गए निर्देशांक सिस्टम में x,y वैल्यू के साथ एक पॉइंट ज्यामिति कॉलम बनाया जाएगा. अगर इसे खाली छोड़ दिया जाता है और सीआरएस में प्रोजेक्ट किए गए निर्देशांक सिस्टम की जानकारी नहीं दी जाती है, तो यह डिफ़ॉल्ट रूप से "देशांतर" पर सेट हो जाता है. अगर इसे खाली छोड़ दिया जाता है और सीआरएस में प्रोजेक्ट किए गए निर्देशांक सिस्टम की जानकारी दी जाती है, तो यह डिफ़ॉल्ट रूप से खाली स्ट्रिंग पर सेट हो जाता है और कोई पॉइंट ज्यामिति जनरेट नहीं होती.

जनरेट किए गए पॉइंट ज्यामिति कॉलम का नाम {xColumn}_{yColumn}_N रखा जाएगा. इसमें N को इस तरह जोड़ा जाएगा कि {xColumn}_{yColumn}_N यूनीक हो. ऐसा तब किया जाएगा, जब {xColumn}_{yColumn} नाम का कॉलम पहले से मौजूद हो. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].yColumn

string

पॉइंट की ज्यामिति का पता लगाने के लिए, अंकों वाले y कॉर्डिनेट कॉलम का नाम. अगर xColumn भी तय किया गया है और दोनों कॉलम में संख्या वाली वैल्यू हैं, तो सीआरएस में दिए गए निर्देशांक सिस्टम में x,y वैल्यू के साथ एक पॉइंट ज्यामिति कॉलम बनाया जाएगा. अगर इसे खाली छोड़ दिया जाता है और सीआरएस में प्रोजेक्ट किए गए निर्देशांक सिस्टम के बारे में नहीं बताया जाता है, तो यह डिफ़ॉल्ट रूप से "अक्षांश" पर सेट हो जाता है. अगर इसे खाली छोड़ दिया जाता है और सीआरएस में प्रोजेक्ट किए गए निर्देशांक सिस्टम की जानकारी दी जाती है, तो यह डिफ़ॉल्ट रूप से खाली स्ट्रिंग पर सेट हो जाता है और कोई पॉइंट ज्यामिति जनरेट नहीं होती.

जनरेट किए गए पॉइंट ज्यामिति कॉलम का नाम {xColumn}_{yColumn}_N रखा जाएगा. इसमें N को इस तरह जोड़ा जाएगा कि {xColumn}_{yColumn}_N यूनीक हो. ऐसा तब किया जाएगा, जब {xColumn}_{yColumn} नाम का कॉलम पहले से मौजूद हो. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].dateFormat

string

तारीखों को कोड में बदलने वाले फ़ील्ड को पार्स करने के लिए इस्तेमाल किया जाने वाला फ़ॉर्मैट. फ़ॉर्मैट पैटर्न, Joda-Time DateTimeFormat क्लास के दस्तावेज़ में बताए गए फ़ॉर्मैट से मेल खाना चाहिए. अगर इस फ़ील्ड को खाली छोड़ दिया जाता है, तो तारीखों को स्ट्रिंग के तौर पर इंपोर्ट किया जाएगा. सिर्फ़ CSV/TFRecord सोर्स के लिए.

sources[i].csvDelimiter

string

CSV फ़ाइलों को डालते समय, एक वर्ण का इस्तेमाल किसी पंक्ति में कॉलम वैल्यू के बीच डिलीमिटर के तौर पर किया जाता है. अगर इसे खाली छोड़ दिया जाता है, तो डिफ़ॉल्ट रूप से ',' लागू हो जाता है. सिर्फ़ CSV सोर्स के लिए.

sources[i].csvQualifier

string

CSV फ़ाइलों को डालते समय, कॉलम की वैल्यू के चारों ओर मौजूद वर्ण (इसे "कोट वर्ण" भी कहा जाता है). अगर इसे खाली छोड़ दिया जाता है, तो डिफ़ॉल्ट रूप से " लागू हो जाता है. सिर्फ़ CSV सोर्स के लिए.

अगर कॉलम की वैल्यू को क्वालिफ़ायर से नहीं घेरा गया है, तो शुरुआत और आखिर में मौजूद व्हाइटस्पेस को काट दिया जाता है. उदाहरण के लिए:

    ..., test,...            <== this value is not qualified
becomes the string value:
    "test"                   <== leading whitespace is stripped
जबकि:
    ...," test",...          <== this value IS qualified with quotes
becomes the string value:
    " test"                  <== leading whitespace remains!

uriPrefix

string

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

startTime

integer

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

endTime

integer

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

प्रॉपर्टी

dictionary

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

columnDataTypeOverrides

dictionary

अगर डेटा टाइप का अपने-आप पता चलने की सुविधा ठीक से काम नहीं कर रही है, तो इस फ़ील्ड में कॉलम के नामों को कुंजी के तौर पर और इनमें से किसी एक को वैल्यू के तौर पर इस्तेमाल करें: COLUMN_DATA_TYPE_STRING, COLUMN_DATA_TYPE_NUMERIC, COLUMN_DATA_TYPE_LONG.

सीमाएं

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

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