示例#1
0
        /// <summary>
        /// Paralelně provede pokus o nalezení nejbližšího bodu a použití jeho výšky
        /// </summary>
        /// <param name="locations">kolekce lokací pro které chceme získat výšku</param>
        /// <param name="elevationResponse">referencovaná odpověď do které chceme výsledky zapsat</param>
        /// <param name="premiumUser">Prémiový uživatel</param>
        /// <param name="spheroid">Použít sféroid pro výpočet vzdálenosti (pomalejší)</param>
        /// <returns>Kolekce lokací pro které nebyla nalezena výška</returns>
        private static IEnumerable <Location> GetPointsFromDbParallel(IEnumerable <Location> locations, ref ElevationResponse elevationResponse, bool premiumUser, bool spheroid)
        {
            var locsWithoutElevation = new List <Location>();
            List <ResultDistance> resultDistances;

            try
            {
                resultDistances = PostgreDbConnector.GetClosestPointWithinParallel(locations, WITHIN_DISTANCE, premiumUser, spheroid);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                logger.Error(e);
                throw;
            }

            foreach (Result result in elevationResponse.result)
            {
                ResultDistance closest = resultDistances.Find(rd => rd.Result.location.Equals(result.location));
                if (closest.Distance <= MAX_DISTANCE && closest.Distance >= 0)
                {
                    result.elevation  = closest.Result.elevation;
                    result.resolution = closest.Result.resolution != -1 ? closest.Result.resolution : closest.Distance;
                }
                else
                {
                    locsWithoutElevation.Add(result.location);
                }
            }

            return(locsWithoutElevation);
        }
示例#2
0
        /// <summary>
        /// Provede pokus o nalezení nejbližšího bodu a použití jeho výšky
        /// </summary>
        /// <param name="locations">kolekce lokací pro které chceme získat výšku</param>
        /// <param name="elevationResponse">referencovaná odpověď do které chceme výsledky zapsat</param>
        /// <param name="premiumUser">Prémiový uživatel</param>
        /// <param name="spheroid">Použít sféroid pro výpočet vzdálenosti (pomalejší)</param>
        /// <returns>Kolekce lokací pro které nebyla nalezena výška</returns>
        private static IEnumerable <Location> GetPointsFromDb(IEnumerable <Location> locations, ref ElevationResponse elevationResponse, bool premiumUser, bool spheroid)
        {
            var locsWithoutElevation = new List <Location>();

            foreach (Result result in elevationResponse.result)
            {
                var closest = new ResultDistance();
                try
                {
                    closest = PostgreDbConnector.GetClosestPointWithin(result.location, WITHIN_DISTANCE, premiumUser, spheroid);
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    logger.Error(e);
                }

                if (closest.Distance <= MAX_DISTANCE && closest.Distance >= 0)
                {
                    result.elevation  = closest.Result.elevation;
                    result.resolution = closest.Result.resolution != -1 || closest.Result.resolution != 0 ? closest.Result.resolution : closest.Distance;
                }
                else
                {
                    locsWithoutElevation.Add(result.location);
                }
            }

            return(locsWithoutElevation);
        }