public void AddFromLatLon(double lat, double lon) { var dir = GeocoderHelper.GetEsquinaMasCercana(lat, lon); if (dir == null) { return; } SetDireccion(dir); }
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."; }
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)); } }
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; } } }
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); } }