MODIS সোয়াথ ডেটা থেকে দ্রাঘিমাংশকে দ্রাঘিমাংশে নির্দিষ্ট অক্ষাংশে মানগুলি উত্তোলন


9

আমি পৃথিবীর নির্দিষ্ট দাগগুলির উপরে সময়ের ক্রিয়া হিসাবে যথাক্রমে জলীয় বাষ্প (পিডাব্লুভি), ওজোন এবং অ্যারোসোলগুলির পরিমাণ নির্ধারণ করার চেষ্টা করছি, যথা আমাদের জ্যোতির্বিদ্যা সংক্রান্ত পর্যবেক্ষণগুলি। এটি করার জন্য, আমি ইতিমধ্যে কিছু পাইথন কোড পেয়েছি modapsclientযা ব্যবহার করে আমি আগ্রহী সেই নির্দিষ্ট অক্ষাংশ এবং দ্রাঘিমাংশ কভার করে দু'বার দৈনিক MODIS Aqua এবং Terra MYDATML2 এবং MODATML2 পণ্য ডাউনলোড করবে using

আমি যে বিষয়ে নিশ্চিত নই তা কীভাবে আমি চাইব যে নির্দিষ্ট পরিমাণগুলি আমি চাই যেমন মোডিস ডেটা নেওয়া হয়েছিল এবং পিডাব্লুভিও আমার পর্যবেক্ষণের নির্দিষ্ট অক্ষাংশ এবং দ্রাঘিমাংশের জন্য তাদের মূল্যবোধের একটি সময় ধারাবাহিক করে তুলবে। MYDATML2 পণ্যগুলিতে 2D অক্ষাংশ এবং দ্রাঘিমাংশ গ্রিড রয়েছে বলে মনে হয় Cell_Along_Swath_5kmএবং Cell_Across_Swath_5kmতাই আমি অনুমান করি যে এটি এটিকে টাইল বা গ্রিড ডেটার বিপরীতে সোয়াথ ডেটা করে তোলে ? আমি যে পরিমাণগুলি চাই Precipitable_Water_Infrared_ClearSkyতাও এর বিপরীতে মনে হয় Cell_Along_Swath_5kmএবং Cell_Across_Swath_5kmতবে আমি নিশ্চিত নই যে নির্দিষ্ট লাত্রে আমি কীভাবে পিডাব্লুভিভি মানটি পেতে পারি, আমি আগ্রহী? দয়া করে সহায়তা করবেন?


আপনি কি চিত্রের কোনও লিঙ্ক বা এর নমুনা সরবরাহ করতে পারেন?
Andrea Massetti

নিশ্চিত, এখানে মোডিস আর্কাইভে একটি উদাহরণ ফাইল রয়েছে: ladsweb.modaps.eosdis.nasa.gov/archive/allData/61/MODATML2/2018/…
অ্যাস্ট্রোস্পেন্পার

হাই, আপনি আমার উত্তর চেষ্টা করার সুযোগ পেয়েছেন?
Andrea Massetti

1
দুঃখিত, আমি সাতটি ডেটা থেকে অনুরূপ পিডাব্লুভিভি নির্ধারণের উপর ভিত্তি করে একটি সম্মেলনে উপস্থিত হয়েছি ... আপনার আপডেট হওয়া কোডটি একই কক্ষের জন্য পানোপ্লিজজে দেখতে পাওয়ায় আমাকে একই মান দিচ্ছে (অ্যাকাউন্টে আলাদা অ্যারে সূচক আদেশ এবং একটি গ্রহণ করে অ্যারে ইনডেক্সে 'বাই অফ 1' পার্থক্য শুরু হয়)
অ্যাস্ট্রোসনার্স

উত্তর:


1

[সম্পাদনা 1 - আমি পিক্সেল স্থানাঙ্ক অনুসন্ধান অনুসন্ধান করেছি]

এই নমুনা ব্যবহার MODATML আপনি প্রদান এবং gdal গ্রন্থাগার ব্যবহার করে। জিডিএল দিয়ে এইচডিএফ খুলুন:

import gdal
dataset = gdal.Open(r"E:\modis\MODATML2.A2018182.0800.061.2018182195418.hdf")

