Exemplo n.º 1
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="elManejadorDeMapa">El manejador del mapa.</param>
 /// <param name="elNúmero">El número del PDI.</param>
 /// <param name="laClase">La clase de PDI.</param>
 /// <param name="losCampos">Los campos del PDI.</param>
 public Pdi(
     ManejadorDeMapa elManejadorDeMapa,
     int elNúmero,
     string laClase,
     IList <Campo> losCampos)
     : base(elManejadorDeMapa,
            elNúmero,
            laClase,
            CaracterísticasDePdis.Descripciones,
            losCampos)
 {
     // Busca los campos especificos de los PDIs.
     foreach (Campo campo in losCampos)
     {
         CampoCoordenadas campoCoordenadas;
         CampoEsCiudad    campoCiudad;
         if ((campoCoordenadas = campo as CampoCoordenadas) != null)
         {
             misCoordenadas = campoCoordenadas;
         }
         else if ((campoCiudad = campo as CampoEsCiudad) != null)
         {
             EsCiudad = campoCiudad.EsCiudad;
         }
     }
 }
        /// <summary>
        /// Procesa un PDI.
        /// </summary>
        /// <param name="elPdi">El PDI.</param>
        /// <returns>El número de problemas detectados al procesar el elemento.</returns>
        protected override int ProcesaElemento(Pdi elPdi)
        {
            int           númeroDeProblemasDetectados = 0;
            List <string> errores = new List <string>();

            #region Verifica que el tipo de PDI no es vacio y que es conocido.
            Tipo?tipo = elPdi.Tipo;
            if (tipo == null)
            {
                errores.Add(Properties.Recursos.E000);
            }
            else
            {
                bool esConocido = CaracterísticasDePdis.Descripciones.ContainsKey((Tipo)tipo);
                if (!esConocido)
                {
                    errores.Add(string.Format(Properties.Recursos.E001, elPdi.Tipo));
                }
            }
            #endregion

            #region Verifica las coordenadas.
            // El PDI debe tener un campo de coordenadas y además tienen que
            // tener nivel zero.
            CampoCoordenadas campoCoordenadas = null;
            foreach (Campo campo in elPdi.Campos)
            {
                if (campo is CampoCoordenadas)
                {
                    campoCoordenadas = (CampoCoordenadas)campo;
                    break;
                }
            }
            if (campoCoordenadas == null)
            {
                errores.Add(Properties.Recursos.E002);
            }
            else if ((campoCoordenadas.Nivel != 0) &&
                     !elPdi.TieneAtributo(AtributoIgnorarNoCoordenadasNivel0))
            {
                errores.Add(string.Format(Properties.Recursos.E003, campoCoordenadas.Nivel));
            }
            #endregion

            #region Verifica City=Y y CityIdx
            if (!elPdi.TieneAtributo(AtributoIgnorarCamposCityYCityIdx))
            {
                if ((elPdi.Tipo != null) && (TiposDeCiudades.Tipos.Contains(elPdi.Tipo.Value)))
                {
                    // Si el tipo de PDI es de ciudad y no es RGN20 entonces debería
                    // tener un campo EsCiudad con valor verdadero.
                    if (elPdi.Clase != "RGN20")
                    {
                        // Busca el campo EsCiudad.
                        CampoEsCiudad campoEsCiudad = null;
                        foreach (Campo campo in elPdi.Campos)
                        {
                            if (campo is CampoEsCiudad)
                            {
                                campoEsCiudad = (CampoEsCiudad)campo;
                                break;
                            }
                        }

                        // Añade el error si no tiene el campo o es falso.
                        if ((campoEsCiudad == null) ||
                            !campoEsCiudad.EsCiudad)
                        {
                            errores.Add(Properties.Recursos.E004);
                        }
                    }

                    // Si el tipo de PDI es de ciudad entonces debería tener el campo
                    // Busca el campo EsCiudad.
                    CampoIndiceDeCiudad campoIndiceDeCiudad = null;
                    foreach (Campo campo in elPdi.Campos)
                    {
                        if (campo is CampoIndiceDeCiudad)
                        {
                            campoIndiceDeCiudad = (CampoIndiceDeCiudad)campo;
                            break;
                        }
                    }

                    // Añade el error si no tiene el campo.
                    if (campoIndiceDeCiudad == null)
                    {
                        errores.Add(Properties.Recursos.E005);
                    }
                }
            }
            #endregion

            // Chequea si hay errores.
            if (errores.Count > 0)
            {
                string todosLosErrores = string.Join("|", errores.ToArray());
                misErrores.Add(elPdi, todosLosErrores);
                ++númeroDeProblemasDetectados;
            }

            return(númeroDeProblemasDetectados);
        }
