Beispiel #1
0
        public void AddFromLatLon(double lat, double lon)
        {
            var dir = GeocoderHelper.GetEsquinaMasCercana(lat, lon);

            if (dir == null)
            {
                return;
            }
            SetDireccion(dir);
        }
Beispiel #2
0
        protected void btnNomenclar_Click(object sender, EventArgs e)
        {
            var empresaId = cbEmpreaNomenclador.Selected;
            var clientes  = DAOFactory.ClienteDAO.FindAll().Where(c => c.Empresa.Id == empresaId && !c.Baja);
            var puntos    = DAOFactory.PuntoEntregaDAO.GetList(new[] { -1 }, new[] { -1 }, clientes.Select(c => c.Id));

            var cant = 0;

            foreach (var punto in puntos)
            {
                try
                {
                    var direccion = GeocoderHelper.GetEsquinaMasCercana(punto.ReferenciaGeografica.Latitude, punto.ReferenciaGeografica.Longitude);

                    if (direccion != null)
                    {
                        punto.ReferenciaGeografica.Direccion.Calle       = direccion.Calle;
                        punto.ReferenciaGeografica.Direccion.Altura      = direccion.Altura;
                        punto.ReferenciaGeografica.Direccion.Partido     = direccion.Partido;
                        punto.ReferenciaGeografica.Direccion.Provincia   = direccion.Provincia;
                        punto.ReferenciaGeografica.Direccion.Pais        = "Argentina";
                        punto.ReferenciaGeografica.Direccion.Descripcion = direccion.Direccion;

                        punto.ReferenciaGeografica.Direccion.IdMapa    = (short)direccion.IdMapaUrbano;
                        punto.ReferenciaGeografica.Direccion.IdCalle   = direccion.IdPoligonal;
                        punto.ReferenciaGeografica.Direccion.IdEsquina = direccion.IdEsquina;

                        punto.Nomenclado          = true;
                        punto.DireccionNomenclada = direccion.Direccion;

                        DAOFactory.ReferenciaGeograficaDAO.SaveOrUpdate(punto.ReferenciaGeografica);
                        DAOFactory.PuntoEntregaDAO.SaveOrUpdate(punto);
                        cant++;
                    }
                    ;
                }
                catch (Exception ex)
                {
                    STrace.Exception(GetType().FullName, ex);
                }
            }

            infoLabel1.Mode = InfoLabelMode.INFO;
            infoLabel1.Text = "Se han nomenclado " + cant + " puntos de entrega.";
        }
Beispiel #3
0
    public Respuesta <string> GetEsquinaMasCercana(string interno, string empresa, string linea)
    {
        try
        {
            var emp = DAOFactory.EmpresaDAO.FindByCodigo(empresa);
            if (emp == null)
            {
                return(Respuesta <string> .CreateError("Empresa " + empresa + " no encontrada"));
            }
            var lin = DAOFactory.LineaDAO.FindByCodigo(emp.Id, linea);
            if (lin == null)
            {
                return(Respuesta <string> .CreateError("Linea " + linea + " no encontrada"));
            }
            if (!lin.Interfaceable)
            {
                return(Respuesta <string> .CreateError("La Linea " + linea + " no acepta consultas de esta interface"));
            }

            var coche = DAOFactory.CocheDAO.FindByInterno(new[] { emp.Id }, new[] { lin.Id }, interno);
            if (coche == null)
            {
                return(Respuesta <string> .CreateError("No se encontraro el movil con interno " + interno));
            }

            var pos = DAOFactory.LogPosicionDAO.GetLastOnlineVehiclePosition(coche);
            if (pos == null)
            {
                return(Respuesta <string> .CreateError("No se encontro posicion para el movil " + interno));
            }
            var dir = GeocoderHelper.GetEsquinaMasCercana(pos.Latitud, pos.Longitud);
            return(Respuesta <string> .Create(dir == null
                                              ?string.Format("({0}, {1})", pos.Latitud, pos.Longitud)
                                              : dir.Direccion));
        }
        catch (Exception ex)
        {
            return(Respuesta <string> .CreateError(ex.Message));
        }
    }
