Ciclo limpieza lo hace completo, sectoriza y planifica. Falta probar instalación. Recogida a medias de probar.

Elena/develop
Elena 2022-06-29 00:39:15 +02:00
parent 663e6f058f
commit f29b52f995
12 changed files with 183 additions and 98 deletions

View File

@ -38,7 +38,7 @@
<tooltip heading="OLIVIA - Recogida de Residuos">
Add-In de ArcGIS Pro para la herramienta de optimización de la limpieza viaria, OLIVIA<disabledText /></tooltip>
</button>
<button id="OliviaAddInPro_ButtonConfig" caption="Configuración" className="ButtonConfig" loadOnClick="true" largeImage="Images/config2.png">
<button id="OliviaAddInPro_ButtonConfig" caption="Configuración" className="ButtonConfig" loadOnClick="true" largeImage="Images/config2_olv.png">
<tooltip heading="OLIVIA - Configuración">
Add-In de ArcGIS Pro para la herramienta de optimización de la limpieza viaria, OLIVIA<disabledText /></tooltip>
</button>

View File

@ -739,9 +739,10 @@ namespace OliviaAddInPro.Helper
if (!fields.Contains(field))
{
HelperGdb.OutStr = "No se encuentra el campo " + field;
Free(fc);
return false;
}
Free(fc);
return true;
}
/*
@ -757,13 +758,14 @@ namespace OliviaAddInPro.Helper
}
ObservableCollection<string> fields = GetFieldsSync(fc);
bool encuentra = true;
if (!fields.Contains(field))
{
HelperGdb.OutStr = "No se encuentra el campo " + field;
return false;
encuentra= false;
}
return true;
Free(fc);
return encuentra;
}
/*
* Lee la capa que se ha seleccionzdo de recogida y se comprueba que contiene los campos necesarios
@ -1942,12 +1944,27 @@ namespace OliviaAddInPro.Helper
if (brwsFilt != null)
dlg.BrowseFilter = brwsFilt;
bool? ok = dlg.ShowDialog();
try
{
bool? ok = dlg.ShowDialog();
if ((ok ?? true) && dlg.FilePath.Length > 0)
return dlg.FilePath;
else
if ((ok ?? true) && dlg.FilePath.Length > 0)
return dlg.FilePath;
else
return string.Empty;
}
catch(Exception ex)
{
return string.Empty;
}
}
/**
* Saca diálogo para elegir directorio
*/
public static string FolderBrowseDlg(string title_, string initloc_)
{
return null;
}
/**
@ -2438,12 +2455,17 @@ namespace OliviaAddInPro.Helper
*/
public static bool AddFieldsSync(string fcname, FieldToAdd[] fields)
{
bool res = false;
bool res = false;
// set up the arguments
string fields_str = "";
int camps = 0;
for(int i=0;i<fields.Length;i++)
{
if (CheckFieldSync(fcname, fields[i].Name))
continue;
camps++;
fields_str += fields[i].Name + " " + fields[i].Tipo + " ";
if (!string.IsNullOrEmpty(fields[i].Alias))
fields_str += fields[i].Alias;
@ -2460,6 +2482,9 @@ namespace OliviaAddInPro.Helper
if (i < fields.Length - 1)
fields_str += ";";
}
if (camps == 0)
return true;//no tiene que añadir ningún campo porque los tiene
//var f1 = "field1 long field1 # #;field2 Text # 255 myDefaultValue"; //los # son opciones sin rellenar el orden es: Nombre Tipo Alias Longitud Valor Defecto
var args = Geoprocessing.MakeValueArray(fcname, fields_str);

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

BIN
Images/config2_olv.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

@ -66,9 +66,12 @@ namespace OliviaAddInPro.Model
/////
///DEBUG
///
/*Respuesta<TiposEjecucion> res1 = new Respuesta<TiposEjecucion> { Value = TiposEjecucion.FinEjecOk };
HelperGdb.OpenLayer(@"C:\Users\Elena\Documents\ArcGIS\Projects\MyProject3\MyProject3.gdb\Barrido_man\BarMan_AceM_AceNM_20220529_134336", "SECTOR", true);
return res1;*/
//Respuesta<TiposEjecucion> res1 = new Respuesta<TiposEjecucion> { Value = TiposEjecucion.FinEjecOk };
//HelperGdb.OpenLayer(@"C:\Users\Elena\Documents\ArcGIS\Projects\MyProject3\MyProject3.gdb\Barrido_man\BarMan_AceM_AceNM_20220529_134336", "SECTOR", true);
//Serv.ActualizaSecto(@"D:\Proyectos\Olivia\Instal2.0\data\data_T00_A0405_20220628_214902.shp", @"C:\\Users\\Elena\\Documents\\ArcGIS\\Projects\\MyProject3\\MyProject3.gdb\\Barrido_man\\BarMan_AceM_AceNM_20220628_214613");
//return res1;
//////////////////
/////////////////////////////
Respuesta<bool> res = new Respuesta<bool> { Value=false};

View File

@ -171,5 +171,26 @@ namespace OliviaAddInPro.Model
RecogidaDef.campos_def.cons_kgrec };
return camps;
}
/**
* Rellena el array de filtros en base a la config
*/
public void RellenaFiltrosReco()
{
//se rellena el array de filtros
RecogidaDef.filtro_str = new string[RecogidaDef.tipos_fracc_str.Length + RecogidaDef.tipos_carg_str.Length];
for (int i = 0; i < RecogidaDef.tipos_fracc_str.Length; i++)
{
//se comprueba que tipo de fracción se ha seleccionado. Si se ha seleccionado una fracción sin nombre (el campo en la capa es NULL, y en el comboBox de fracciiones aparece como "-") hay que modificar el filtro
if (RecogidaDef.tipos_fracc_str[i] == "-")
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + " IS NULL";
else
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + "= '" + RecogidaDef.tipos_fracc_str[i] + "'";
}
for (int i = RecogidaDef.tipos_fracc_str.Length; i < RecogidaDef.filtro_str.Length; i++)
{
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_nomrec + "= '" + RecogidaDef.tipos_carg_str[i - RecogidaDef.tipos_fracc_str.Length] + "'";
}
}
}
}

