عمليات الربط المكاني

يمكن دمج المجموعات حسب الموقع الجغرافي بالإضافة إلى قيم السمات. للانضمام استنادًا إلى الموقع الجغرافي، استخدِم فلتر withinDistance() مع حقول دمج .geo محدّدة. يشير الحقل .geo إلى أنّه سيتم استخدام شكل العنصر لحساب مقياس المسافة. على سبيل المثال، لنفترض أنّ المهمة هي العثور على كل محطات الطاقة ضمن نطاق 100 كيلومتر من متنزه يوسميتي الوطني في الولايات المتحدة. لهذا الغرض، استخدِم فلترًا على حقول الهندسة ، مع ضبط الحد الأقصى للمسافة على 100 كيلومتر باستخدام المَعلمة distance:

محرِّر الرموز البرمجية (JavaScript)

// 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);

إعداد لغة Python

اطّلِع على صفحة بيئة Python للحصول على معلومات عن واجهة برمجة التطبيقات Python API واستخدام IDE geemap لتطوير التطبيقات التفاعلي.

import ee
import geemap.core as geemap

Colab (Python)

# 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 آخر. يحدّد الانضمام saveAll() سمة (points) على كلّ ميزة في مجموعة primary التي تخزّن قائمة بالنقاط ضمن نطاق 100 كيلومتر من الميزة. يتم تخزين المسافة من كل نقطة إلى العنصر في سمة distance لكل نقطة تمّ ربطها.

يمكن أيضًا استخدام عمليات الربط المكاني لتحديد العناصر في مجموعة واحدة تتقاطع مع العناصر في مجموعة أخرى. على سبيل المثال، نأخذ مجموعتَين من العناصر: مجموعة primary تحتوي على مضلّعات تمثّل حدود الولايات الأمريكية، ومجموعة secondary تحتوي على مواقع نقاط تمثّل محطات الطاقة. لنفترض أنّه يجب تحديد عدد الطرق التي تتقاطع مع كل ولاية. يمكن إجراء ذلك من خلال عملية دمج مكاني على النحو التالي:

محرِّر الرموز البرمجية (JavaScript)

// 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. رسم بياني شريطي يعرِض عدد محطات الطاقة التي تتقاطع مع كل ولاية أمريكية