তারপরে আমরা দেখতে চাই যে আমাদের যেগুলি প্রয়োজনীয় প্রয়োজন তা সঠিকভাবে আমদানির জন্য সাবডেটসেটগুলি কীভাবে নামকরণ করা হয়েছে:

datasets_meta = dataset.GetMetadata("SUBDATASETS")

এটি একটি অভিধান প্রদান করে:

datasets_meta
>>>{'SUBDATASET_1_NAME': 'HDF4_EOS:EOS_SWATH:"E:\\modis\\MODATML2.A2018182.0800.061.2018182195418.hdf":atml2:Cloud_Optical_Thickness', 
'SUBDATASET_1_DESC': '[406x271] Cloud_Optical_Thickness atml2 (16-bit integer)',
'SUBDATASET_2_NAME':'HDF4_EOS:EOS_SWATH:"E:\\modis\\MODATML2.A2018182.0800.061.2018182195418.hdf":atml2:Cloud_Effective_Radius',
'SUBDATASET_2_DESC': '[406x271] Cloud_Effective_Radius atml2 (16-bit integer)',
[....]}

ধরা যাক আমরা প্রথম পরিবর্তনশীল, মেঘ অপটিকাল বেধ পেতে চাই, আমরা এর নামটি দ্বারা এটি অ্যাক্সেস করতে পারি:

datasets_meta['SUBDATASET_1_NAME']
>>>'HDF4_EOS:EOS_SWATH:"E:\\modis\\MODATML2.A2018182.0800.061.2018182195418.hdf":atml2:Cloud_Optical_Thickness'

এখন আমরা আবার মেমরি কলিংয়ে ভেরিয়েবলটি লোড করতে পারি Oআপনি () পদ্ধতি:

Cloud_opt_th = gdal.Open(datasets_meta['SUBDATASET_1_NAME'])

উদাহরণস্বরূপ, আপনি 'SUBDATASET_20_NAME' সরবরাহ করে আপনার আগ্রহী প্রিপিবিয়েটিভ_ওয়াটার_আইনফ্রেড_ক্লেয়ারস্কি অ্যাক্সেস করতে পারেন। ডেটাসেট_মেটা অভিধানে কেবল একবার দেখুন।

তবে, ভেরিয়েবলটি নিষ্ক্রিয় করা একটি জিওপ্রোজেকশন (var.GetGeoproication ()) নেই যেমন আপনি জিওটিফের মতো অন্যান্য ফাইল ধরণের থেকে আশা করতে পারেন। আপনি ভেরিয়েবলটিকে একটি নমপি অ্যারে হিসাবে লোড করতে পারেন এবং প্রডাকশন ছাড়াই 2 ডি ভেরিয়েবল প্লট করতে পারেন:

Cloud_opt_th_array = Cloud_opt_th.ReadAsArray()
import matplotlib.pyplot as plt
plt.imshow(Cloud_opt_th_array)

এখন, যেহেতু কোনও ভূ-প্রক্ষেপণ নেই, তাই আমরা চলকটির মেটাডেটা দেখতে যাব:

Cloud_opt_th_meta = Cloud_opt_th.GetMetadata()

এটি অন্য একটি অভিধান যা আপনার প্রয়োজনীয় সমস্ত তথ্য অন্তর্ভুক্ত করে, সাবমলিংয়ের দীর্ঘ বিবরণ সহ (আমি লক্ষ্য করেছি এটি কেবল প্রথম সাবড্যাসেট দিয়ে দেওয়া হয়েছে), এতে এই সেল_আলং_সথের ব্যাখ্যা রয়েছে:

Cloud_opt_th_meta['1_km_to_5_km_subsampling_description']
>>>'Each value in this dataset does not represent an average of properties over a 5 x 5 km grid box, but rather a single sample from within each 5 km box. Normally, pixels in across-track rows 4 and 9 (counting in the direction of increasing scan number) out of every set of 10 rows are used for subsampling the 1 km retrievals to a 5 km resolution. If the array contents are determined to be all fill values after selecting the default pixel subset (e.g., from failed detectors), a different pair of pixel rows is used to perform the subsampling. Note that 5 km data sets are centered on rows 3 and 8; the default sampling choice of 4 and 9 is for better data quality and avoidance of dead detectors on Aqua. The row pair used for the 1 km sample is always given by the first number and last digit of the second number of the attribute Cell_Along_Swath_Sampling. The attribute Cell_Across_Swath_Sampling indicates that columns 3 and 8 are used, as they always are, for across-track sampling. Again these values are to be interpreted counting in the direction of the scan, from 1 through 10 inclusively. For example, if the value of attribute Cell_Along_Swath_Sampling is 3, 2028, 5, then the third and eighth pixel rows were used for subsampling. A value of 4, 2029, 5 indicates that the default fourth and ninth rows pair was used.'

