Created
April 19, 2024 11:27
-
-
Save marcellobenigno/f6ee17faad284cfcd4a0571438bf02a8 to your computer and use it in GitHub Desktop.
Script de conversão dos arquivos CAR em GeoPackage para dump SQL
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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