View File

@ -25,7 +25,7 @@
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<WarningLevel>0</WarningLevel>
<StartAction>Program</StartAction>
<StartProgram>$(ArcGISFolder)\bin\ArcGISPro.exe</StartProgram>
<PlatformTarget>x64</PlatformTarget>
@ -357,6 +357,9 @@
<ItemGroup>
<AddInContent Include="Images\carrito2.png" />
</ItemGroup>
<ItemGroup>
<AddInContent Include="Images\config2_olv.png" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!--
PackageAction can be:

View File

@ -56,7 +56,7 @@ namespace OliviaAddInPro.Services
{
ErrStr = string.Empty;
try
{
{
com.ProgrSrc.Init("Exportando datos");
//Comprueba que tiene las columnas necesarias para planificar
if ((modo == ModosEjec.Planifica) && !CompruebaPlanif())
@ -298,53 +298,103 @@ namespace OliviaAddInPro.Services
if (!HelperGdb.AddFieldsSync(path_shp, fields))
return false;
//vuelve a cerrar la capa
string capa_principal = System.IO.Path.GetFileNameWithoutExtension(OliviaGlob.Paths.PathData);
string capa_principal = System.IO.Path.GetFileNameWithoutExtension(path_shp);
HelperGdb.CloseLayer(capa_principal);
/////////////////////////////////////////////////////
RowCursor rc_shp = null;
RowCursor rc_secto = null;
Row rowshp = null;
Row rowsecto = null;
FeatureClass fc_secto = null;
FeatureClass fc_shp = null;
bool bien = false;
try
/////////////////////////////////////////////////////
//ahora rellena las columnas
using (FeatureClass fc_secto = HelperGdb.GetFtClassSync(path_secto))
{
//ahora rellena las columnas
fc_secto = HelperGdb.GetFtClassSync(path_secto);
fc_shp = HelperGdb.GetFtClassSync(path_shp);
if (fc_secto == null || fc_shp == null)
return false;
using (FeatureClass fc_shp = HelperGdb.GetFtClassSync(path_shp))
{
if (fc_secto == null || fc_shp == null)
return false;
var modifyOp = new ArcGIS.Desktop.Editing.EditOperation();
modifyOp.Name = "Actualiza SECTOR y SECUENCIA";
//modifyOp.Callback((context) =>
//{
rc_shp = fc_shp.Search();
rc_secto = fc_secto.Search();
if (rc_shp == null || rc_secto == null)
try
{
using (RowCursor rc_shp = fc_shp.Search())
{
using (RowCursor rc_secto = fc_secto.Search())
{
if (rc_shp == null || rc_secto == null)
return false;
var modifyOp = new ArcGIS.Desktop.Editing.EditOperation();
modifyOp.Name = "Actualiza SECTOR y SECUENCIA";
bool ex = false;
//modifyOp.Callback((context) =>
//{
while (rc_shp.MoveNext() && rc_secto.MoveNext())
{
using (Row rowsecto = rc_secto.Current)
{
using (Row rowshp = rc_shp.Current)
{
//context.Invalidate(rowshp);
// modify and execute
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_sector, rowsecto[LimpiezaDef.Campos.consulta_sector]);
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_secuen, rowsecto[LimpiezaDef.Campos.consulta_secuen]);
rowshp.Store();
//context.Invalidate(rowshp);
}
}
}
//}, fc_shp);
ex = modifyOp.Execute();
ArcGIS.Desktop.Core.Project.Current.SaveEditsAsync();
if (ex && modifyOp.IsDone)
return true;
else
return false;
}
}
}
catch
{
HelperGdb.Free(rc_shp);
HelperGdb.Free(rc_secto);
HelperGdb.Free(fc_secto);
HelperGdb.Free(fc_shp);
return false;
}
while (rc_shp.MoveNext() && rc_secto.MoveNext())
}
}
/*
var modifyOp = new ArcGIS.Desktop.Editing.EditOperation();
modifyOp.Name = "Actualiza SECTOR y SECUENCIA";
bool ex=false;
modifyOp.Callback((context) =>
{
using (RowCursor rc_shp = fc_shp.Search())
{
using (RowCursor rc_secto = fc_secto.Search())
{
rowsecto = rc_secto.Current;
rowshp = rc_shp.Current;
// modify and execute
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_sector,rowsecto[LimpiezaDef.Campos.consulta_sector]);
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_secuen, rowsecto[LimpiezaDef.Campos.consulta_secuen]);
}
bien = true;
//}, fc_shp.GetFeatureDataset());
modifyOp.Execute();
if (bien)
if (rc_shp != null && rc_secto != null)
{
while (rc_shp.MoveNext() && rc_secto.MoveNext())
{
using (Row rowsecto = rc_secto.Current)
{
using (Row rowshp = rc_shp.Current)
{
context.Invalidate(rowshp);
// modify and execute
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_sector, rowsecto[LimpiezaDef.Campos.consulta_sector]);
modifyOp.Modify(rowshp, LimpiezaDef.Campos.consulta_secuen, rowsecto[LimpiezaDef.Campos.consulta_secuen]);
rowshp.Store();
context.Invalidate(rowshp);
}
}
}
bien = true;
rc_secto.Dispose();
rc_shp.Dispose();
}
}
}
}, fc_shp);
ex = modifyOp.Execute();
if (bien && ex && modifyOp.IsDone)
return true;
else
return false;
@ -355,15 +405,13 @@ namespace OliviaAddInPro.Services
}
finally
{
HelperGdb.Free(rowsecto);
HelperGdb.Free(rowshp);
HelperGdb.Free(rc_shp);
HelperGdb.Free(rc_secto);
fc_secto.Dispose();
fc_shp.Dispose();
HelperGdb.Free(fc_secto);
HelperGdb.Free(fc_shp);
}
return false;
return false;*/
}
/**

View File

@ -120,19 +120,15 @@ namespace OliviaAddInPro.Services
}
else
{
//actualiza la capa de la que tiene que leer ahora para planificar
inst.CapaPlanif = resp2.Value;
if (OliviaGlob.HasFlagTipEjec(TiposEjecucion.EjecPlanif)) //Ha terminado bien la planificación
{
//guarda csv
GuardaCsv(inst);
}
msg = Resource1.String_exito;
//actualiza los flags
OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecPlanif);
OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecSecto);
//pone modo config2
OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2);
//actualiza la capa de la que tiene que leer ahora para planificar
inst.CapaPlanif = resp2.Value;
msg = Resource1.String_exito;
}
}
catch (Exception ex)
@ -141,7 +137,7 @@ namespace OliviaAddInPro.Services
mal = true;
}
}
if (mal)
/*if (mal)
{
//reinicia flags
if (OliviaGlob.IsLimp())
@ -149,7 +145,13 @@ namespace OliviaAddInPro.Services
else if (OliviaGlob.IsReco())
OliviaGlob.SetFlagTipEjec(TiposEjecucion.Reco);
}
}*/
//actualiza los flags
OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecPlanif);
OliviaGlob.RemoveFlagTipEjec(TiposEjecucion.EjecSecto);
//pone modo config2
OliviaGlob.AddFlagTipEjec(TiposEjecucion.Config2);
///////////////////////////////////////////////////
HelperGlobal.ponMsg(msg);
OliviaGlob.progrDialog.Hide();
//muestra la ventana
@ -214,16 +216,15 @@ namespace OliviaAddInPro.Services
nameDokL = Directory.GetFiles(DirData,
System.IO.Path.GetFileNameWithoutExtension(OliviaGlob.Paths.PathData) + inst.ServCom.NAME_CSV + ".*");
string Title = "Guardar Secuencia de la Planificación";
string Title = "Directorio para guardar Secuencia de la Planificación";
string Filter = "Secuencia en formato CSV (*.csv)|*.csv";
inst.decode_gdb(System.IO.Path.GetFileNameWithoutExtension(OliviaGlob.Paths.PathData),
out auxi, out nombre);
string InitialDirectory = System.IO.Path.Combine(DirData, nombre);
string FileName = HelperGdb.SaveFileDlg(Title, InitialDirectory, inst.ServCom.EXT_CSV, Filter);
//string Path = HelperGdb.SaveFileDlg(Title, DirData, inst.ServCom.EXT_CSV, Filter);
string Path = HelperGdb.SaveFileDlg(Title, DirData, null, ArcGIS.Desktop.Catalog.ItemFilters.folders);
if (string.IsNullOrEmpty(FileName) || FileName.Length == 0)
if (string.IsNullOrEmpty(Path) || Path.Length == 0)
{
bool ok = HelperGlobal.ponMsg("Se va a perder el archivo que contiene la secuencia en planificación, ¿está seguro?",
MessageBoxImage.Question,"OLIVIA",MessageBoxButton.YesNo);
@ -232,6 +233,8 @@ namespace OliviaAddInPro.Services
}
else
{
var FileName = System.IO.Path.Combine(Path, nombre);
FileName += inst.ServCom.EXT_CSV;
if (File.Exists(FileName))
File.Delete(FileName);
File.Move(nameDokL[0], FileName);
@ -253,7 +256,7 @@ namespace OliviaAddInPro.Services
//repite por si se ha equivocado hasta que elige la gdb
GdbFileName = HelperGdb.OpenFileDialog(HelperGdb.TiposOpenFileDlg.OpenGdb,"", "Seleccionar GDB a la que importar los resultados");
if(string.IsNullOrEmpty(GdbFileName))
sal= HelperGlobal.ponMsg("¿Desea cancelar el proceso de imporación?",
sal= HelperGlobal.ponMsg("¿Desea cancelar el proceso de importación?",
MessageBoxImage.Question, "OLIVIA", MessageBoxButton.YesNo);
} while (!sal);

View File

@ -18,7 +18,6 @@ namespace OliviaAddInPro.Services
public RecogidaServ(Recogida _reco)
{
reco = _reco;
RellenaFiltrosReco();
}
/*
@ -95,7 +94,7 @@ namespace OliviaAddInPro.Services
//cierra las capas que se han abierto durante la exportación
CierraCapas();
res.Value = true;
return res;
}
@ -145,27 +144,7 @@ namespace OliviaAddInPro.Services
consulta = "";
}
return consulta;
}
}
/**
* Rellena el array de filtros en base a la config
*/
public void RellenaFiltrosReco()
{
//se rellena el array de filtros
RecogidaDef.filtro_str = new string[RecogidaDef.tipos_fracc_str.Length + RecogidaDef.tipos_carg_str.Length];
for (int i = 0; i < RecogidaDef.tipos_fracc_str.Length; i++)
{
//se comprueba que tipo de fracción se ha seleccionado. Si se ha seleccionado una fracción sin nombre (el campo en la capa es NULL, y en el comboBox de fracciiones aparece como "-") hay que modificar el filtro
if (RecogidaDef.tipos_fracc_str[i] == "-")
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + " IS NULL";
else
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_fracc + "= '" + RecogidaDef.tipos_fracc_str[i] + "'";
}
for (int i = RecogidaDef.tipos_fracc_str.Length; i < RecogidaDef.filtro_str.Length; i++)
{
RecogidaDef.filtro_str[i] = RecogidaDef.campos_def.cons_nomrec + "= '" + RecogidaDef.tipos_carg_str[i - RecogidaDef.tipos_fracc_str.Length] + "'";
}
}
}
}

View File

@ -46,7 +46,7 @@ namespace OliviaAddInPro
}
else if (DataContext is PaneRecogidaViewModel modrec)
{
modrec.Ejecuta(OliviaAddInPro.Services.ModosEjec.Planifica);
modrec.Ejecuta(OliviaAddInPro.Services.ModosEjec.SoloPlanifica);
}
}

View File

@ -94,6 +94,9 @@ namespace OliviaAddInPro
err_str = "";
try
{
//Rellena el array de filtros
reco.RellenaFiltrosReco();
////////////////////////////////////////////////////////////
///Lee el panel 1
if (!_subPanel1ViewModel.CapaAbierta || string.IsNullOrEmpty(_subPanel1ViewModel.CapaElems))