مجموعهها را میتوان بر اساس موقعیت مکانی و همچنین ارزشهای دارایی به یکدیگر ملحق کرد. برای پیوستن بر اساس موقعیت مکانی، از یک فیلتر withinDistance()
با فیلدهای پیوستن .geo
مشخص شده استفاده کنید. فیلد .geo
نشان می دهد که هندسه آیتم باید برای محاسبه متریک فاصله استفاده شود. به عنوان مثال، وظیفه یافتن تمام نیروگاه ها در 100 کیلومتری پارک ملی یوسمیتی، ایالات متحده را در نظر بگیرید. برای این منظور، از یک فیلتر روی فیلدهای هندسه استفاده کنید که حداکثر مسافت را با استفاده از پارامتر distance
روی 100 کیلومتر تنظیم کنید:
ویرایشگر کد (جاوا اسکریپت)
// Load a primary collection: protected areas (Yosemite National Park). var primary = ee.FeatureCollection("WCMC/WDPA/current/polygons") .filter(ee.Filter.eq('NAME', 'Yosemite National Park')); // Load a secondary collection: power plants. var powerPlants = ee.FeatureCollection('WRI/GPPD/power_plants'); // Define a spatial filter, with distance 100 km. var distFilter = ee.Filter.withinDistance({ distance: 100000, leftField: '.geo', rightField: '.geo', maxError: 10 }); // Define a saveAll join. var distSaveAll = ee.Join.saveAll({ matchesKey: 'points', measureKey: 'distance' }); // Apply the join. var spatialJoined = distSaveAll.apply(primary, powerPlants, distFilter); // Print the result. print(spatialJoined);
import ee import geemap.core as geemap
کولب (پایتون)
# Load a primary collection: protected areas (Yosemite National Park). primary = ee.FeatureCollection('WCMC/WDPA/current/polygons').filter( ee.Filter.eq('NAME', 'Yosemite National Park') ) # Load a secondary collection: power plants. power_plants = ee.FeatureCollection('WRI/GPPD/power_plants') # Define a spatial filter, with distance 100 km. dist_filter = ee.Filter.withinDistance( distance=100000, leftField='.geo', rightField='.geo', maxError=10 ) # Define a saveAll join. dist_save_all = ee.Join.saveAll(matchesKey='points', measureKey='distance') # Apply the join. spatial_joined = dist_save_all.apply(primary, power_plants, dist_filter) # Print the result. display(spatial_joined)
توجه داشته باشید که مثال قبلی یک FeatureCollection
را به FeatureCollection
دیگر میپیوندد. join saveAll()
یک ویژگی ( points
) را برای هر ویژگی در مجموعه primary
تنظیم می کند که لیستی از نقاط را در 100 کیلومتری ویژگی ذخیره می کند. فاصله هر نقطه تا ویژگی در ویژگی distance
هر نقطه متصل ذخیره می شود.
از اتصالات فضایی نیز می توان برای شناسایی ویژگی های یک مجموعه با ویژگی های مجموعه دیگر استفاده کرد. به عنوان مثال، دو مجموعه ویژگی را در نظر بگیرید: یک مجموعه primary
حاوی چند ضلعی که مرزهای ایالات ایالات متحده را نشان می دهد، یک مجموعه secondary
حاوی مکان های نقطه ای که نیروگاه ها را نشان می دهد. فرض کنید نیاز به تعیین عدد متقاطع هر حالت وجود دارد. این را می توان با اتصال فضایی به صورت زیر انجام داد:
ویرایشگر کد (جاوا اسکریپت)
// Load the primary collection: US state boundaries. var states = ee.FeatureCollection('TIGER/2018/States'); // Load the secondary collection: power plants. var powerPlants = ee.FeatureCollection('WRI/GPPD/power_plants'); // Define a spatial filter as geometries that intersect. var spatialFilter = ee.Filter.intersects({ leftField: '.geo', rightField: '.geo', maxError: 10 }); // Define a save all join. var saveAllJoin = ee.Join.saveAll({ matchesKey: 'power_plants', }); // Apply the join. var intersectJoined = saveAllJoin.apply(states, powerPlants, spatialFilter); // Add power plant count per state as a property. intersectJoined = intersectJoined.map(function(state) { // Get "power_plant" intersection list, count how many intersected this state. var nPowerPlants = ee.List(state.get('power_plants')).size(); // Return the state feature with a new property: power plant count. return state.set('n_power_plants', nPowerPlants); }); // Make a bar chart for the number of power plants per state. var chart = ui.Chart.feature.byFeature(intersectJoined, 'NAME', 'n_power_plants') .setChartType('ColumnChart') .setSeriesNames({n_power_plants: 'Power plants'}) .setOptions({ title: 'Power plants per state', hAxis: {title: 'State'}, vAxis: {title: 'Frequency'}}); // Print the chart to the console. print(chart);
در مثال قبلی، توجه داشته باشید که فیلتر intersects()
فاصله ای را مانند فیلتر withinDistance()
ذخیره نمی کند. خروجی باید چیزی شبیه به شکل 1 باشد.
