برای برشمردن تمام تطابقات بین عناصر دو مجموعه، از ee.Join.inner()
استفاده کنید. خروجی یک اتصال داخلی یک FeatureCollection
است (حتی اگر یک ImageCollection
را به ImageCollection
دیگر بپیوندید). هر ویژگی در خروجی نشان دهنده یک تطابق است که در آن عناصر تطبیق در دو ویژگی ویژگی ذخیره می شوند. برای مثال feature.get('primary')
عنصری در مجموعه اولیه است که با عنصر مجموعه ثانویه ذخیره شده در feature.get('secondary')
مطابقت دارد. (اسامی مختلف برای این خصوصیات را می توان به عنوان آرگومان برای inner()
مشخص کرد، اما 'primary'
و 'secondary'
پیش فرض هستند). روابط یک به چند با چندین ویژگی در خروجی نشان داده می شود. اگر عنصری در هر یک از مجموعه ها مطابقت نداشته باشد، در خروجی وجود ندارد.
پیوستن مثال ها با استفاده از ورودی های ImageCollection
بدون تغییر در ورودی های FeatureCollection
اعمال می شود. همچنین امکان پیوستن FeatureCollection
به ImageCollection
و بالعکس وجود دارد. مثال اسباب بازی زیر را از اتصال داخلی در نظر بگیرید:
ویرایشگر کد (جاوا اسکریپت)
// Create the primary collection. var primaryFeatures = ee.FeatureCollection([ ee.Feature(null, {foo: 0, label: 'a'}), ee.Feature(null, {foo: 1, label: 'b'}), ee.Feature(null, {foo: 1, label: 'c'}), ee.Feature(null, {foo: 2, label: 'd'}), ]); // Create the secondary collection. var secondaryFeatures = ee.FeatureCollection([ ee.Feature(null, {bar: 1, label: 'e'}), ee.Feature(null, {bar: 1, label: 'f'}), ee.Feature(null, {bar: 2, label: 'g'}), ee.Feature(null, {bar: 3, label: 'h'}), ]); // Use an equals filter to specify how the collections match. var toyFilter = ee.Filter.equals({ leftField: 'foo', rightField: 'bar' }); // Define the join. var innerJoin = ee.Join.inner('primary', 'secondary'); // Apply the join. var toyJoin = innerJoin.apply(primaryFeatures, secondaryFeatures, toyFilter); // Print the result. print('Inner join toy example:', toyJoin);
import ee import geemap.core as geemap
کولب (پایتون)
# Create the primary collection. primary_features = ee.FeatureCollection([ ee.Feature(None, {'foo': 0, 'label': 'a'}), ee.Feature(None, {'foo': 1, 'label': 'b'}), ee.Feature(None, {'foo': 1, 'label': 'c'}), ee.Feature(None, {'foo': 2, 'label': 'd'}), ]) # Create the secondary collection. secondary_features = ee.FeatureCollection([ ee.Feature(None, {'bar': 1, 'label': 'e'}), ee.Feature(None, {'bar': 1, 'label': 'f'}), ee.Feature(None, {'bar': 2, 'label': 'g'}), ee.Feature(None, {'bar': 3, 'label': 'h'}), ]) # Use an equals filter to specify how the collections match. toy_filter = ee.Filter.equals(leftField='foo', rightField='bar') # Define the join. inner_join = ee.Join.inner('primary', 'secondary') # Apply the join. toy_join = inner_join.apply(primary_features, secondary_features, toy_filter) # Print the result. display('Inner join toy example:', toy_join)
در مثال قبلی، توجه کنید که رابطه بین جداول در فیلتر تعریف شده است، که نشان می دهد فیلدهای 'foo'
و 'bar'
فیلدهای اتصال هستند. سپس یک اتصال داخلی مشخص شده و به مجموعه ها اعمال می شود. خروجی را بررسی کنید و مشاهده کنید که هر تطابق ممکن به عنوان یک Feature
نشان داده می شود.
برای مثال انگیزشی، پیوستن به اشیاء MODIS ImageCollection
را در نظر بگیرید. دادههای کیفیت MODIS گاهی اوقات در مجموعهای جداگانه از دادههای تصویر ذخیره میشوند، بنابراین یک اتصال داخلی برای پیوستن به دو مجموعه به منظور اعمال دادههای با کیفیت راحت است. در این مورد، زمانهای دریافت تصویر یکسان است، بنابراین یک فیلتر برابر وظیفه تعیین این رابطه بین دو مجموعه را بر عهده دارد:
ویرایشگر کد (جاوا اسکریپت)
// Make a date filter to get images in this date range. var dateFilter = ee.Filter.date('2014-01-01', '2014-02-01'); // Load a MODIS collection with EVI data. var mcd43a4 = ee.ImageCollection('MODIS/MCD43A4_006_EVI') .filter(dateFilter); // Load a MODIS collection with quality data. var mcd43a2 = ee.ImageCollection('MODIS/006/MCD43A2') .filter(dateFilter); // Define an inner join. var innerJoin = ee.Join.inner(); // Specify an equals filter for image timestamps. var filterTimeEq = ee.Filter.equals({ leftField: 'system:time_start', rightField: 'system:time_start' }); // Apply the join. var innerJoinedMODIS = innerJoin.apply(mcd43a4, mcd43a2, filterTimeEq); // Display the join result: a FeatureCollection. print('Inner join output:', innerJoinedMODIS);
import ee import geemap.core as geemap
کولب (پایتون)
# Make a date filter to get images in this date range. date_filter = ee.Filter.date('2014-01-01', '2014-02-01') # Load a MODIS collection with EVI data. mcd43a4 = ee.ImageCollection('MODIS/MCD43A4_006_EVI').filter(date_filter) # Load a MODIS collection with quality data. mcd43a2 = ee.ImageCollection('MODIS/006/MCD43A2').filter(date_filter) # Define an inner join. inner_join = ee.Join.inner() # Specify an equals filter for image timestamps. filter_time_eq = ee.Filter.equals( leftField='system:time_start', rightField='system:time_start' ) # Apply the join. inner_joined_modis = inner_join.apply(mcd43a4, mcd43a2, filter_time_eq) # Display the join result: a FeatureCollection. display('Inner join output:', inner_joined_modis)
برای استفاده از تصاویر به هم پیوسته در خروجی FeatureCollection
، یک تابع ترکیبی را روی خروجی map()
. به عنوان مثال، تصاویر منطبق را می توان در کنار هم قرار داد تا نوارهای کیفیت به داده های تصویر اضافه شوند:
ویرایشگر کد (جاوا اسکریپت)
// Map a function to merge the results in the output FeatureCollection. var joinedMODIS = innerJoinedMODIS.map(function(feature) { return ee.Image.cat(feature.get('primary'), feature.get('secondary')); }); // Print the result of merging. print('Inner join, merged bands:', joinedMODIS);
import ee import geemap.core as geemap
کولب (پایتون)
# Map a function to merge the results in the output FeatureCollection. joined_modis = inner_joined_modis.map( lambda feature: ee.Image.cat( feature.get('primary'), feature.get('secondary') ) ) # Print the result of merging. display("Inner join, merged 'bands':", joined_modis)
اگر چه این تابع بر روی یک FeatureCollection
نگاشت شده است، نتیجه یک ImageCollection
است. هر تصویر در ImageCollection
حاصل دارای تمام نوارهای تصاویر در مجموعه اولیه (در این مثال فقط 'EVI'
) و تمام باندهای تصویر منطبق در مجموعه ثانویه (باندهای با کیفیت) است.