Beispiel #4
0
        public void FindByLatLon(double latitud, double longitud)
        {
            var result = GeocoderHelper.GetEsquinaMasCercana(latitud, longitud)
                         ?? new DireccionVO
            {
                Altura       = -1,
                Calle        = string.Empty,
                Direccion    = string.Format("({0}, {1})", latitud, longitud),
                IdEsquina    = -1,
                IdMapaUrbano = -1,
                IdPoligonal  = -1,
                IdProvincia  = -1,
                Partido      = string.Empty,
                Provincia    = string.Empty,
            };

            result.Latitud  = latitud;
            result.Longitud = longitud;
            SetDireccion(DireccionFromVo(result));

            updControl.Update();
        }
        protected override void Import(List <ImportRow> rows)
        {
            var empresa = cbEmpresa.Selected > 0 ? DAOFactory.EmpresaDAO.FindById(cbEmpresa.Selected) : null;
            var linea   = cbLinea.Selected > 0 ? DAOFactory.LineaDAO.FindById(cbLinea.Selected) : null;
            var tipoReferenciaDefault = cbTipoGeoRef.Selected > 0 ? DAOFactory.TipoReferenciaGeograficaDAO.FindById(cbTipoGeoRef.Selected) : null;

            var empresas = new [] { cbEmpresa.Selected };
            var lineas   = new[] { cbLinea.Selected };

            using (var transaction = SmartTransaction.BeginTransaction())
            {
                try
                {
                    foreach (var row in rows)
                    {
                        var tipoCliente = row.GetString(GetColumnByValue(Fields.TipoCliente.Value));
                        var cliente     = DAOFactory.ClienteDAO.FindByDescripcion(new[] { empresa.Id }, new[] { -1 }, tipoCliente);
                        var codigo      = row.GetString(GetColumnByValue(Fields.Codigo.Value));

                        var pto = DAOFactory.PuntoEntregaDAO.FindByCode(new[] { cliente.Empresa.Id }, new[] { cliente.Linea != null ? cliente.Linea.Id : -1 }, new[] { cliente.Id }, codigo);

                        if (pto == null)
                        {
                            var descripcion         = IsMapped(Fields.Descripcion.Value) ? row.GetString(GetColumnByValue(Fields.Descripcion.Value)) : codigo;
                            var longitud            = row.GetDouble(GetColumnByValue(Fields.Longitud.Value));
                            var latitud             = row.GetDouble(GetColumnByValue(Fields.Latitud.Value));
                            var vigenciaDesde       = DateTime.Now;
                            var direccionNomenclada = row.GetString(GetColumnByValue(Fields.Direccion.Value));
                            var geoRef   = new ReferenciaGeografica();
                            var telefono = "";

                            var tipoReferencia = tipoReferenciaDefault;
                            if (tipoReferencia == null)
                            {
                                throw new ApplicationException("Tipo de Referencia Geográfica inválido");
                            }


                            if (latitud.HasValue &&
                                longitud.HasValue)
                            {
                                if (direccionNomenclada == null)
                                {
                                    direccionNomenclada = string.Format("({0}, {1})", latitud.Value, longitud.Value);
                                }
                                geoRef = GetReferenciaGeografica(tipoReferencia, null, empresa, linea, codigo, descripcion, vigenciaDesde, null,
                                                                 latitud.Value, longitud.Value);
                            }

                            pto = CreatePuntoEntrega(cliente, codigo, descripcion, telefono, geoRef);
                        }
                        else
                        {
                            var descripcion = IsMapped(Fields.Descripcion.Value) ? row.GetString(GetColumnByValue(Fields.Descripcion.Value)) : codigo;
                            var longitud    = row.GetDouble(GetColumnByValue(Fields.Longitud.Value));
                            var latitud     = row.GetDouble(GetColumnByValue(Fields.Latitud.Value));

                            pto.Descripcion = descripcion;
                            pto.Nombre      = descripcion;

                            if (pto.ReferenciaGeografica.Latitude != latitud ||
                                pto.ReferenciaGeografica.Longitude != longitud)
                            {
                                pto.ReferenciaGeografica.Direccion.Vigencia.Fin = DateTime.UtcNow;
                                pto.ReferenciaGeografica.Poligono.Vigencia.Fin  = DateTime.UtcNow;

                                #region var posicion = new Direccion()

                                var direccion = GeocoderHelper.GetEsquinaMasCercana(latitud.Value, longitud.Value);

                                var posicion = new Direccion
                                {
                                    Altura       = direccion != null ? direccion.Altura : -1,
                                    IdMapa       = (short)(direccion != null ? direccion.IdMapaUrbano : -1),
                                    Provincia    = direccion != null ? direccion.Provincia : string.Empty,
                                    IdCalle      = direccion != null ? direccion.IdPoligonal : -1,
                                    IdEsquina    = direccion != null ? direccion.IdEsquina : -1,
                                    IdEntrecalle = -1,
                                    Latitud      = latitud.Value,
                                    Longitud     = longitud.Value,
                                    Partido      = direccion != null ? direccion.Partido : string.Empty,
                                    Pais         = string.Empty,
                                    Calle        = direccion != null ? direccion.Calle : string.Empty,
                                    Descripcion  =
                                        direccion != null
                                            ? direccion.Direccion
                                            : string.Format("({0}, {1})", latitud.Value.ToString(CultureInfo.InvariantCulture),
                                                            longitud.Value.ToString(CultureInfo.InvariantCulture)),
                                    Vigencia = new Vigencia {
                                        Inicio = DateTime.UtcNow
                                    }
                                };

                                #endregion

                                #region var poligono = new Poligono()

                                var poligono = new Poligono {
                                    Radio = 100, Vigencia = new Vigencia {
                                        Inicio = DateTime.UtcNow
                                    }
                                };
                                poligono.AddPoints(new[] { new PointF((float)longitud, (float)latitud) });

                                #endregion

                                pto.ReferenciaGeografica.AddHistoria(posicion, poligono, DateTime.UtcNow);

                                DAOFactory.ReferenciaGeograficaDAO.SaveOrUpdate(pto.ReferenciaGeografica);
                            }
                        }

                        DAOFactory.PuntoEntregaDAO.SaveOrUpdate(pto);
                    }
                    transaction.Commit();
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    throw ex;
                }
            }
        }
