Exemple #1
0
        public override void AppendFeatures(HostnameSplitterResult parsedHostname, GeonamesCityEntity cityEntity, Features features)
        {
            if (parsedHostname == null ||
                parsedHostname.DomainInfo?.RegistrableDomain == null ||
                parsedHostname.SubdomainParts == null ||
                parsedHostname.SubdomainParts.Count == 0 ||
                cityEntity == null)
            {
                return;
            }

            var domain = parsedHostname.DomainInfo.RegistrableDomain;

            Dictionary <PatternRule, PatternMiningCoordinates> rulesToCoordinates;

            if (!this.hostnamePatternRules.TryGetValue(domain, out rulesToCoordinates))
            {
                return;
            }

            var subdomainParts = parsedHostname.SubdomainParts;

            if (subdomainParts == null || subdomainParts.Count == 0)
            {
                return;
            }

            var ruleAtoms = this.miner.CreateRuleAtoms(subdomainParts);

            if (ruleAtoms == null || ruleAtoms.Count == 0)
            {
                return;
            }

            var rules = this.miner.GeneratePossibleRules(ruleAtoms);

            if (rules == null || rules.Count == 0)
            {
                return;
            }

            foreach (var rule in rules)
            {
                PatternMiningCoordinates coordinates;

                if (rulesToCoordinates.TryGetValue(rule, out coordinates))
                {
                    var distance = DistanceHelper.Distance(cityEntity.Latitude, cityEntity.Longitude, coordinates.Latitude, coordinates.Longitude, DistanceUnit.Kilometer);

                    // TODO: Make this configurable
                    // TODO: Distance should vary depending on geohash length?
                    if (distance <= 100)
                    {
                        features[CityFeatureType.HostnamePatternMatch] = true;
                    }
                }
            }
        }
        public async Task <IEnumerable <Location> > GetBusinessLocationsWithinRadius(double latitude, double longitude, double radius, string searchText)
        {
            var root = await _businessDbContext.Locations.Include(y => y.AdditionalLocationImages).ToListAsync();

            IList <Location> list = new List <Location>();

            foreach (var item in root)
            {
                if (DistanceHelper.Distance(latitude, longitude, item.Geolocation.Latitude, item.Geolocation.Longitude, 'K') <= radius)
                {
                    list.Add(item);
                }
            }
            return(list);
        }
Exemple #3
0
        public string GetLocationCity(double longitude, double latitude)
        {
            Dictionary <string, double> lst      = new Dictionary <string, double>();
            List <TbCityEntity>         dataList = _cityRepository.ListAll()?.ToList();

            foreach (var item in dataList)
            {
                double dis = DistanceHelper.Distance(latitude, longitude, item.Latitude, item.Longitude);
                lst.Add(item.CityName, dis);
            }

            var result2 = from pair in lst orderby pair.Value select pair.Key;

            return(result2.FirstOrDefault());
        }
        private ClassificationResult PickBestByPattern(string hostname, List <ClassificationResult> results)
        {
            var splitResults = HostnameSplitter.Split(hostname);

            if (splitResults == null || splitResults.DomainInfo?.RegistrableDomain == null || splitResults.SubdomainParts == null || splitResults.SubdomainParts.Count == 0)
            {
                return(null);
            }

            var domain = splitResults.DomainInfo.RegistrableDomain;

            Dictionary <PatternRule, PatternMiningCoordinates> rulesToCoordinates;

            if (!this.reducedRules.TryGetValue(domain, out rulesToCoordinates))
            {
                return(null);
            }

            var subdomainParts = splitResults.SubdomainParts;

            if (subdomainParts == null || subdomainParts.Count == 0)
            {
                return(null);
            }

            var ruleAtoms = this.miner.CreateRuleAtoms(subdomainParts);

            if (ruleAtoms == null || ruleAtoms.Count == 0)
            {
                return(null);
            }

            var rules = this.miner.GeneratePossibleRules(ruleAtoms);

            if (rules == null || rules.Count == 0)
            {
                return(null);
            }

            var filteredRulesToCoordinates = new Dictionary <PatternRule, PatternMiningCoordinates>();

            foreach (var rule in rules)
            {
                PatternMiningCoordinates coordinates;

                if (rulesToCoordinates.TryGetValue(rule, out coordinates))
                {
                    filteredRulesToCoordinates[rule] = coordinates;
                }
            }

            ClassificationResult closestResult = null;
            double      smallestDistanceKm     = int.MaxValue;
            PatternRule bestRule = null;

            foreach (var result in results)
            {
                if (result.City != null)
                {
                    foreach (var entry in filteredRulesToCoordinates)
                    {
                        var rule        = entry.Key;
                        var coordinates = entry.Value;

                        var distance = DistanceHelper.Distance(result.City.Latitude, result.City.Longitude, coordinates.Latitude, coordinates.Longitude, DistanceUnit.Kilometer);

                        if (distance < smallestDistanceKm)
                        {
                            closestResult      = result;
                            smallestDistanceKm = distance;
                            bestRule           = rule;
                        }
                    }
                }
            }

            if (closestResult != null && smallestDistanceKm <= this.distanceThresholdKm)
            {
                return(closestResult);
            }

            return(null);
        }
 public async void CalculateDistance(double lat, double lon)
 {
     this.Distance = DistanceHelper.Distance(lat, lon, Latitude, Longitude, 'K');
 }
 public async void CalculateDistance(Geocoordinate coordinates)
 {
     this.Distance = DistanceHelper.Distance(coordinates.Latitude, coordinates.Longitude, Latitude, Longitude, 'K');
 }
