/// <summary> /// Initializes the grid by loading or creating cardinal direction points. /// </summary> private void Init() { var directionPoints = new Dictionary <DirectionEnum, IGeoLocation>(); // load existing cardinal direction points from DB foreach (var directionPoint in Home.CardinalDirectionPoints.Where(x => x.UnitDistance == unitDistance)) { directionPoints[directionPoint.Direction] = directionPoint; } // add any missing direction points foreach (DirectionEnum direction in Enum.GetValues(typeof(DirectionEnum))) { if (directionPoints.ContainsKey(direction)) { continue; } directionPoints[direction] = ComputeOffset(direction); var newPoint = new CardinalDirectionPoint() { OriginId = Home.Id, UnitDistance = unitDistance, Direction = direction, Latitude = directionPoints[direction].Latitude, Longitude = directionPoints[direction].Longitude }; dbContext.CardinalDirectionPoints.InsertOnSubmit(newPoint); } // save any possible new points dbContext.SubmitChanges(); // set deltas deltaLat = (directionPoints[DirectionEnum.North].Latitude - directionPoints[DirectionEnum.South].Latitude) / 2.0; deltaLon = (directionPoints[DirectionEnum.East].Longitude - directionPoints[DirectionEnum.West].Longitude) / 2.0; }
public double CalculateArea(ComputeAreaInputs rangeOptions) { var range = new RangeGrid(rangeOptions.OriginName, rangeOptions.RangeMins, rangeOptions.UnitDistance); range.Process(); var border = range.GetBorder(rangeOptions.SmoothPct); var area = GeometryApi.ComputeArea(border, apiKey); using (var dbContext = new RangerDataContext()) { var existingRegion = dbContext .Regions .SingleOrDefault(x => x.OriginId == range.Home.Id && x.RangeMins == rangeOptions.RangeMins && x.UnitDistance == rangeOptions.UnitDistance); if (existingRegion == null) { var newRegion = new Region() { OriginId = range.Home.Id, RangeMins = rangeOptions.RangeMins, UnitDistance = rangeOptions.UnitDistance, Area = area, BorderNodes = border.Length }; dbContext.Regions.InsertOnSubmit(newRegion); } else { existingRegion.Area = area; existingRegion.BorderNodes = border.Length; } dbContext.SubmitChanges(); } return(area); }