Beispiel #6
0
        protected override void Import(List <ImportRow> rows)
        {
            var empresa = cbEmpresa.Selected > 0 ? DAOFactory.EmpresaDAO.FindById(cbEmpresa.Selected) : null;
            var linea   = cbLinea.Selected > 0 ? DAOFactory.LineaDAO.FindById(cbLinea.Selected) : null;
            var tipoReferenciaDefault = cbTipoGeoRef.Selected > 0 ? DAOFactory.TipoReferenciaGeograficaDAO.FindById(cbTipoGeoRef.Selected) : null;

            var empresas = new [] { cbEmpresa.Selected };
            var lineas   = new[] { cbLinea.Selected };

            using (var transaction = SmartTransaction.BeginTransaction())
            {
                var list = new List <ReferenciaGeografica>(rows.Count);

                foreach (var row in rows)
                {
                    var codigo        = row.GetString(GetColumnByValue(Fields.Codigo.Value));
                    var descripcion   = IsMapped(Fields.Descripcion.Value) ? row.GetString(GetColumnByValue(Fields.Descripcion.Value)) : codigo;
                    var direccion     = row.GetString(GetColumnByValue(Fields.Direccion.Value));
                    var calle         = row.GetString(GetColumnByValue(Fields.Calle.Value));
                    var altura        = row.GetInt32(GetColumnByValue(Fields.Altura.Value));
                    var esquina       = row.GetString(GetColumnByValue(Fields.Esquina.Value));
                    var partido       = row.GetString(GetColumnByValue(Fields.Partido.Value));
                    var provincia     = row.GetString(GetColumnByValue(Fields.Provincia.Value));
                    var vigenciaDesde = row.GetDateTime(GetColumnByValue(Fields.VigenciaDesde.Value));
                    var vigenciaHasta = row.GetDateTime(GetColumnByValue(Fields.VigenciaHasta.Value));
                    var longitud      = row.GetDouble(GetColumnByValue(Fields.Longitud.Value));
                    var latitud       = row.GetDouble(GetColumnByValue(Fields.Latitud.Value));
                    var tipoGeoref    = row.GetString(GetColumnByValue(Fields.TipoGeoRef.Value));

                    var tipoReferencia = tipoReferenciaDefault;
                    if (!string.IsNullOrEmpty(tipoGeoref))
                    {
                        DAOFactory.TipoReferenciaGeograficaDAO.GetByCodigo(empresas, lineas, tipoGeoref);
                    }
                    if (tipoReferencia == null)
                    {
                        throw new ApplicationException("Tipo de Referencia Geografica invalido");
                    }

                    var geoRef = DAOFactory.ReferenciaGeograficaDAO.GetByCodigo(empresas, lineas, new[] { tipoReferencia.Id }, codigo);

                    var nomenclar = geoRef == null || geoRef.Direccion == null;

                    if (geoRef == null)
                    {
                        geoRef = new ReferenciaGeografica
                        {
                            Codigo                   = codigo,
                            Empresa                  = empresa,
                            Linea                    = linea,
                            EsFin                    = tipoReferencia.EsFin,
                            EsInicio                 = tipoReferencia.EsInicio,
                            EsIntermedio             = tipoReferencia.EsIntermedio,
                            Icono                    = tipoReferencia.Icono,
                            InhibeAlarma             = tipoReferencia.InhibeAlarma,
                            TipoReferenciaGeografica = tipoReferencia,
                            Color                    = tipoReferencia.Color
                        };
                        foreach (TipoReferenciaVelocidad maxima in tipoReferencia.VelocidadesMaximas)
                        {
                            geoRef.VelocidadesMaximas.Add(new ReferenciaVelocidad
                            {
                                ReferenciaGeografica = geoRef,
                                TipoVehiculo         = maxima.TipoVehiculo,
                                VelocidadMaxima      = maxima.VelocidadMaxima
                            });
                        }
                    }

                    geoRef.Baja          = false;
                    geoRef.Descripcion   = descripcion;
                    geoRef.Observaciones = string.Empty;

                    if (vigenciaDesde.HasValue &&
                        vigenciaDesde.Value.Equals(vigenciaHasta.Value))
                    {
                        vigenciaDesde = new DateTime(vigenciaDesde.Value.Year, vigenciaDesde.Value.Month, vigenciaDesde.Value.Day, 0, 0, 0);
                        vigenciaHasta = new DateTime(vigenciaDesde.Value.Year, vigenciaDesde.Value.Month, vigenciaDesde.Value.Day, 23, 59, 59);
                    }

                    UpdateVigencia(geoRef, vigenciaDesde, vigenciaHasta);

                    if (nomenclar)
                    {
                        IList <DireccionVO> nomencladas;

                        if (latitud.HasValue &&
                            longitud.HasValue)
                        {
                            nomencladas = new List <DireccionVO> {
                                GeocoderHelper.GetEsquinaMasCercana(latitud.Value, longitud.Value)
                            };
                            NomenclarByLatLon(latitud.Value, longitud.Value);
                        }
                        else if (!string.IsNullOrEmpty(calle) &&
                                 (!string.IsNullOrEmpty(esquina) || altura.HasValue) &&
                                 (!string.IsNullOrEmpty(partido) || !string.IsNullOrEmpty(provincia)))
                        {
                            nomencladas = NomenclarByCalle(calle, altura.HasValue ? altura.Value : -1, esquina, partido, provincia);
                        }
                        else if (!string.IsNullOrEmpty(direccion))
                        {
                            nomencladas = NomenclarByDireccion(direccion);
                        }
                        else
                        {
                            nomencladas = new List <DireccionVO>(0);
                        }

                        if (nomencladas.Count == 1)
                        {
                            var direccionNomenclada = nomencladas[0];

                            var dir = new Direccion
                            {
                                Altura       = direccionNomenclada.Altura,
                                Calle        = direccionNomenclada.Calle,
                                Descripcion  = direccionNomenclada.Direccion,
                                IdCalle      = direccionNomenclada.IdPoligonal,
                                IdEntrecalle = -1,
                                IdEsquina    = direccionNomenclada.IdEsquina,
                                IdMapa       = (short)direccionNomenclada.IdMapaUrbano,
                                Latitud      = direccionNomenclada.Latitud,
                                Longitud     = direccionNomenclada.Longitud,
                                Pais         = "Argentina",
                                Partido      = direccionNomenclada.Partido,
                                Provincia    = direccionNomenclada.Provincia,
                                Vigencia     = new Vigencia {
                                    Inicio = DateTime.Now
                                }
                            };

                            var pol = new Poligono {
                                Radio = 100, Vigencia = new Vigencia {
                                    Inicio = DateTime.Now
                                }
                            };
                            pol.AddPoints(new[] { new PointF((float)direccionNomenclada.Longitud, (float)direccionNomenclada.Latitud) });


                            geoRef.AddHistoria(dir, pol, DateTime.UtcNow);
                        }
                    }

                    list.Add(geoRef);
                }

                foreach (var geoRef in list)
                {
                    DAOFactory.ReferenciaGeograficaDAO.SaveOrUpdate(geoRef);
                    AddReferenciasGeograficas(geoRef);
                }

                transaction.Commit();
                DAOFactory.ReferenciaGeograficaDAO.UpdateGeocercas(_empresasLineas);
            }
        }