2. Tipos de Dados Geoespaciais ¶
Objetivo: Aprender a manipular arquivos geoespaciais (shapefiles, GeoJSON, raster) e transformá-los para análise.
2.1 Trabalhando com Dados Vetoriais¶
Os dados vetoriais são representações espaciais baseadas em pontos, linhas e polígonos. Esses dados são amplamente utilizados em aplicações geoespaciais para modelar características do mundo real, como limites políticos, rodovias, rios e infraestrutura urbana.
Um dos formatos mais comuns para armazenar dados vetoriais é o Shapefile (.shp), desenvolvido pela ESRI. Ele é composto por múltiplos arquivos auxiliares (como pode ser visto no diretorio datasets/Brasil_UF):
- .shp: Armazena a geometria dos objetos espaciais.
- .shx: Índice espacial das geometrias.
- .dbf: Tabela de atributos contendo informações descritivas sobre os objetos.
- .prj: Define o sistema de coordenadas do arquivo.
Neste notebook, vamos carregar um shapefile contendo os limites das unidades federativas do Brasil e explorar sua estrutura.
import geopandas as gpd
#Usando ShapeFile
BASE_DIR = "datasets"
shapefile_path = f"{BASE_DIR}/RJ_2023/RJ_Municipios_2023.shp" # Shapefile das Unidades da Federacao brasileira
gdf_shp = gpd.read_file(shapefile_path)
gdf_shp.head()
CD_MUN | NM_MUN | CD_RGI | NM_RGI | CD_RGINT | NM_RGINT | CD_UF | NM_UF | CD_REGIAO | NM_REGIAO | CD_CONCURB | NM_CONCURB | AREA_KM2 | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 3300100 | Angra dos Reis | 330002 | Angra dos Reis | 3301 | Rio de Janeiro | 33 | Rio de Janeiro | 3 | Sudeste | 3300100 | Angra dos Reis | 813.420 | MULTIPOLYGON (((-44.51649 -23.03589, -44.51633... |
1 | 3300159 | Aperibé | 330012 | Santo Antônio de Pádua | 3304 | Campos dos Goytacazes | 33 | Rio de Janeiro | 3 | Sudeste | None | None | 94.542 | POLYGON ((-42.11437 -21.61204, -42.11394 -21.6... |
2 | 3300209 | Araruama | 330013 | Cabo Frio | 3305 | Macaé - Rio das Ostras - Cabo Frio | 33 | Rio de Janeiro | 3 | Sudeste | 3300209 | Araruama/RJ | 638.276 | POLYGON ((-42.28399 -22.93928, -42.28444 -22.9... |
3 | 3300225 | Areal | 330007 | Petrópolis | 3303 | Petrópolis | 33 | Rio de Janeiro | 3 | Sudeste | 3303906 | Petrópolis/RJ | 110.724 | POLYGON ((-43.09004 -22.23844, -43.09135 -22.2... |
4 | 3300233 | Armação dos Búzios | 330013 | Cabo Frio | 3305 | Macaé - Rio das Ostras - Cabo Frio | 33 | Rio de Janeiro | 3 | Sudeste | 3300704 | Cabo Frio/RJ | 70.977 | MULTIPOLYGON (((-41.88151 -22.74808, -41.88153... |
Outro formato bastante utilizado é o GeoJSON (.geojson), que é baseado em JSON e amplamente adotado devido à sua compatibilidade com aplicações web. A maior diferença entre esses dataframes e um dataframe comum é a coluna geometry, que contém objetos espaciais do tipo POLYGON ou MULTIPOLYGON que representam áreas geográficas com coordenadas de latitude e longitude.
#Usando GeoJson
geojson_path = f"{BASE_DIR}/br_states.json"
gdf = gpd.read_file(geojson_path)
gdf.head()
id | FID_Export | SIGLA | Total | Homens | Mulheres | Urbana | Rural | TX_Alfab | FID_estado | Estado | FK_macro | PK_sigla | geometry | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | AC | 0 | AC | 557526 | 280983 | 276543 | 370267 | 187259 | 65.154545 | -1 | Acre | N | AC | MULTIPOLYGON (((-66.80619 -9.81446, -66.64485 ... |
1 | AL | 1 | AL | 2822621 | 1378942 | 1443679 | 1919739 | 902882 | 59.364356 | -1 | Alagoas | NE | AL | MULTIPOLYGON (((-35.15263 -8.91373, -35.15628 ... |
2 | AM | 2 | AM | 2812557 | 1414367 | 1398190 | 2107222 | 705335 | 72.250000 | -1 | Amazonas | N | AM | MULTIPOLYGON (((-67.3259 2.02976, -67.30001 1.... |
3 | AP | 3 | AP | 477032 | 239453 | 237579 | 424683 | 52349 | 83.650000 | -1 | Amapá | N | AP | MULTIPOLYGON (((-50.09389 0.70205, -50.15695 0... |
4 | BA | 4 | BA | 13070250 | 6462033 | 6608217 | 8772348 | 4297902 | 71.163373 | -1 | Bahia | NE | BA | MULTIPOLYGON (((-38.64899 -18.03612, -38.65822... |
Exibir informações gerais do GeoDataFrame¶
gdf_shp.info()
print("\n-----\n")
gdf_shp.crs # Verificar a projeção cartográfica
<class 'geopandas.geodataframe.GeoDataFrame'> RangeIndex: 92 entries, 0 to 91 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 CD_MUN 92 non-null object 1 NM_MUN 92 non-null object 2 CD_RGI 92 non-null object 3 NM_RGI 92 non-null object 4 CD_RGINT 92 non-null object 5 NM_RGINT 92 non-null object 6 CD_UF 92 non-null object 7 NM_UF 92 non-null object 8 CD_REGIAO 92 non-null object 9 NM_REGIAO 92 non-null object 10 CD_CONCURB 49 non-null object 11 NM_CONCURB 49 non-null object 12 AREA_KM2 92 non-null float64 13 geometry 92 non-null geometry dtypes: float64(1), geometry(1), object(12) memory usage: 10.2+ KB -----
<Geographic 2D CRS: EPSG:4674> Name: SIRGAS 2000 Axis Info [ellipsoidal]: - Lat[north]: Geodetic latitude (degree) - Lon[east]: Geodetic longitude (degree) Area of Use: - name: Latin America - Central America and South America - onshore and offshore. Brazil - onshore and offshore. - bounds: (-122.19, -59.87, -25.28, 32.72) Datum: Sistema de Referencia Geocentrico para las AmericaS 2000 - Ellipsoid: GRS 1980 - Prime Meridian: Greenwich
Visualizacao do shapefile usando Folium¶
import folium
# Mapa centralizado no Brasil
mapa = folium.Map(location=[-22.9068, -43.1729], zoom_start=8)
# Adicionando os limites das unidades federativas como o GeoJson
for _, row in gdf_shp.iterrows():
folium.GeoJson(
row["geometry"],
name=row["NM_MUN"],
tooltip=str(row["AREA_KM2"]) + " km²",
style_function=lambda x: {"color": "blue"},
).add_to(mapa)
mapa