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.
123456789101112131415161718192021222324252627282930313233343536import 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.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo