Üç boyutlu birleştirme

Koleksiyonlar, hem uzamsal konuma hem de mülk değerlerine göre birleştirilebilir. Uzamsal konuma göre birleştirme yapmak için .geo birleştirme alanlarının belirtildiği bir withinDistance() filtresi kullanın. .geo alanı, mesafe metriğinin hesaplanmasında öğenin geometrisinin kullanılacağını gösterir. Örneğin, ABD'deki Yosemite Ulusal Parkı'nın 100 kilometre yakınındaki tüm santralları bulma görevini düşünün. Bu amaçla, geometri alanlarında distance parametresi kullanılarak maksimum mesafenin 100 kilometreye ayarlandığı bir filtre kullanın:

Kod Düzenleyici (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 kurulumu

Python API'si ve etkileşimli geliştirme için geemap kullanımı hakkında bilgi edinmek üzere Python Ortamı sayfasına bakın.

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)

Önceki örnekte bir FeatureCollection'nin başka bir FeatureCollection ile birleştirildiğini unutmayın. saveAll() birleştirme işlemi, primary koleksiyonundaki her bir özellikte, özelliğin 100 km yakınındaki noktaların listesini depolayan bir özellik (points) ayarlar. Her bir noktanın özelliklere olan mesafesi, birleştirilen her bir noktanın distance özelliğinde depolanır.

Mekansal birleştirmeler, bir koleksiyondaki hangi özelliklerin başka bir koleksiyondaki özelliklerle kesiştiğini belirlemek için de kullanılabilir. Örneğin, iki özellik koleksiyonu düşünün: ABD eyaletlerinin sınırlarını temsil eden poligonlar içeren bir primary koleksiyonu ve elektrik santrallerini temsil eden nokta konumları içeren bir secondary koleksiyonu. Her bir durumla kesişen sayıyı belirlemeniz gerektiğini varsayalım. Bu işlem, aşağıdaki gibi bir uzamsal birleştirmeyle yapılabilir:

Kod Düzenleyici (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);

Önceki örnekte, intersects() filtresinin withinDistance() filtresi gibi bir mesafe kaydetmediğini unutmayın. Çıkış Şekil 1'e benzer şekilde görünmelidir.

CA WRS2 birleştirme
Şekil 1. Her ABD eyaletinin kesiştiği enerji santrallerinin sayısını gösteren çubuk grafik.