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 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:
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.