Exemplo n.º 3
0
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
            // Crea el objeto a probar.
            IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
            ManejadorDeMapa      manejadorDeMapa     = new ManejadorDeMapa(escuchadorDeEstatus);
            ManejadorDePdis      manejadorDePdis     = new ManejadorDePdis(manejadorDeMapa, new List <Pdi>(), escuchadorDeEstatus);
            var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

            // Crea los elementos.
            IList <Pdi>  pdis             = manejadorDePdis.Elementos;
            const string clase            = "POI";
            var          campoCoordenadas = new CampoCoordenadas("Data", 0, new[]
            {
                new Coordenadas(10.16300, -66.00000),
                new Coordenadas(10.16199, -65.99850),
                new Coordenadas(10.16010, -65.99591),
            });

            var pdiNoCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0x001"),
                campoCoordenadas
            });
            pdis.Add(pdiNoCiudad);

            var pdiCiudadCorrecta = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xb00"),
                new CampoEsCiudad(true),
                new CampoIndiceDeCiudad(79),
                campoCoordenadas
            });
            pdis.Add(pdiCiudadCorrecta);

            var pdiSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xc00"),
                new CampoIndiceDeCiudad(79),
                campoCoordenadas
            });
            pdis.Add(pdiSinCampoEsCiudad);

            var pdiSinIndiceDeCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xd00"),
                new CampoEsCiudad(true),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudad);

            var pdiSinIndiceDeCiudadYConAttributo = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xf00"),
                new CampoAtributo(BuscadorDeErrores.AtributoIgnorarCamposCityYCityIdx),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudadYConAttributo);

            var pdiSinIndiceDeCiudadYSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List <Campo> {
                new CampoTipo("0xe00"),
                campoCoordenadas
            });
            pdis.Add(pdiSinIndiceDeCiudadYSinCampoEsCiudad);

            // Deberian haber 3 errores:
            //   - 1 por el PDI sin campo de Ciudad.
            //   - 1 por el PDI sin índice de Ciudad.
            //   - 2 por el PDI sin campo de Ciudad y sin índice de Ciudad.
            const int númeroDeProblemasDetectados = 4;
            #endregion

            // Llama al método bajo prueba.
            objectoDePrueba.Procesa();

            // Prueba propiedades.
            Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
            Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");
            Assert.That(objectoDePrueba.Errores.Count, Is.EqualTo(númeroDeProblemasDetectados), "Errores.Count");

            Assert.That(
                objectoDePrueba.Errores[pdiSinCampoEsCiudad],
                Text.StartsWith("E004"),
                "Errores[pdiSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudad],
                Text.StartsWith("E005"),
                "Errores[pdiSinIndiceDeCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
                Text.StartsWith("E004"),
                "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
                Text.Contains("E005"),
                "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

            Assert.That(
                objectoDePrueba.Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo),
                Is.False,
                "Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo)");

            Assert.That(
                objectoDePrueba.Errores.ContainsKey(pdiCiudadCorrecta),
                Is.False,
                "Errores.ContainsKey(pdiCiudadCorrecta)");
        }
