As coleções podem ser agrupadas por localização espacial e valores de propriedade. Para fazer a mesclagem com base na localização espacial, use um filtro withinDistance()
com campos de mesclagem .geo
especificados. O campo .geo
indica que a geometria do item
será usada para calcular a métrica de distância. Por exemplo, considere a tarefa de
encontrar todas as
usinas elétricas a até 100 quilômetros
do Parque Nacional de Yosemite, nos EUA. Para isso, use um filtro nos campos de geometria, com a distância máxima definida como 100 quilômetros usando o parâmetro distance
:
Editor de código (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)
O exemplo anterior mescla uma FeatureCollection
a outra
FeatureCollection
. A mesclagem saveAll()
define uma propriedade (points
) em cada elemento na coleção primary
, que armazena uma lista dos pontos a até 100 km do elemento. A distância de cada ponto para o elemento é armazenada na propriedade distance
de cada ponto associado.
As mesclagens espaciais também podem ser usadas para identificar quais elementos de uma coleção se cruzam com os de outra. Por exemplo, considere duas coleções de elementos: uma coleção primary
contendo polígonos que representam os limites dos estados dos EUA e uma coleção secondary
contendo locais de pontos que representam usinas hidrelétricas. Suponha que seja necessário determinar o número que cruza cada
estado. Isso pode ser feito com uma mesclagem espacial da seguinte maneira:
Editor de código (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);
No exemplo anterior, o filtro intersects()
não armazena
uma distância, como o filtro withinDistance()
. A saída será semelhante
à Figura 1.
