Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Junções Espaciais com Geopandas | Técnicas de Análise Espacial
Análise Geoespacial com Python

Junções Espaciais com Geopandas

Deslize para mostrar o menu

Junções espaciais são uma maneira poderosa de combinar conjuntos de dados geoespaciais com base em seus relacionamentos espaciais, em vez de apenas corresponder valores de atributos. Com o geopandas, é possível realizar junções espaciais facilmente para responder a perguntas como "Quais pontos estão dentro de quais polígonos?" ou "Quais elementos estão mais próximos uns dos outros?" A principal ferramenta para isso no geopandas é o método sjoin(), que mescla dois objetos GeoDataFrame avaliando seus relacionamentos espaciais.

Suponha que você tenha dois conjuntos de dados espaciais: um contendo localizações de escolas (como pontos) e outro contendo limites de bairros (como polígonos). Ao realizar uma junção espacial, é possível determinar em qual bairro cada escola está localizada ou contar o número de escolas por bairro.

O método sjoin() no geopandas permite especificar o tipo de relacionamento espacial a ser utilizado na junção, como within, contains ou intersects. Além disso, é possível escolher o tipo de junção — left, right ou inner — que determina como os registros de cada conjunto de dados serão combinados e mantidos no resultado.

123456789101112131415161718192021222324252627282930313233343536
import geopandas as gpd from shapely.geometry import Point, Polygon # Create GeoDataFrame of points (e.g., schools) points = gpd.GeoDataFrame({ "school": ["A", "B", "C"], "geometry": [ Point(1, 1), Point(2, 2), Point(3, 3) ] }) # Create GeoDataFrame of polygons (e.g., neighborhoods) polygons = gpd.GeoDataFrame({ "neighborhood": ["Red", "Blue"], "geometry": [ Polygon([(0,0), (0,2), (2,2), (2,0)]), # Red neighborhood Polygon([(2,2), (2,4), (4,4), (4,2)]) # Blue neighborhood ] }) # Spatial join: which school is in which neighborhood? left_join = gpd.sjoin(points, polygons, how="left", predicate="within") right_join = gpd.sjoin(points, polygons, how="right", predicate="within") inner_join = gpd.sjoin(points, polygons, how="inner", predicate="within") print("Left Join Result:") print(left_join[["school", "neighborhood"]]) print("\nRight Join Result:") print(right_join[["school", "neighborhood"]]) print("\nInner Join Result:") print(inner_join[["school", "neighborhood"]])

No exemplo acima, são apresentados três tipos de junções:

  • Left join: mantém todos os pontos (escolas), adicionando informações de bairro quando disponíveis;
  • Right join: mantém todos os polígonos (bairros), adicionando as escolas contidas neles;
  • Inner join: mantém apenas os pontos que estão dentro de um bairro.

A escolha do tipo de junção correto depende dos objetivos da análise. Por exemplo, se for necessário considerar todas as escolas independentemente de estarem dentro de um bairro, utilize o left join. Se o objetivo for visualizar todos os bairros e as escolas que eles contêm, utilize o right join. Se o interesse for apenas nas escolas que estão dentro de bairros, utilize o inner join.

question mark

Qual afirmação sobre junções espaciais no geopandas está correta?

Selecione a resposta correta

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 1

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Seção 2. Capítulo 1
some-alt