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