public List <GeonameNode> ObtenerLocalizacion(string lugar)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            return(semanticIndexManager.ObtenerLocalizaciones(lugar));
        }
        public List <GeonameNode> ObtenerLugardeCoordenadasJerarquia(string latitud, string longitud)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            return(semanticIndexManager.ObtenerLugardeCoordenadasJerarquia(latitud, longitud));
        }
        public List <GeonameNode> GeoNames_Hierarchy(int GeonameId)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            return(semanticIndexManager.GeoNames_Hierarchy(GeonameId));
        }
        public List <GeonameNode> ObtenerCiudadesConsulta(string Consulta)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            return(semanticIndexManager.ObtenerCiudadesConsulta(Consulta));
        }
        public string ObtenerListaLugarCoordenadas_AM1(string geonodesSerializados)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Desserializamos el objeto enviado
            List <GeonameNode> geonodes = geonodesSerializados.DeserializarTo <List <GeonameNode> >();

            //Objeto copia para las operaciones
            List <GeonameNode> geonodestmp = new List <GeonameNode>();

            foreach (GeonameNode geotmp in geonodes)
            {
                List <GeonameNode> geonodestmpj = new List <GeonameNode>();
                geonodestmpj = semanticIndexManager.ObtenerLugardeCoordenadasJerarquia(geotmp.Latitud, geotmp.Longitud);

                if (geonodestmpj != null)
                {
                    foreach (GeonameNode getmpj in geonodestmpj)
                    {
                        if (getmpj.fcode == "ADM1")
                        {
                            geonodestmp.Add(getmpj);
                        }
                    }
                }
            }
            //Serializar la lista de salida
            return(geonodestmp.SerializarToXml());
        }
        public FeedXively RetornarDatosSensor(string feedID, DateTime fechaInicio, DateTime fechaFin)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Obtener el JSON de la BDD
            return(semanticIndexManager.RetornarDatosSensor(feedID, fechaInicio, fechaFin));
        }
        public List <FeedXively> RetornarMapaLugarDatapoints(double Latitud, double Longitud, string Consulta, DateTime fechaInicio, DateTime fechaFin, string idioma = "Español", double radio = 100)
        {
            string expansion = ObtenerConfig("utilizarExpansion");

            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Crea una copia de la lista para eliminar los sensores que no se les puede calcular distancia
            List <FeedXively> FeedsConPosicion = new List <FeedXively>();

            //Lista de los resultados de la busqueda
            List <FeedXively> dtsResult = new List <FeedXively>();

            //Buscar la consulta en el índice
            if (!string.IsNullOrEmpty(Consulta) && ObtenerConfiguracion("BusquedaBloqueada") == "No")
            {
                dtsResult = BuscarFeedsDataPoints(Consulta, fechaInicio, fechaFin, idioma);
            }
            else
            {
                return(null);
            }

            //Si encontro sensores entonces validar los que entran en el radio de acción
            if (dtsResult != null)
            {
                List <string> clavesBorrar = new List <string>();

                foreach (FeedXively dtr in dtsResult)
                {
                    if (dtr.feed.location != null && dtr.feed.location.lat != null && dtr.feed.location.lon != null)
                    {
                        //La funcion establece que el sensor este en el rango de N kms del lugar especificado. Si esta devuelve la distancia, sino devuelve cero
                        double distancia = semanticIndexManager.VerificarSensorenLugar(Latitud,
                                                                                       Longitud, Convert.ToDouble(dtr.feed.location.lat, culture),
                                                                                       Convert.ToDouble(dtr.feed.location.lon, culture), radio);
                        if (distancia > 0)
                        {
                            //ListaResultados.Add(indice, distancia);
                            GeonameNode nodolugardistancia = new GeonameNode();
                            nodolugardistancia.Latitud  = Latitud.ToString();
                            nodolugardistancia.Longitud = Longitud.ToString();
                            lugar ld = new lugar();
                            ld.nodoGeoname = nodolugardistancia;
                            ld.distancia   = distancia;
                            //Creamos el espacio en la variable de lista de lugares relacionada al sensor
                            dtr.lugares = new List <lugar>();
                            dtr.lugares.Add(ld);
                            FeedsConPosicion.Add(dtr);
                        }
                    }
                }
            }

            //Finalmente retorna la lista con los sensores correspondientes
            return(FeedsConPosicion);
        }
        public FeedXively RetornarMetadatosSensor(string IdSensor)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Obtener el objeto de la BDD
            FeedXively xtemp = semanticIndexManager.ObtenerJSONFeedBDD(IdSensor);

            return(xtemp);
        }
        public string  RetornarJsonSensor(string IdSensor)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Obtener el JSON de la BDD
            string xtemp = semanticIndexManager.ObtenerJsonFeed(ConfigurationManager.AppSettings["APIkey"], IdSensor);

            //Retornar el json
            return(xtemp);
        }
        public string RetornarDatapointsFeed(string feedID, string DatastreamId, string fechaInicio, string fechaFin)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Obtener el JSON de la BDD
            string datapoints = semanticIndexManager.RetornarDatapointsFeed(feedID, DatastreamId,
                                                                            Convert.ToDateTime(fechaInicio),
                                                                            Convert.ToDateTime(fechaFin));

            return(datapoints);
        }
        public string RetornarJsonSensorLocal(string IdSensor)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Obtener el JSON de la BDD
            //string xtemp = semanticIndexManager.ObtenerJsonFeed(ConfigurationManager.AppSettings["APIkey"], IdSensor);
            FeedXively xftemp = semanticIndexManager.ObtenerJSONFeedBDD(IdSensor);
            string     xtemp  = JsonConvert.SerializeObject(xftemp);

            //Retornar el json
            return(xtemp);
        }
        public List <GeonameNode> ObtenerListaLugarCoordenadas(string geonodesSerializados)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Desserializamos el objeto enviado
            List <GeonameNode> geonodes = geonodesSerializados.DeserializarTo <List <GeonameNode> >();

            //Objeto copia para las operaciones
            List <GeonameNode> geonodestmp = new List <GeonameNode>();

            foreach (GeonameNode geotmp in geonodes)
            {
                geonodestmp.Add(semanticIndexManager.ObtenerLugardeCoordenadas(geotmp.Latitud, geotmp.Longitud));
            }

            return(geonodestmp);
        }
        public string CrearIndiceSemantico(string NombreOntología)
        {
            string fuentedatos;
            string conceptoscargados = string.Empty;
            string filename          = Path.GetFileName(NombreOntología);
            string ruta = SemanticIndexManager.RutaOntologiaSinArchivo;

            try
            {
                //Bloquea las búsquedas
                AsignarConfig("BusquedaBloqueada", "Si");

                //Crea el Objeto que guarda todo el conocimiento del negocio
                semanticIndexManager = new SemanticIndexManager();

                //Aplicar segpun los parámetros
                if (ObtenerConfig("BDDfuente") == "Xively")
                {
                    semanticIndexManager.CrearIndiceSemantico(true);
                    fuentedatos = "el servidor Xively";
                }
                else
                {
                    semanticIndexManager.CrearIndiceSemantico(false);
                    fuentedatos = "la Base de Datos Local de Archivos JSON";
                }

                //Se debe cargar los conceptos de la ontologia para el proceso de expansión de consulta
                conceptoscargados = CargarConceptosOntologia(ruta + NombreOntología);

                //Desbloquear la búsqueda
                AsignarConfig("BusquedaBloqueada", "No");

                return("El índice se ha creado correctamente desde " + fuentedatos);
            }
            catch (Exception ex)
            {
                //Se restablece la busqueda
                AsignarConfig("BusquedaBloqueada", "No");

                //Enviar error
                return("Error: Ocurrio un error al crear el Índice: " + ex.Message);
            }
        }
        public List <FeedXively> RetornarMapaLugarListaSensores(double Latitud, double Longitud, List <FeedXively> dtsResult, string idioma = "Español", double radio = 100)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Crea una copia de la lista para eliminar los sensores que no se les puede calcular distancia
            List <FeedXively> FeedsConPosicion = new List <FeedXively>();

            //Si encontro sensores entonces validar los que entran en el radio de acción
            if (dtsResult != null)
            {
                List <string> clavesBorrar = new List <string>();

                foreach (FeedXively dtr in dtsResult)
                {
                    if (dtr.feed.location != null)
                    {
                        //La funcion establece que el sensor este en el rango de N kms del lugar especificado. Si esta devuelve la distancia, sino devuelve cero
                        double distancia = semanticIndexManager.VerificarSensorenLugar(Latitud,
                                                                                       Longitud, Convert.ToDouble(dtr.feed.location.lat, culture),
                                                                                       Convert.ToDouble(dtr.feed.location.lon, culture), radio);
                        if (distancia > 0)
                        {
                            //ListaResultados.Add(indice, distancia);
                            GeonameNode nodolugardistancia = new GeonameNode();
                            nodolugardistancia.Latitud  = Latitud.ToString();
                            nodolugardistancia.Longitud = Longitud.ToString();
                            lugar ld = new lugar();
                            ld.nodoGeoname = nodolugardistancia;
                            ld.distancia   = distancia;
                            //Creamos el espacio en la variable de lista de lugares relacionada al sensor
                            dtr.lugares = new List <lugar>();
                            dtr.lugares.Add(ld);
                            FeedsConPosicion.Add(dtr);
                        }
                    }
                }
            }

            //Finalmente retorna la lista con los sensores correspondientes
            return(FeedsConPosicion);
        }
        public List <FeedXively> BuscarFeeds(string consulta, string idioma = "Español")
        {
            if (!string.IsNullOrEmpty(consulta) && ObtenerConfiguracion("BusquedaBloqueada") == "No")
            {
                //Crea el Objeto que guarda todo el conocimiento del negocio
                SemanticIndexManager semanticIndexManager = new SemanticIndexManager();

                //Crea la lista de documentos que serán el resultado de la búsqueda
                List <UrlDocument> allReponse = new List <UrlDocument>();

                //Se busca en español o el ingles. Si es nulo busca por ambos.
                if (idioma == "Español")
                {
                    allReponse = semanticIndexManager.BuscarSemanticIndex(consulta, true);
                }
                else if (idioma == "Ingles")
                {
                    allReponse = semanticIndexManager.BuscarSemanticIndex(consulta, false);
                }
                else
                {
                    allReponse = semanticIndexManager.BuscarSemanticIndex(consulta, true); //Por defecto busca español
                }
                //Armar la estructura de datos a retornar como resltado
                List <FeedXively> SensoresResult = new List <FeedXively>();

                //Traemos todos los metadatos del sensor que estan almacenados en la BDD local
                foreach (UrlDocument urldoc in allReponse)
                {
                    FeedXively xtemp = semanticIndexManager.ObtenerJSONFeedBDD(urldoc.Id);
                    SensoresResult.Add(xtemp);
                }

                return(SensoresResult);
            }
            else
            {
                return(null);
            }
        }
        public string CargarFeedXivelyBDD(string feedId)
        {
            try
            {
                //Bloquea las búsquedas
                AsignarConfig("BusquedaBloqueada", "Si");

                //Recupera el objeto de logica de negoicio de la aplicación para que el cambio de ontologia tenga efecto
                semanticIndexManager = new SemanticIndexManager();

                //semanticIndexManager.Timeout = -1;
                semanticIndexManager.CargarFeedXivelyBDD(feedId);

                //Desbloquea las búsquedas
                AsignarConfig("BusquedaBloqueada", "No");

                return("El índice se ha Actualizado correctamente desde el servidor Xively.");
            }
            catch (Exception ex)
            {
                AsignarConfig("BusquedaBloqueada", "No");
                return("Ocurrio un error para cargar e indexar el Feed: " + ex.Message);
            }
        }
        public List <GeonameNode> ObtenerListaLugarCoordenadasJerarquica(string geonodesSerializados)
        {
            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Desserializamos el objeto enviado
            List <GeonameNode> geonodes = geonodesSerializados.DeserializarTo <List <GeonameNode> >();

            //Objeto copia para las operaciones
            List <GeonameNode> geonodestmp = new List <GeonameNode>();

            foreach (GeonameNode geotmp in geonodes)
            {
                List <GeonameNode> geonodestmpj = new List <GeonameNode>();
                geonodestmpj = ObtenerLugardeCoordenadasJerarquia(geotmp.Latitud, geotmp.Longitud);
                //Añadimos el último nodo que contiene el lugar buscado
                if (geonodestmpj != null)
                {
                    geonodestmp.Add(geonodestmpj[geonodestmpj.Count - 1]);
                }
            }

            return(geonodestmp);
        }
        private DataSet SearchSemanticIndex(string Consulta, string idioma)
        {
            //string idioma = ObtenerConfig("idiomaBusqueda");
            string expansion = ObtenerConfig("utilizarExpansion");

            //Crea el Objeto que guarda todo el conocimiento del negocio
            semanticIndexManager = new SemanticIndexManager();

            //Crea la lista de documentos que serán el resultado de la búsqueda
            List <UrlDocument> allReponse = new List <UrlDocument>();

            if (expansion == "Si")
            {
                //Realiza la expansión de la consulta a través del servicio.
                Consulta = ExpandirConsulta(Consulta, idioma);
            }

            //Se busca en español o el ingles. Si es nulo busca por ambos.
            if (idioma == "Español")
            {
                allReponse = semanticIndexManager.BuscarSemanticIndex(Consulta, true);
            }
            else if (idioma == "Ingles")
            {
                allReponse = semanticIndexManager.BuscarSemanticIndex(Consulta, false);
            }
            else
            {
                allReponse = semanticIndexManager.BuscarSemanticIndex(Consulta, true); //Por defecto busca español
            }
            //para DATASET que se devolvera como resultado
            UrlDocument objUrld = new UrlDocument();
            DataSet     nuevoDS = new DataSet();
            DataTable   table1  = new DataTable("Objetos Encontrados");

            table1.Columns.Add("Id");
            table1.Columns.Add("Title");
            table1.Columns.Add("Titulo_HTML");
            table1.Columns.Add("Url");
            table1.Columns.Add("URL_Sensor");
            table1.Columns.Add("Resumen");
            table1.Columns.Add("Tags");
            table1.Columns.Add("Localizacion");
            table1.Columns.Add("Dominio");
            table1.Columns.Add("Datastreams_feed");
            table1.Columns.Add("Website");
            table1.Columns.Add("Elevacion");
            table1.Columns.Add("Latitud");
            table1.Columns.Add("Longitud");
            //Campos para el PageRangkin
            table1.Columns.Add("Conceptos");   //Conceptos por los cuales fue encontrado en Xively
            table1.Columns.Add("Consulta");    //Consulta por la cual fue seleccionado el sensor
            table1.Columns.Add("Distancia");   //Distancia para efectos de un lugar específico
            table1.PrimaryKey = new DataColumn[] { table1.Columns["Id"] };

            foreach (UrlDocument urldoc in allReponse)
            {
                table1.Rows.Add(urldoc.Id, urldoc.Tittle, urldoc.TituloHTML(), urldoc.URL, urldoc.URLMostrar(), urldoc.Resume,
                                urldoc.Tags, urldoc.Localizacion_name, urldoc.Domain, urldoc.Datastreams_feed, urldoc.Website,
                                urldoc.Elevacion, urldoc.Latitud, urldoc.Longitud, urldoc.ConceptosLista(), Consulta);
            }

            nuevoDS.Tables.Add(table1);
            return(nuevoDS);
        }
 public WSSemanticSearch()
 {
     SemanticIndexManager _semanticIndexManager = new SemanticIndexManager();
 }