আমি মনে করি এর অর্থ এই 1 কিলোমিটার পিক্সেলের উপর ভিত্তি করে 5 কিমি 5x5 সেন্সিং অ্যারেতে একটি নির্দিষ্ট অবস্থানে ঠিক পিক্সেল মান নিয়ে নির্মিত হয়েছিল (অবস্থানটি মেটাডাটাতে নির্দেশিত হয়েছে, আমি মনে করি এটি ত্রুটিগুলি হ্রাস করার জন্য একটি উপকরণ জিনিস)।

যাইহোক, এই মুহুর্তে আমাদের কাছে 1x1 কিমি কোষের একটি অ্যারে রয়েছে (উপরে সাবমলিংয়ের বর্ণনা দেখুন, এর পিছনে বিজ্ঞান সম্পর্কে নিশ্চিত নয়)। প্রতিটি পিক্সেল সেন্ট্রয়েডের স্থানাঙ্কগুলি পেতে আমাদেরকে অক্ষাংশ এবং দ্রাঘিমাংশের সাবডেটেসেটগুলি লোড করতে হবে।

Latitude = gdal.Open(datasets_meta['SUBDATASET_66_NAME']).ReadAsArray()
Longitude = gdal.Open(datasets_meta['SUBDATASET_67_NAME']).ReadAsArray()

উদাহরণ স্বরূপ,

Longitude
>>> array([[-133.92064, -134.1386 , -134.3485 , ..., -154.79303, -154.9963 ,
    -155.20723],
   [-133.9295 , -134.14743, -134.3573 , ..., -154.8107 , -155.01431,
    -155.2256 ],
   [-133.93665, -134.1547 , -134.36465, ..., -154.81773, -155.02109,
    -155.23212],
   ...,
   [-136.54477, -136.80055, -137.04684, ..., -160.59378, -160.82101,
    -161.05663],
   [-136.54944, -136.80536, -137.05179, ..., -160.59897, -160.8257 ,
    -161.06076],
   [-136.55438, -136.81052, -137.05714, ..., -160.6279 , -160.85527,
    -161.09099]], dtype=float32)        

আপনি লক্ষ্য করতে পারেন যে অক্ষাংশ এবং দ্রাঘিমাংশ স্থানাঙ্ক প্রতিটি পিক্সেলের জন্য আলাদা।

বলুন যে আপনার পর্যবেক্ষণ স্থিতিশীল ল্যাট_বস, লং_বগুলি, আপনি x, y স্থানাঙ্কের পার্থক্যকে কমিয়ে আনার চেয়ে অবস্থিত:

coordinates = np.unravel_index((np.abs(Latitude - lat_obs) + np.abs(Longitude - long_obs)).argmin(), Latitude.shape)

এবং আপনার মান বের করুন

Cloud_opt_th_array[coordinates]

তথ্যের জন্য ধন্যবাদ তবে সমন্বিত রূপান্তর অংশটি নিয়ে আমার সমস্যা হচ্ছে; Longitude_pxএবং Latitude_pxউভয় শূন্য দৈর্ঘ্যের অ্যারে আছে। এছাড়াও gdalনিজে থেকে কী রূপান্তরটি পরিচালনা করার কোনও উপায় আছে ? (বরং 1 ডিগ্রি প্রায় অনুমানের উপর নির্ভর করে X মাইলের নং নম্বর এবং তারপরে পুনরায় এটি
কিমিটারের সাথে পুনঃনির্মাণ

অক্ষাংশ এবং দ্রাঘিমাংশ সাবডেটসেট হিসাবে প্রদত্ত হয়, যথা 66 66 এবং। 67। আমি দ্বিতীয় অংশটি আপডেট করব।
Andrea Massetti

@astrosnapper এখন উত্তরটি আপনার প্রশ্নের সম্পূর্ণ সমাধান করবে address
Andrea Massetti
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.