اتصالات فضایی

مجموعه‌ها را می‌توان بر اساس موقعیت مکانی و همچنین ارزش‌های دارایی به یکدیگر ملحق کرد. برای پیوستن بر اساس موقعیت مکانی، از یک فیلتر 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);

راه اندازی پایتون

برای اطلاعات در مورد API پایتون و استفاده از geemap برای توسعه تعاملی به صفحه محیط پایتون مراجعه کنید.

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 باشد.

پیوستن به CA WRS2
شکل 1. نمودار میله ای تعداد نیروگاه هایی را که هر ایالت ایالات متحده را قطع می کنند نشان می دهد.