Exemplo n.º 4
0
        public void PruebaProcesaCaso1()
        {
            #region Preparación.
              // Crea el objeto a probar.
              IEscuchadorDeEstatus escuchadorDeEstatus = new EscuchadorDeEstatusPorOmisión();
              ManejadorDeMapa manejadorDeMapa = new ManejadorDeMapa(escuchadorDeEstatus);
              ManejadorDePdis manejadorDePdis = new ManejadorDePdis(manejadorDeMapa, new List<Pdi>(), escuchadorDeEstatus);
              var objectoDePrueba = new BuscadorDeErrores(manejadorDePdis, escuchadorDeEstatus);

              // Crea los elementos.
              IList<Pdi> pdis = manejadorDePdis.Elementos;
              const string clase = "POI";
              var campoCoordenadas = new CampoCoordenadas("Data", 0, new[]
            {
              new Coordenadas(10.16300,-66.00000),
              new Coordenadas(10.16199,-65.99850),
              new Coordenadas(10.16010,-65.99591),
            });

              var pdiNoCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0x001"),
            campoCoordenadas});
              pdis.Add(pdiNoCiudad);

              var pdiCiudadCorrecta = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xb00"),
            new CampoEsCiudad(true),
            new CampoIndiceDeCiudad(79),
            campoCoordenadas});
              pdis.Add(pdiCiudadCorrecta);

              var pdiSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xc00"),
            new CampoIndiceDeCiudad(79),
            campoCoordenadas});
              pdis.Add(pdiSinCampoEsCiudad);

              var pdiSinIndiceDeCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xd00"),
            new CampoEsCiudad(true),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudad);

              var pdiSinIndiceDeCiudadYConAttributo = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xf00"),
            new CampoAtributo(BuscadorDeErrores.AtributoIgnorarCamposCityYCityIdx),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudadYConAttributo);

              var pdiSinIndiceDeCiudadYSinCampoEsCiudad = new Pdi(manejadorDeMapa, 1, clase, new List<Campo> {
            new CampoTipo("0xe00"),
            campoCoordenadas});
              pdis.Add(pdiSinIndiceDeCiudadYSinCampoEsCiudad);

              // Deberian haber 3 errores:
              //   - 1 por el PDI sin campo de Ciudad.
              //   - 1 por el PDI sin índice de Ciudad.
              //   - 2 por el PDI sin campo de Ciudad y sin índice de Ciudad.
              const int númeroDeProblemasDetectados = 4;
              #endregion

              // Llama al método bajo prueba.
              objectoDePrueba.Procesa();

              // Prueba propiedades.
              Assert.That(objectoDePrueba.NúmeroDeElementos, Is.EqualTo(pdis.Count), "NúmeroDeElementos");
              Assert.That(objectoDePrueba.NúmeroDeProblemasDetectados, Is.EqualTo(númeroDeProblemasDetectados), "NúmeroDeProblemasDetectados");
              Assert.That(objectoDePrueba.Errores.Count, Is.EqualTo(númeroDeProblemasDetectados), "Errores.Count");

              Assert.That(
            objectoDePrueba.Errores[pdiSinCampoEsCiudad],
            Text.StartsWith("E004"),
            "Errores[pdiSinCampoEsCiudad]");

              Assert.That(
            objectoDePrueba.Errores[pdiSinIndiceDeCiudad],
            Text.StartsWith("E005"),
            "Errores[pdiSinIndiceDeCiudad]");

              Assert.That(
               objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
               Text.StartsWith("E004"),
               "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

              Assert.That(
               objectoDePrueba.Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad],
               Text.Contains("E005"),
               "Errores[pdiSinIndiceDeCiudadYSinCampoEsCiudad]");

              Assert.That(
               objectoDePrueba.Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo),
               Is.False,
               "Errores.ContainsKey(pdiSinIndiceDeCiudadYConAttributo)");

              Assert.That(
               objectoDePrueba.Errores.ContainsKey(pdiCiudadCorrecta),
               Is.False,
               "Errores.ContainsKey(pdiCiudadCorrecta)");
        }
        /// <summary>
        /// Procesa na Vía.
        /// </summary>
        /// <param name="laVía">La Vía.</param>
        /// <returns>El número de problemas detectados al procesar el elemento.</returns>
        protected override int ProcesaElemento(Vía laVía)
        {
            int           númeroDeItemsDetectados = 0;
            List <string> errores = new List <string>();

            #region Verifica que el tipo de Vía no está vacio y que es conocido.
            Tipo?tipo = laVía.Tipo;
            if (tipo == null)
            {
                errores.Add("E108: El tipo está vacío.");
            }
            else
            {
                bool esConocido = TiposDeVías.Tipos.Contains((Tipo)tipo);
                if (!esConocido)
                {
                    errores.Add(string.Format("E100: El tipo {0} no es conocido.", laVía.Tipo));
                }
            }
            #endregion

            #region Verifica las coordenadas.
            // La Vía debe tener un campo de coordenadas y además tiene que
            // tener nivel zero.
            CampoCoordenadas campoCoordenadas = null;
            foreach (Campo campo in laVía.Campos)
            {
                if ((campoCoordenadas = campo as CampoCoordenadas) != null)
                {
                    break;
                }
            }
            if (campoCoordenadas == null)
            {
                errores.Add("E101: No tiene coordenadas.");
            }
            else
            {
                // Si la Vía tiene coordenadas entonces:
                //  - Deben ser a nivel zero.
                //  - Tienen que ser más de un par.
                if (campoCoordenadas.Nivel != 0)
                {
                    errores.Add(string.Format("E102: No tiene coordenadas a nivel 0, sino a nivel {0}.", campoCoordenadas.Nivel));
                }
                if (!(campoCoordenadas.Coordenadas.Length > 1))
                {
                    errores.Add(string.Format("E103: Debe tener más de un par de coordenadas, pero tiene {0}.", campoCoordenadas.Coordenadas.Length));
                }
            }
            #endregion

            // Chequea si hay errores.
            if (errores.Count > 0)
            {
                string todosLosErrores = string.Join("|", errores.ToArray());
                misErrores.Add(laVía, todosLosErrores);
                ++númeroDeItemsDetectados;
            }

            return(númeroDeItemsDetectados);
        }