Exemple #7
0
 public double DetermineDistance(CoordWithOcc item1, CoordWithOcc item2)
 {
     return(DistanceHelper.Distance(item1.Coord.Latitude, item1.Coord.Longitude, item2.Coord.Latitude, item2.Coord.Longitude, DistanceUnit.Kilometer));
 }
Exemple #8
0
 public double DetermineDistance(PatternMiningCoordinates item1, PatternMiningCoordinates item2)
 {
     return(DistanceHelper.Distance(item1.Latitude, item1.Longitude, item2.Latitude, item2.Longitude));
 }
Exemple #9
0
        public static List <Rectangle> Compute(Size imageSize, LineSegment2D[] lines)
        {
            const double scaleStep = 0.5;
            const double minScale  = 0.1;
            const double ratio     = 1.5;

            var allLines = lines.Select(RotateLineSegment2D).ToArray();

            var left       = default(LineSegment2D);
            var right      = default(LineSegment2D);
            var leftPoint  = new Point(int.MinValue, 0);
            var rightPoint = new Point(int.MaxValue, 0);

            var viewPoint = imageSize.Width / 2;

            foreach (var line in allLines)
            {
                var start = FindStartingPoint(line, imageSize.Width, imageSize.Height, false);
                if (start.X >= leftPoint.X && start.X <= viewPoint)
                {
                    left      = line;
                    leftPoint = start;
                }
                else if (start.X <= rightPoint.X && start.X > viewPoint)
                {
                    right      = line;
                    rightPoint = start;
                }
            }

            var maxY = Math.Min(FindStartingPoint(left, imageSize.Width, imageSize.Height, true).Y,
                                FindStartingPoint(right, imageSize.Width, imageSize.Height, true).Y);

            leftPoint  = FindStartingPoint(left, imageSize.Width, maxY, false);
            rightPoint = FindStartingPoint(right, imageSize.Width, maxY, false);

            var intersection = Intersection(left, right);


            var windowSize        = rightPoint.X - leftPoint.X;
            var windowMiddlePoint = new Point(leftPoint.X + windowSize / 2, leftPoint.Y);
            var windowDirection   =
                new PointF(-(left.Direction.X + right.Direction.X * left.Direction.Y / right.Direction.Y) / 2,
                           -left.Direction.Y);
            var middleDistance =
                (float)Math.Sqrt(windowDirection.X * windowDirection.X + windowDirection.Y * windowDirection.Y);

            windowDirection = new PointF(windowDirection.X / middleDistance, windowDirection.Y / middleDistance);

            //calculate step count
            var stepCount = 0;
            var temp      = minScale;

            do
            {
                temp = temp / scaleStep;
                ++stepCount;
            } while (temp < 1);

            var coefficient = DistanceHelper.Distance(windowMiddlePoint, intersection);

            var scale   = 1.0;
            var windows = new List <Rectangle>();

            for (var i = 0; i < stepCount; ++i)
            {
                var windowWidth  = windowSize * scale;
                var windowHeight = windowWidth / ratio;
                var length       = (1.0 - scale) * coefficient;
                var position     = new Point((int)(windowMiddlePoint.X + windowDirection.X * length),
                                             (int)(windowMiddlePoint.Y + windowDirection.Y * length));
                var windowLeft = position.X - windowWidth / 2;
                var windowDown = position.Y - windowHeight;
                windows.Add(new Rectangle((int)windowLeft, (int)windowDown, (int)windowWidth, (int)windowHeight));
                scale *= scaleStep;
            }

            return(windows);
        }
Exemple #10
0
        private ClassificationResult FilterByPatterns(string hostname, ClassificationResult result)
        {
            if (result == null)
            {
                return(null);
            }

            var splitResults = HostnameSplitter.Split(hostname);

            if (splitResults == null || splitResults.DomainInfo?.RegistrableDomain == null || splitResults.SubdomainParts == null || splitResults.SubdomainParts.Count == 0)
            {
                return(null);
            }

            var domain = splitResults.DomainInfo.RegistrableDomain;

            Dictionary <PatternRule, PatternMiningCoordinates> rulesToCoordinates;

            if (!this.reducedRules.TryGetValue(domain, out rulesToCoordinates))
            {
                return(null);
            }

            var subdomainParts = splitResults.SubdomainParts;

            if (subdomainParts == null || subdomainParts.Count == 0)
            {
                return(null);
            }

            var ruleAtoms = this.miner.CreateRuleAtoms(subdomainParts);

            if (ruleAtoms == null || ruleAtoms.Count == 0)
            {
                return(null);
            }

            var rules = this.miner.GeneratePossibleRules(ruleAtoms);

            if (rules == null || rules.Count == 0)
            {
                return(null);
            }

            var filteredRulesToCoordinates = new Dictionary <PatternRule, PatternMiningCoordinates>();

            foreach (var rule in rules)
            {
                PatternMiningCoordinates coordinates;

                if (rulesToCoordinates.TryGetValue(rule, out coordinates))
                {
                    var distance = DistanceHelper.Distance(result.City.Latitude, result.City.Longitude, coordinates.Latitude, coordinates.Longitude, DistanceUnit.Kilometer);

                    if (distance > this.distanceThresholdKm)
                    {
                        return(null);
                    }
                }
            }

            return(result);
        }