Skip to content

Commit

Permalink
implementação das coordenadas (#32)
Browse files Browse the repository at this point in the history
  • Loading branch information
PauloRadatz authored May 28, 2024
2 parents 6ec0ec7 + 88cd300 commit e8b2f38
Show file tree
Hide file tree
Showing 10 changed files with 356 additions and 263 deletions.
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -109,3 +109,6 @@ ENV/
/testes.py
/aqui.py
/proposta_tela.py
.gitignore
**.code-workspace
output/
93 changes: 45 additions & 48 deletions bdgd_tools/core/Core.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,9 @@
import geopandas as gpd

from bdgd_tools import Sample, Case, Circuit, LineCode, Line, LoadShape, Transformer, RegControl, Load
from bdgd_tools.core.Utils import load_json, merge_entities_tables, inner_entities_tables, create_output_file
from bdgd_tools.core.Utils import load_json, merge_entities_tables, inner_entities_tables, create_output_file, create_output_feeder_coords, create_dfs_coords
from bdgd_tools.gui.GUI import GUI
import bdgd_tools.model.BusCoords as Coords


class Table:
Expand All @@ -36,30 +37,27 @@ def __str__(self):


class JsonData:
def __init__(self, file_name):
"""
Inicializa a classe JsonData com o nome do arquivo de entrada.
def __init__(self, filename):
"""Inicializa a classe JsonData com o nome do arquivo de entrada.
:param file_name: Nome do arquivo JSON de entrada.
:param filename: Nome do arquivo JSON de entrada.
"""
self.data = self._read_json_file(file_name)
self.tables = self._create_tables()
self.data = self._read_json_file(filename)
self.tables = self._create_tables() #: dict

@staticmethod
def _read_json_file(file_name):
"""
Lê o arquivo JSON fornecido e retorna o conteúdo como um objeto Python.
def _read_json_file(filename):
"""Lê o arquivo JSON fornecido e retorna o conteúdo como um objeto Python.
:param file_name: Nome do arquivo JSON de entrada.
:param filename: Nome do arquivo JSON de entrada.
:return: Objeto Python contendo o conteúdo do arquivo JSON.
"""
with open(file_name, 'r', encoding='utf-8') as file:
with open(filename, 'r', encoding='utf-8') as file:
data = json.load(file)
return data

def _create_tables(self):
"""
Cria um dicionário de tabelas a partir dos dados carregados do arquivo JSON.
"""Cria um dicionário de tabelas a partir dos dados carregados do arquivo JSON.
:return: Dicionário contendo informações das tabelas a serem processadas.
"""
Expand All @@ -76,43 +74,48 @@ def _create_tables(self):
}

def get_tables(self):
"""
Retorna o dicionário de tabelas.
"""Retorna o dicionário de tabelas.
:return: Dicionário contendo informações das tabelas a serem processadas.
"""
return self.tables

@staticmethod
def convert_data_types(df, column_types):
"""
Converte os tipos de dados das colunas do DataFrame fornecido.
"""Converte os tipos de dados das colunas do DataFrame fornecido.
:param df: DataFrame a ser processado.
:param column_types: Dicionário contendo mapeamento de colunas para tipos de dados.
:return: DataFrame com tipos de dados convertidos.
"""
return df.astype(column_types)

def create_geodataframes(self, file_name, runs=1):
"""
Cria GeoDataFrames a partir de um arquivo de entrada e coleta estatísticas.
def create_geodataframes(self, filename, runs=1):
"""Cria GeoDataFrames a partir de um arquivo de entrada e coleta estatísticas.
:param file_name: Nome do arquivo de entrada.
:param filename: Nome do arquivo de entrada.
:param runs: Número de vezes que cada tabela será carregada e convertida (padrão: 1).
:return: Dicionário contendo GeoDataFrames e estatísticas.
"""

geodataframes = {}

for table_name, table in self.tables.items():
if table_name == 'UCBT_tab':
print(f"pula {table_name}")
continue
else:
print(f"criando gdf de {table_name}...")

load_times = []
conversion_times = []
gdf_converted = None

for _ in range(runs):
start_time = time.time()
gdf_ = gpd.read_file(file_name, layer=table.name, include_fields=table.columns,
ignore_geometry=table.ignore_geometry)
gdf_ = gpd.read_file(filename, layer=table.name,
include_fields=table.columns,
ignore_geometry=table.ignore_geometry) #! ignore_geometry não funciona, pq este parâmetro espera um bool e está recebendo str
start_conversion_time = time.time()
gdf_converted = self.convert_data_types(gdf_, table.data_types)
end_time = time.time()
Expand All @@ -135,25 +138,15 @@ def create_geodataframes(self, file_name, runs=1):


def get_caller_directory(caller_frame: inspect) -> pathlib.Path:
"""
Returns the file directory that calls this function.
"""Returns the file directory that calls this function.
:param caller_frame: The frame that call the function.
:return: A Pathlib.path object representing the file directory that called this function.
"""
caller_file = inspect.getfile(caller_frame)
return pathlib.Path(caller_file).resolve().parent


def get_caller_directory(caller_frame: inspect) -> pathlib.Path:
"""
Returns the file directory that calls this function.
:param caller_frame: The frame that call the function.
:return: A Pathlib.path object representing the file directory that called this function.
"""
caller_file = inspect.getfile(caller_frame)
return pathlib.Path(caller_file).resolve().parent
#* a função apagada era igual a de cima


def run_gui(folder_bdgd: str) -> None:
Expand All @@ -169,35 +162,39 @@ def run_gui(folder_bdgd: str) -> None:


def run(folder: Optional[str] = None, feeder: Optional[str] = None, all_feeders: Optional[bool] = None, limit_ramal_30m: Optional[bool] = False) -> None:

if feeder is None:
all_feeders = True

s = Sample()
folder_bdgd = folder or s.mux_energia
json_file_name = os.path.join(os.getcwd(), "bdgd2dss.json")
json_filename = os.path.join(os.getcwd(), "bdgd2dss.json")

json_data = JsonData(json_file_name)
json_data = JsonData(json_filename)

geodataframes = json_data.create_geodataframes(folder_bdgd)


for alimentador in geodataframes["CTMT"]['gdf']['COD_ID'].tolist():

if alimentador == feeder or all_feeders == True:

gdf_SSDMT, gdf_SSDBT = create_dfs_coords(folder_bdgd, alimentador)
df_coords = Coords.get_buscoords(gdf_SSDMT, gdf_SSDBT)
create_output_feeder_coords(df_coords, alimentador)

case = Case()
case.dfs = geodataframes

case.id = alimentador

case.circuitos, aux = Circuit.create_circuit_from_json(json_data.data, case.dfs['CTMT']['gdf'].query("COD_ID==@alimentador"))
case.circuitos, aux = Circuit.create_circuit_from_json(json_data.data, case.dfs['CTMT']['gdf'].query("COD_ID==@alimentador"))
list_files_name = [aux]
case.line_codes, aux= LineCode.create_linecode_from_json(json_data.data, case.dfs['SEGCON']['gdf'], alimentador)
case.line_codes, aux = LineCode.create_linecode_from_json(json_data.data, case.dfs['SEGCON']['gdf'], alimentador)
list_files_name.append(aux)

for entity in ['SSDMT', 'UNSEMT', 'SSDBT', 'UNSEBT', 'RAMLIG']:

if not case.dfs[entity]['gdf'].query("CTMT == @alimentador").empty:
if not case.dfs[entity]['gdf'].query("CTMT == @alimentador").empty:
if limit_ramal_30m == True:
case.lines_SSDMT, aux = Line.create_line_from_json(json_data.data, case.dfs[entity]['gdf'].query("CTMT==@alimentador"), entity, ramal_30m = limit_ramal_30m)
else:
Expand All @@ -206,10 +203,10 @@ def run(folder: Optional[str] = None, feeder: Optional[str] = None, all_feeders
else:
print(f'No {entity} elements found\n')

if not case.dfs['UNREMT']['gdf'].query("CTMT == @alimentador").empty:
if not case.dfs['UNREMT']['gdf'].query("CTMT == @alimentador").empty:
case.regcontrols,aux = RegControl.create_regcontrol_from_json(json_data.data, inner_entities_tables(case.dfs['EQRE']['gdf'], case.dfs['UNREMT']['gdf'].query("CTMT==@alimentador"),left_column='UN_RE', right_column='COD_ID'))
list_files_name.append(aux)
else:
else:
print("No RegControls found for this feeder.\n")

case.transformers, aux= Transformer.create_transformer_from_json(json_data.data, inner_entities_tables(case.dfs['EQTRMT']['gdf'], case.dfs['UNTRMT']['gdf'].query("CTMT==@alimentador"), left_column='UNI_TR_MT', right_column='COD_ID'))
Expand All @@ -218,8 +215,8 @@ def run(folder: Optional[str] = None, feeder: Optional[str] = None, all_feeders
case.load_shapes, aux = LoadShape.create_loadshape_from_json(json_data.data, case.dfs['CRVCRG']['gdf'], alimentador)
list_files_name.append(aux)

case.loads, aux = Load.create_load_from_json(json_data.data, case.dfs['UCBT_tab']['gdf'].query("CTMT==@alimentador"),case.dfs['CRVCRG']['gdf'],'UCBT_tab')
list_files_name.append(aux)
# case.loads, aux = Load.create_load_from_json(json_data.data, case.dfs['UCBT_tab']['gdf'].query("CTMT==@alimentador"),case.dfs['CRVCRG']['gdf'],'UCBT_tab')
# list_files_name.append(aux)

case.loads, aux = Load.create_load_from_json(json_data.data, case.dfs['PIP']['gdf'].query("CTMT==@alimentador"),case.dfs['CRVCRG']['gdf'],'PIP')
list_files_name.append(aux)
Expand All @@ -228,4 +225,4 @@ def run(folder: Optional[str] = None, feeder: Optional[str] = None, all_feeders
list_files_name.append(aux)

case.output_master(list_files_name)
case.create_outputs_masters(list_files_name)
case.create_outputs_masters(list_files_name)
Loading

0 comments on commit e8b2f38

Please sign in to comment.