#COVID-RADAR Metodologia: Extração de centróide da base de setores censitários do IBGE

Jamais perca o seu equilíbrio por mais forte que seja o vento da tempestade

Ponto de Equilíbrio

(vulgo centróide de objetos de densidade homogênia)

Última atualização: 23/07/2020

Metodologia: Extração de centróide da base de setores censitários do IBGE

Mas o que são centroides? O centroide é o ponto que minimiza a distância para todas as bordas da figura geométrica (o “centro” na maior parte dos casos), em objetos que apresentam densidade homogênea este também corresponde ao centro de massa desse objeto (lugar onde conseguimos equilibra-lo).

 

O centroide é o ponto que minimiza a distância para todas as bordas da figura geométrica. No caso de objetos de densidade homogênea também corresponde ao centro de massa. (gif de travisruskus.)

 

O objetivo dessa passagem é extrair os centroides dos setores censitários do IBGE. Para isso os shapefiles dos setores foram baixados manualmente a partir do site abaixo:

https://www.ibge.gov.br/geociencias/organizacao-do-territorio/malhas-territoriais/26565-malhas-de-setores-censitarios-divisoes-intramunicipais.html?=&t=downloads

 

Print da página de downloads do IBGE indicando onde podem ser encontrados os arquivos do tipo shapefile para os setores censitários de cada um dos estados.

 

Após o download, os arquivos foram extraídos em uma pasta e tratados pelo código abaixo. No código utilizamos a biblioteca Geopandas para carregar e tratar os shapefiles.

import os
import glob
import pandas as pd
import geopandas as geopd

# Setting paths
local_path = "carregamento_do_banco/%s"
dir_path = local_path % "dados_brutos/setores_censitarios/*/*.shp"


# A função glob anda por todas as pastas descritas pelo caminho
# extraindo de acordo com a expressão definida.
# No caso setores_censitarios/*/*.shp, o /*/ indica que deve
# rodar em todas sub pastas procurando todos os aquivos terminados com
# .shp indicado pela expressão *.shp
shape_files = glob.glob(dir_path, recursive=True)


def getXY(pt):
    """
    Extraí do ponto as coordenadas X(Longetude) e Y(Latitude).
    Args:

        pt(point): Ponto que será extraídos os componentes da coordenada.
    Return:
        Tuple: Retorna um tuple onde o primeiro elemento é a
        Longetude e o segundo é a Latitude.
    """
    return (pt.x, pt.y)


list_data = []
# Roda por todos os arquivos que foram mapeados pelo glob
# carregando utiliznado a função de read file do Geopandas
# Posteriormente faz o cálculo dos centroides e extrai as coodenadas.
for shape in shape_files:
    print(shape)
    states = geopd.read_file(shape)
    states["centroid"] = states["geometry"].centroid
    lat_lon = pd.DataFrame(
        map(getXY, states["centroid"]), columns=["lon", "lat"])
    df = pd.concat([states, lat_lon], axis=1)

    df = df[[
        'ID', 'CD_GEOCODI', 'TIPO', 'CD_GEOCODB', 'NM_BAIRRO', 'CD_GEOCODS',
        'NM_SUBDIST', 'CD_GEOCODD', 'NM_DISTRIT', 'CD_GEOCODM', 'NM_MUNICIP',
        'NM_MICRO', 'NM_MESO', "centroid", "lat", "lon"]].to_dict("records")
    list_data.extend(df)

all_shapes = pd.DataFrame(list_data)
all_shapes.rename(
    columns={'CD_GEOCODI': "sector_code_ibge"}, inplace=True)
all_shapes.columns = [x.lower() for x in all_shapes.columns]
all_shapes[["sector_code_ibge", "lat", "lon"]].to_csv(
    local_path % "dados_tratados/geoareas/ibge_centroids.csv", 
    index=False)

 

Com o código acima obtemos os centróides dos setores censitários do IBGE.

Mapa mostrando os setores censitários e seus respectivos centróides resultado do código descrito acima.
Compartilhar