Exemplo n.º 6
0
        private static void ArreglaMapaTopografico(ManejadorDeMapa.ManejadorDeMapa elManejadorDeMapa)
        {
            #region Arregla el encabezado.
            ElementoDelMapa encabezado          = elManejadorDeMapa.Encabezado;
            IList <Campo>   camposDelEncabezado = encabezado.Campos;
            CampoGenérico   campoNombre         = (CampoGenérico)camposDelEncabezado[1];

            // Borra los campos para re-generarlos.
            camposDelEncabezado.Clear();
            camposDelEncabezado.Add(new CampoGenérico("CodePage", "1252"));
            camposDelEncabezado.Add(new CampoGenérico("LblCoding", "9"));
            camposDelEncabezado.Add(new CampoGenérico("ID", campoNombre.Texto));
            camposDelEncabezado.Add(campoNombre);

            // Añade los campos nuevos.
            Campo[] camposNuevos = new Campo[] {
                new CampoGenérico("Elevation", "M"),
                new CampoGenérico("Preprocess", "F"),
                new CampoGenérico("TreSize", "5000"),
                new CampoGenérico("TreMargin", "0.00000"),
                new CampoGenérico("RgnLimit", "1024"),
                new CampoGenérico("Transparent", "Y"),
                new CampoGenérico("Copyright", "www.gpsyv.net"),
                new CampoGenérico("Levels", "5"),
                new CampoGenérico("Level0", "24"),
                new CampoGenérico("Level1", "22"),
                new CampoGenérico("Level2", "20"),
                new CampoGenérico("Level3", "19"),
                new CampoGenérico("Level4", "18"),
                new CampoGenérico("Zoom0", "0"),
                new CampoGenérico("Zoom1", "1"),
                new CampoGenérico("Zoom2", "2"),
                new CampoGenérico("Zoom3", "3"),
                new CampoGenérico("Zoom4", "4"),
            };
            foreach (Campo campo in camposNuevos)
            {
                camposDelEncabezado.Add(campo);
            }
            Console.WriteLine("  arreglado encabezado...");
            #endregion

            #region Arregla las Polilíneas
            foreach (var polilínea in elManejadorDeMapa.Polilíneas)
            {
                IList <Campo> campos = polilínea.Campos;

                // Busca el campo de tipo.
                int?índiceCampoTipo = null;
                for (int i = 0; i < campos.Count; ++i)
                {
                    if (campos[i] is CampoTipo)
                    {
                        índiceCampoTipo = i;
                        break;
                    }
                }

                // Add EndLevel después del campo tipo.
                if (índiceCampoTipo != null)
                {
                    int i = (int)índiceCampoTipo + 1;
                    campos.Insert(i, new CampoGenérico("EndLevel", "3"));
                }
            }
            Console.WriteLine("  arregladas polilíneas...");
            #endregion

            #region Elimina los elementos con Data1 y Data2, y los polígonos.
            IList <ElementoDelMapa> elementos = elManejadorDeMapa.ManejadorDeElementos.Elementos;
            int últimoIndex = elementos.Count - 1;
            for (int i = últimoIndex; i >= 0; --i)
            {
                ElementoDelMapa elemento = elementos[i];

                // Remueve los polígonos.
                if (elemento is Polígono)
                {
                    elementos.RemoveAt(i);
                }
                // Si no es polígono entonces vemos si es una polilínea
                // y la removemos si no tiene data0.
                else if (elemento is Polilínea)
                {
                    // Buscamos si tiene data0.
                    bool tieneData0 = false;
                    foreach (var campo in elemento.Campos)
                    {
                        CampoCoordenadas campoCoordenadas = campo as CampoCoordenadas;
                        if (campoCoordenadas != null)
                        {
                            if (campoCoordenadas.Nivel == 0)
                            {
                                tieneData0 = true;
                                break;
                            }
                        }
                    }

                    // Removemos el elemento si no tiene data0.
                    if (!tieneData0)
                    {
                        elementos.RemoveAt(i);
                    }
                }
            }
            Console.WriteLine("  eliminados polilíneas sin data 0, y polígonos...");
            #endregion
        }