Skip to content

Instantly share code, notes, and snippets.

@marcellobenigno
Created April 19, 2024 11:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save marcellobenigno/f6ee17faad284cfcd4a0571438bf02a8 to your computer and use it in GitHub Desktop.
Save marcellobenigno/f6ee17faad284cfcd4a0571438bf02a8 to your computer and use it in GitHub Desktop.
Script de conversão dos arquivos CAR em GeoPackage para dump SQL
import os
import subprocess
import geopandas as gpd
from datetime import datetime
# Diretório onde os arquivos estão localizados
path = '/Users/marcellodebarrosfilho/Downloads/car_2024_rep'
# Mapeamento de colunas para o banco de dados
column_mapping = {
'nom_tema': 'nome_tema',
'municipio': 'nom_munici',
'ind_tipo': 'tipo_imove',
'ind_status': 'situacao',
'des_condic': 'condicao_i',
}
# Padrão para extração de cod_ibge_m
pattern = r'-(\d+)-'
# Listar arquivos GeoPackage (.gpkg)
geopack_list = [file for file in os.listdir(path) if file.endswith('.gpkg')]
# Diretório para arquivos SHP
shp_dir = os.path.join(path, 'shp')
# Verifica se o diretório shp existe, caso contrário, cria-o
if not os.path.exists(shp_dir):
os.makedirs(shp_dir)
# Diretório para arquivos SQL
sql_dir = os.path.join(path, 'sql')
# Verifica se o diretório sql existe, caso contrário, cria-o
if not os.path.exists(sql_dir):
os.makedirs(sql_dir)
for geopack in geopack_list:
file_name = os.path.splitext(geopack)[0]
geo_path = os.path.join(path, geopack)
# Lê o GeoPackage e renomeia colunas
gdf = gpd.read_file(geo_path, layer=file_name)
gdf = gdf.rename(columns=column_mapping)
# Obtém cod_ibge_m a partir de cod_imovel
gdf['cod_ibge_m'] = gdf['cod_imovel'].str.extract(pattern, expand=False)
# Adiciona coluna 'criado' com timestamp atual
gdf['criado'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S %Z')
# Adiciona coluna 'modificado' com timestamp atual
gdf['modificado'] = datetime.now().strftime('%Y-%m-%d %H:%M:%S %Z')
# Diretório para salvar o arquivo shapefile
shapefile_dir = os.path.join(path, 'shp', f'{file_name}.shp')
# Salva o GeoDataFrame como shapefile
gdf.to_file(shapefile_dir, driver='ESRI Shapefile', encoding='utf-8')
# Diretório para salvar o arquivo SQL
sql_path = os.path.join(sql_dir, f'{file_name}.sql')
# Comando shp2pgsql para importar shapefile para banco de dados
shp2pgsql_cmd = [
'shp2pgsql',
'-a',
'-s', '4326',
'-t', '2D',
shapefile_dir,
'mapas_car'
]
# Redireciona a saída do comando para o arquivo .sql
with open(sql_path, 'w') as sql_file:
subprocess.run(shp2pgsql_cmd, stdout=sql_file, text=True)
print(f"Arquivo || {file_name}.sql || gerado com sucesso em {sql_path}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment