/// <summary> /// Esta funcion procesa la informacion recivida. /// Transforma el menjate tipo csv en el objeto LocalizadorData para luego /// Ejecutar un proceso de busqueda de la informacion solicitada. /// Luego la envia nuevamente. /// </summary> /// <param name="message"></param> private static void ProcessInfo(string message) { LocalizadorData LD = new LocalizadorData(); /// <summary> /// Convierte el mensaje en LocalizadorData /// </summary> foreach (string v in message.Split(";")) { string[] vr = v.Split(":"); switch (vr[0].ToLower()) { case "id": LD.id = Convert.ToInt64(vr[1]); break; case "ciudad": LD.ciudad = vr[1]; break; case "calle": LD.calle = vr[1]; break; case "numero": LD.numero = Convert.ToInt32(vr[1]); break; case "codigo_postal": LD.codigo_postal = vr[1]; break; case "provincia": LD.provincia = vr[1]; break; case "pais": LD.pais = vr[1]; break; default: break; } ; } if (LD != null) { /// <summary> /// Busca la informacion faltante. /// </summary> LD = OSM_FG.Find(LD); /// <summary> /// Envia la informacion solicitada. /// </summary> Send(LD); } }
/// <summary> /// Esta funcion busc a travez de la latitud y la longitud la direccion correspondiente /// Devolviendo un objeto de tipo LocalizadorData con los datos correspondienes. /// </summary> /// <param name="lat"></param> /// <param name="lon"></param> /// <returns>new LocalizadorData</returns> public static LocalizadorData Find(double lat, double lon) { LocalizadorData LD = new LocalizadorData(); ReverseGeocodeRequest g = new ReverseGeocodeRequest(); GeocodeResponse r = new GeocodeResponse(); ReverseGeocoder RG = new ReverseGeocoder(); g.Latitude = lat; g.Longitude = lon; Task <GeocodeResponse> rs = RG.ReverseGeocode(g); r = rs.Result; LD.calle = r.Address.Road; return(LD); }
/// <summary> /// Esta funcion busca a traves de las direccion proporcionada por el objeto LocalizadorData /// la latitud y la longitud de dicha direccion. /// </summary> /// <param name="LD"></param> /// <returns>LD</returns> public static LocalizadorData Find(LocalizadorData LD) { ForwardGeocodeRequest d = new ForwardGeocodeRequest(); GeocodeResponse g = new GeocodeResponse(); d.City = LD.ciudad; d.Country = LD.pais; d.StreetAddress = LD.calle + " " + LD.numero.ToString(); d.County = LD.provincia; ForwardGeocoder FG = new ForwardGeocoder(); Task <GeocodeResponse[]> r = FG.Geocode(d); g = r.Result[0]; LD.latitud = g.Latitude; LD.longitud = g.Longitude; return(LD); }
/// <summary> /// Esta funcion estatica se utiliza para enviar informacion a travez de RabbitMQ. /// Esta recibe un objeto de tipo LocalizadorData el cual es procesado en una cadena simple tipo csv /// para ser enviada. /// </summary> /// <param name="DataLD"></param> public static void Send(LocalizadorData DataLD) { try { string message = "ID:" + DataLD.id.ToString() + ";LAT:" + DataLD.latitud.ToString() + ";LON:" + DataLD.longitud.ToString(); var factory = new ConnectionFactory() { UserName = User, Password = Pass, HostName = Hostname, Port = Port }; using (var connection = factory.CreateConnection()) { using (var channel = connection.CreateModel()) { channel.QueueDeclare(queue: sendTopic, durable: true, exclusive: false, autoDelete: false, arguments: null); var body = Encoding.UTF8.GetBytes(message); var properties = channel.CreateBasicProperties(); properties.Persistent = true; channel.BasicPublish(exchange: "", routingKey: sendTopic, basicProperties: properties, body: body); Console.WriteLine(sendTopic + " [x] Sent {0}", message); } } } catch (Exception e) { Console.WriteLine("Error: " + e.Message); } }