public ActionResult UpcomingTripDetails(int tripId) { Trip trip; if (TempData.ContainsKey("CurrentUpcomingTrips")) { trip = ((List <Trip>)TempData["CurrentUpcomingTrips"]).FirstOrDefault(i => i.Id == tripId); TempData.Keep("CurrentUpcomingTrips"); if (trip != null) { if (trip.Steps != null) { foreach (Step step in trip.Steps) { if (step.EncodedMapString != null) { step.googlePoints = GooglePoints.Decode(step.EncodedMapString); } } } return(View(trip)); } } return(RedirectToAction("Index", "TripDashboard")); }
public async Task <GenerateResponseFP> GenerateRouteAsync(GenerateFP fp) { var teste = JsonConvert.SerializeObject(fp); using (var content = new StringContent(teste, Encoding.UTF8, "application/json")) { var response = await Client.PostAsync(Const.generateUrl, content).ConfigureAwait(false); var json = await response.Content.ReadAsStringAsync(); if (response.IsSuccessStatusCode) { var show = JsonConvert.DeserializeObject <GenerateResponseFP>(json); //show.Positions = new List<Position>(); var myFp = GooglePoints.Decode(show.EncodedPolyline); foreach (var item in myFp) { show.Positions.Add(new Position(item.Latitude, item.Longitude)); } return(show); } else { var msg = ApiException(json); throw new BadRequestException(msg); } } }
public override bool Equals(System.Object obj) { // If parameter is null return false. if (obj == null) { return(false); } // If parameter cannot be cast to Point return false. GooglePoints p = obj as GooglePoints; if ((System.Object)p == null) { return(false); } if (p.Count != Count) { return(false); } for (int i = 0; i < p.Count; i++) { if (!this[i].Equals(p[i])) { return(false); } } // Return true if the fields match: return(true); }
public ActionResult ItineraryDetails(Guid itineraryId) { Plan plan; if (TempData.ContainsKey("CurrentPlan")) { plan = (Plan)TempData["CurrentPlan"]; TempData.Keep("CurrentPlan"); if (plan.GetItinerary(itineraryId) != null) { Itinerary itinerary = plan.GetItinerary(itineraryId); if (itinerary.legs != null) { foreach (Leg leg in itinerary.legs) { if (leg.legGeometry != null) { if (leg.legGeometry.points != null) { leg.googlePoints = GooglePoints.Decode(leg.legGeometry.points); } } } } return(View(itinerary)); } } return(RedirectToAction("Index", "TripDashboard")); }
public async Task <string> BuildMap(long activityId, string summaryPolyline) { var decodedSummaryPolyline = GooglePoints.Decode(summaryPolyline).ToList(); var path = string.Join("|", decodedSummaryPolyline.Select(p => $"{p.Latitude},{p.Longitude}")); var formatString = @"https://maps.googleapis.com/maps/api/staticmap?maptype=roadmap&size=800x800&path={0}&key={1}&size=800x800"; var url = string.Format(formatString, path, _googleSettings.ApiKey); var response = await _client.GetAsync(url); var result = await response.Content.ReadAsByteArrayAsync(); var s3Filename = $"{activityId}.png"; using (var image = Image.Load(result)) { image.Save(s3Filename); } await UploadFileToS3(s3Filename); var s3Url = $"{CloudFrontBaseUrl}{s3Filename}"; _logger.LogInformation($"New activity image uploaded: {s3Url}"); return(s3Url); }
public async Task Create(Area region) { string areaId = Guid.NewGuid().ToString(); region.AreaID = areaId; region.Points = GooglePoints.Decode(region.EncodedPolygon).Select(x => new LocationPoint(x.Latitude, x.Longitude)).ToList(); region.EncodedPolygon = null; List <Tile> tiles = this.GetCoordinateTile(region.Points.Select(x => new PointF((float)x.Lat, (float)x.Lng)).ToList(), true).tiles; AreaMaster areaMaster = new AreaMaster() { AreaID = areaId, AreaName = region.AreaName, IsPredefine = false, EncodedPolygon = GooglePoints.EncodeBase64(region.Points.Select(x => new CoordinateEntity(Convert.ToDouble(x.Lat), Convert.ToDouble(x.Lng)))), EncodedCompletedTiles = GooglePoints.EncodeBase64(tiles.Where(x => !x.IsPartialTile).Select(x => new CoordinateEntity(x.Row, x.Column))), EncodedPartialTiles = GooglePoints.EncodeBase64(tiles.Where(x => x.IsPartialTile).Select(x => new CoordinateEntity(x.Row, x.Column))) }; List <Task> tasks = new List <Task>(); tasks.Add(Task.Factory.StartNew(() => { this.context.SaveAsync <AreaMaster>(areaMaster).Wait(); })); List <Area> areas = this.transformRegion(region, tiles); SaveAreas(areas); Task.WaitAll(tasks.ToArray()); }
public static GooglePoints CloneMe(GooglePoints prev) { GooglePoints p = new GooglePoints(); for (int i = 0; i < prev.Count; i++) { p.Add(new GooglePoint(prev[i].ID, prev[i].Latitude, prev[i].Longitude, prev[i].IconImage, prev[i].InfoHTML)); } return(p); }
public async Task <TripSearchResult> SearchForTrip(TripSearch search) { TripSearchResult val = await Task.Factory.StartNew <TripSearchResult>(() => { TripSearchResult searchResult = new TripSearchResult(); var client = new RestClient(URI_STRING); client.UserAgent = USER_AGENT; var request = new RestRequest("/api/OTP", Method.GET); request.RequestFormat = DataFormat.Json; request.AddParameter("startLatitude", search.StartLatitude); request.AddParameter("startLongitude", search.StartLongitude); request.AddParameter("startLocation", search.StartLocation); request.AddParameter("endLatitude", search.EndLatitude); request.AddParameter("endLongitude", search.EndLongitude); request.AddParameter("endLocation", search.EndLocation); request.AddParameter("searchByArriveByTime", search.SearchByArriveByTime); request.AddParameter("time", search.Time); request.AddParameter("needWheelchairAccess", search.NeedWheelchairAccess); request.AddParameter("maxWalkMeters", search.MaxWalkMeters); IRestResponse <TripSearchResult> response = client.Execute <TripSearchResult>(request); searchResult = response.Data; if (searchResult != null) { foreach (Itinerary itinerary in searchResult.itineraries) { if (itinerary.legs != null) { foreach (Leg leg in itinerary.legs) { if (leg.legGeometry != null) { if (leg.legGeometry.points != null) { leg.googlePoints = GooglePoints.Decode(leg.legGeometry.points); } } } } } } return(searchResult); }); return(val); }
public Models.Route generateRoute(Tracker tracker) { using (var ctx = new SimulationContext()) { Address start; Address end; getRouteAddres(tracker, out start, out end); Route route = new Route(start, end, getPolyline(mapResponse(start, end))); route.Markers = (ICollection <Marker>)GooglePoints.Decode(route.Polyline.points).ToList(); ctx.SaveChanges(); return(route); } }
private List <AreaMaster> filterRegionList(List <AreaMaster> areas, decimal lat, decimal lng) { List <AreaMaster> filteredAreas = new List <AreaMaster>(); Parallel.ForEach(areas, area => { if (isPointInPolygon(GooglePoints.DecodeBase64(area.EncodedPolygon).Select(x => new LocationPoint(x.Latitude, x.Longitude)).ToList(), lat, lng)) { area.EncodedPolygon = ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(area.EncodedPolygon)); filteredAreas.Add(area); } }); return(filteredAreas); }
public GoogleObject(GoogleObject prev) { Points = GooglePoints.CloneMe(prev.Points); Polylines = GooglePolylines.CloneMe(prev.Polylines); Polygons = GooglePolygons.CloneMe(prev.Polygons); ZoomLevel = prev.ZoomLevel; ShowZoomControl = prev.ShowZoomControl; ShowMapTypesControl = prev.ShowMapTypesControl; Width = prev.Width; Height = prev.Height; MapType = prev.MapType; APIKey = prev.APIKey; ShowTraffic = prev.ShowTraffic; RecenterMap = prev.RecenterMap; }
public static GooglePolylines CloneMe(GooglePolylines prev) { GooglePolylines p = new GooglePolylines(); for (int i = 0; i < prev.Count; i++) { GooglePolyline GPL = new GooglePolyline(); GPL.ColorCode = prev[i].ColorCode; GPL.Geodesic = prev[i].Geodesic; GPL.ID = prev[i].ID; GPL.Points = GooglePoints.CloneMe(prev[i].Points); GPL.Width = prev[i].Width; p.Add(GPL); } return(p); }
public static GooglePolygons CloneMe(GooglePolygons prev) { GooglePolygons p = new GooglePolygons(); for (int i = 0; i < prev.Count; i++) { GooglePolygon GPL = new GooglePolygon(); GPL.FillColor = prev[i].FillColor; GPL.FillOpacity = prev[i].FillOpacity; GPL.ID = prev[i].ID; GPL.Status = prev[i].Status; GPL.StrokeColor = prev[i].StrokeColor; GPL.StrokeOpacity = prev[i].StrokeOpacity; GPL.StrokeWeight = prev[i].StrokeWeight; GPL.Points = GooglePoints.CloneMe(prev[i].Points); p.Add(GPL); } return(p); }
public GoogleObject(GoogleObject prev) { try { Directions = prev.Directions; Points = GooglePoints.CloneMe(prev.Points); Polylines = GooglePolylines.CloneMe(prev.Polylines); Polygons = GooglePolygons.CloneMe(prev.Polygons); ZoomLevel = prev.ZoomLevel; ShowZoomControl = prev.ShowZoomControl; ShowMapTypesControl = prev.ShowMapTypesControl; Width = prev.Width; Height = prev.Height; MapType = prev.MapType; APIKey = prev.APIKey; ShowTraffic = prev.ShowTraffic; RecenterMap = prev.RecenterMap; AutomaticBoundaryAndZoom = prev.AutomaticBoundaryAndZoom; } catch (Exception) {} }
public async Task <List <Trip> > GetTripsByType(int travelerId, TripType.Type type) { List <Trip> list = await Task.Factory.StartNew <List <Trip> >(() => { List <Trip> tripList = new List <Trip>(); var client = new RestClient(URI_STRING); client.UserAgent = USER_AGENT; var request = new RestRequest("/api/Trip", Method.GET); request.RequestFormat = DataFormat.Json; request.AddParameter("travelerID", travelerId); request.AddParameter("type", type); IRestResponse <List <Trip> > response = client.Execute <List <Trip> >(request); tripList = response.Data; foreach (Trip trip in tripList) { if (trip.Steps != null) { foreach (Step step in trip.Steps) { if (step.EncodedMapString != null) { step.googlePoints = GooglePoints.Decode(step.EncodedMapString); } } } } return(tripList); }); return(list); }
public RasterizeObject GetCoordinateTile(List <PointF> points, bool withRasterize, List <PointF> boundingBox = null, int zoomlevel = 14, string encodedTiles = null) { try { RasterizeObject rasterizeObject = new RasterizeObject(); rasterizeObject.tiles = new List <Tile>(); object lockObj = new object(); if (withRasterize) { string postData = @"{""zoom"": " + zoomlevel + @","; if (!string.IsNullOrEmpty(encodedTiles)) { postData += postData = @"""encodedTile"": """ + encodedTiles + @""""; } else if (points != null && points.Count() > 0) { string encodedString = GooglePoints.EncodeBase64(points.Select(x => new CoordinateEntity(x.X, x.Y))); postData += @"""encodedPolygon"": """ + encodedString + @""""; } if (boundingBox != null && boundingBox.Count() > 0) { string boundingBoxPostData = JSONHelper.GetString(boundingBox.Select(x => new LocationPoint { Lat = Convert.ToDecimal(x.X), Lng = Convert.ToDecimal(x.Y) }).ToList()); postData += @",""boundingBox"": " + boundingBoxPostData; } postData += "}"; string responseFromServer = responseFromServer = this.PostData(LambdaResourceType.areas, postData); if (boundingBox != null && boundingBox.Count() > 0) { return(JSONHelper.GetObject <RasterizeObject>(responseFromServer)); } else { RasterizeObject obj = new RasterizeObject(); obj.tiles = JSONHelper.GetObject <List <Tile> >(responseFromServer); return(obj); } } else { List <Tile> tilesCoordinates = new List <Tile>(); foreach (var point in points) { tilesCoordinates.Add(new Tile() { Zoom = zoomlevel, Lat = point.X, Lng = point.Y }); } ; Parallel.ForEach(tilesCoordinates.ChunkBy(200), tilesCoordinate => { string postData = JSONHelper.GetString(tilesCoordinate); string responseFromServer = this.PostData(LambdaResourceType.listings, postData); //string responseFromServer = this.CallRasterizationLambda(postData); lock (lockObj) { rasterizeObject.tiles.AddRange(JSONHelper.GetObject <List <Tile> >(responseFromServer)); } }); } return(rasterizeObject); } catch (Exception ex) { throw ex; } }
public static GooglePoints CloneMe(GooglePoints prev) { GooglePoints p = new GooglePoints(); for (int i = 0; i < prev.Count; i++) { p.Add(new GooglePoint(prev[i].ID, prev[i].Latitude, prev[i].Longitude, prev[i].IconImage, prev[i].InfoHTML,prev[i].ToolTip,prev[i].Draggable)); } return p; }
private static readonly string pw = ""; /* PW */ public static List <Carpooler> getCarpoolingDataFromBackend(Routing.Nodes.Point MinPoint, Point MaxPoint, bool updateExternalRides) { /* Set this to true if you want to use real waypoints instead of intermediate ptstops, remember to also change the use_waypoints value in the CarpoolParser.cs file */ bool use_waypoints = false; ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12 | SecurityProtocolType.Ssl3; List <Carpooler> CarpoolRides = new List <Carpooler> { }; CarpoolerJson Carpooler = new CarpoolerJson { }; string url = rides_boundary + "?" + "min_lat=" + MinPoint.Latitude + "&" + "min_lon=" + MinPoint.Longitude + "&" + "max_lat=" + MaxPoint.Latitude + "&" + "max_lon=" + MaxPoint.Longitude + "&" + "site=" + Program.site; try { HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url); httpWebRequest.Method = WebRequestMethods.Http.Get; httpWebRequest.Accept = "application/json"; httpWebRequest.Credentials = new NetworkCredential(user, pw); httpWebRequest.UserAgent = "RP client"; HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse(); log.Info(url); if (response != null && response.StatusCode == HttpStatusCode.OK) { Stream stream = response.GetResponseStream(); StreamReader reader = new StreamReader(stream, Encoding.UTF8); String responseString = reader.ReadToEnd(); Carpooler = JsonConvert.DeserializeObject <CarpoolerJson>(responseString); if ((Carpooler == null) || (Carpooler.rides.Count == 0)) { log.Warn("Carpooling: no data available from backend"); } else { int numExtRidesIgnored = 0; foreach (CarpoolerJson.Ride el in Carpooler.rides) { // Just for testing if the carpooling rides are expired if (el.date < Program.DynamicData.sites.First().carpooling_info.nightly_updated) { log.Error("Ride should be expired but it is present el.date:" + el.date + " nightly_timestampVersion:" + Program.DynamicData.sites.First().carpooling_info.nightly_updated); } //!!!DEBUG EDIMBURGO!!! //if ((String.Compare(el._id, "5976e793e04bd56a9a84ffa8") == 0) || // (String.Compare(el._id, "1dfd2cd0faebcf1b768a77bd") == 0) ) //{ //!!!DEBUG TICINO!!! //if ((String.Compare(el.name, "Test Milano Lugano 01") == 0) || // (String.Compare(el.name, "Test Biella Lugano 01") == 0) || // (String.Compare(el.name, "Test Cavaglietto Lugano 01") == 0) || // (String.Compare(el.name, "Test Biasca Lugano 01") == 0) || // (String.Compare(el.name, "Test Airolo Lugano 01") == 0) || // (String.Compare(el.name, "Test Bergamo Lugano 01") == 0) || // (String.Compare(el._id, "5d85a82ea07e1160a5669e29") == 0)) //{ IEnumerable <Routing.Nodes.Point> Points = GooglePoints.Decode(el.polyline.Replace(@"\\", @"\")); //List<Routing.Nodes.Point> Points = GooglePoints.DecodePolylinePoints(el.polyline.Replace(@"\\", @"\")); //List<Routing.Nodes.Point> Points = GooglePoints.decodePoly(el.polyline); //string test = GooglePoints.DecodeLocations(el.polyline.Replace(@"\\", @"\")); //foreach (Point p in Points) //log.Info(p.Latitude + ", " + p.Longitude); string startDate = Globals.GetDateFromTimestamp(el.date); SourceCPRide provider = SourceCPRide.Unknown; if (el.extras != null) { provider = SourceCPRide.External; } else { provider = SourceCPRide.SocialCar; } if ((provider == SourceCPRide.SocialCar) || ((provider == SourceCPRide.External) && (updateExternalRides == true))) { Carpooler Pooler = new Carpooler(el._id, el.name, Globals.GetLocalTimeSinceMidnight(el.date), int.MaxValue, el.activated, startDate, provider); /* Add start point to the ride */ Pooler.WayPointsOrig.Add(new Point(el.start_point.lat, el.start_point.lon)); Pooler.WayPointsUsed.Add(new Point(el.start_point.lat, el.start_point.lon)); /* Add all waypoints to the ride (THIS DOES NOT WORK SINCE THE WAYPOINTS DON'T MATCH WITH OUR NETWORK )*/ if (use_waypoints == true) { //Pooler.WayPointsTmpList.Add(new Point(el.start_point.lat, el.start_point.lon)); //foreach (Point p in Points) //{ // Pooler.WayPointsOrig.Add(p); // Pooler.WayPointsUsed.Add(p); //} } /* Add end point to the ride */ Pooler.WayPointsUsed.Add(new Point(el.end_point.lat, el.end_point.lon)); Pooler.WayPointsOrig.Add(new Point(el.end_point.lat, el.end_point.lon)); CarpoolRides.Add(Pooler); } else { if (updateExternalRides == false) { numExtRidesIgnored++; } } //} } if (updateExternalRides == false) { log.Info("updateExternalRides:" + updateExternalRides + " Ignored:" + numExtRidesIgnored + " external rides"); } } } else { log.Error("An error occured while calling the carpooling data service: StatusCode=" + response.StatusCode); return(null); } } catch (Exception ex) { log.Error("An error occured during the carpooling data get: " + ex.ToString()); return(null); } if (CarpoolRides != null) { if (CarpoolRides.Count == 0) { log.Warn(CarpoolRides.Count + " carpooling rides received"); } else { log.Info(CarpoolRides.Count + " carpooling rides received"); } } return(CarpoolRides); }
public async Task <GetListingWrapper> GetListing(Area area, string north = null, string east = null, string south = null, string west = null, string beds = null, string bathsFull = null, string bathsHalf = null, string propertyAddressId = null, string averageValue = null, string averageRent = null, string encodedCompletedTiles = null, string encodedPartialTiles = null) { List <Listing> listings = new List <Listing>(); List <PointF> boundingBox = null; if (!string.IsNullOrEmpty(north) && !string.IsNullOrEmpty(east) && !string.IsNullOrEmpty(south) && !string.IsNullOrEmpty(west)) { boundingBox = new List <PointF>(); boundingBox.Add(new PointF((float)Convert.ToDouble(north), (float)Convert.ToDouble(east))); boundingBox.Add(new PointF((float)Convert.ToDouble(north), (float)Convert.ToDouble(west))); boundingBox.Add(new PointF((float)Convert.ToDouble(south), (float)Convert.ToDouble(west))); boundingBox.Add(new PointF((float)Convert.ToDouble(south), (float)Convert.ToDouble(east))); } DateTime startLambdaTime = DateTime.Now; List <Tile> tiles = new List <Tile>(); if (!string.IsNullOrEmpty(encodedCompletedTiles) || !string.IsNullOrEmpty(encodedPartialTiles)) { if (!string.IsNullOrEmpty(area.EncodedPolygon)) { area.Points = GooglePoints.DecodeBase64(area.EncodedPolygon).Select(x => new LocationPoint(x.Latitude, x.Longitude)).ToList(); } if (boundingBox == null || boundingBox.Count() == 0) { tiles.AddRange(GooglePoints.DecodeBase64(encodedCompletedTiles).Select(x => new Tile() { Row = (int)x.Latitude, Column = (int)x.Longitude, IsPartialTile = false }).ToList()); tiles.AddRange(GooglePoints.DecodeBase64(encodedPartialTiles).Select(x => new Tile() { Row = (int)x.Latitude, Column = (int)x.Longitude, IsPartialTile = true }).ToList()); } else { RasterizeObject rasterizeObject = this.GetCoordinateTile(area.Points.Select(x => new PointF((float)x.Lat, (float)x.Lng)).ToList(), true, boundingBox); tiles = rasterizeObject.tiles; area.Points = new WKTReader().Read(rasterizeObject.intersectionPolygon).Coordinates.Select(x => new LocationPoint(x.X, x.Y)).ToList(); } } else { if (!string.IsNullOrEmpty(area.EncodedPolygon)) { area.Points = GooglePoints.Decode(area.EncodedPolygon).Select(x => new LocationPoint(x.Latitude, x.Longitude)).ToList(); } RasterizeObject rasterizeObject = this.GetCoordinateTile(area.Points.Select(x => new PointF((float)x.Lat, (float)x.Lng)).ToList(), true, boundingBox); tiles = rasterizeObject.tiles; if (boundingBox != null && boundingBox.Count() > 0) { area.Points = new WKTReader().Read(rasterizeObject.intersectionPolygon).Coordinates.Select(x => new LocationPoint(x.X, x.Y)).ToList(); } } DateTime endLambdaTime = DateTime.Now; //if (tiles == null || tiles.Count() == 0) //{ // throw new Exception("Unable To Calculate Tiles"); //} DateTime startQueryTime = DateTime.Now; GetRegionByPropertyWrapper listing = getRegionByProperty(tiles, beds, bathsFull, bathsHalf, propertyAddressId, averageValue, averageRent).Result; DateTime endQueryTime = DateTime.Now; foreach (var item in listing.CompleteProperties) { if (item != null) { listings.Add(new Listing { Name = item.PropertyAddressName, Lat = item.Latitude, Lng = item.Longitude }); } } Stopwatch containsStopwatch = Stopwatch.StartNew(); Parallel.ForEach(listing.PartialProperties, item => { if (item != null && this.polyCheck(new Vector2((float)item.Latitude, (float)item.Longitude), area.Points.Select(x => new Vector2((float)x.Lat, (float)x.Lng)).ToArray())) { listings.Add(new Listing { Name = item.PropertyAddressName, Lat = item.Latitude, Lng = item.Longitude }); } }); containsStopwatch.Stop(); List <ListingMaster> customProperties = listings.Select(x => new ListingMaster() { Lat = x.Lat, Lng = x.Lng, Name = x.Name }).ToList(); return(new GetListingWrapper { PropertyCount = listing.TotalRecordCount, ScanCount = listing.ScanCount, ConsumedCapacityCount = listing.ConsumedCapacityCount, TotalQueryExecutionTime = (endQueryTime - startQueryTime).TotalMilliseconds, TotalLambdaExecutionTime = (endLambdaTime - startLambdaTime).TotalMilliseconds, TotalContainsExecutionTime = containsStopwatch.ElapsedMilliseconds, Properties = customProperties, }); }
public async Task <GetAreaListingWrapper> GetArea(string id, string north = null, string east = null, string south = null, string west = null, string beds = null, string bathsFull = null, string bathsHalf = null, string propertyAddressId = null, string averageValue = null, string averageRent = null) { DateTime startQueryTime = DateTime.Now; List <AreaMaster> listingArea = new List <AreaMaster>(); List <List <Property> > areaProperties = new List <List <Property> >(); Dictionary <string, Condition> areaKeyConditions = new Dictionary <string, Condition>(); Dictionary <string, Condition> areaQueryFilter = new Dictionary <string, Condition>(); areaKeyConditions.Add("AreaID", new Condition() { ComparisonOperator = "EQ", AttributeValueList = new List <AttributeValue>() { new AttributeValue(id) } }); areaQueryFilter.Add("IsPredefine", new Condition() { ComparisonOperator = "EQ", AttributeValueList = new List <AttributeValue>() { new AttributeValue() { N = "1" } } }); QueryRequest queryRequest = new QueryRequest() { TableName = areaMasterTableName, ReturnConsumedCapacity = "TOTAL", KeyConditions = areaKeyConditions, QueryFilter = areaQueryFilter }; var result = dynamoDBClient.QueryAsync(queryRequest).Result; listingArea = AreaMaster.ConvertToEntity(result.Items); DateTime endQueryTime = DateTime.Now; if (listingArea.Count() > 0) { var tempArea = new Area() { EncodedPolygon = listingArea.First().EncodedPolygon, Points = GooglePoints.DecodeBase64(listingArea.First().EncodedPolygon).Select(x => new LocationPoint(x.Latitude, x.Longitude)).ToList() }; GetListingWrapper output = await GetListing(tempArea, north, east, south, west, beds, bathsFull, bathsHalf, propertyAddressId, averageValue, averageRent, listingArea.First().EncodedCompletedTiles, listingArea.First().EncodedPartialTiles); foreach (var area in listingArea) { area.EncodedPolygon = ASCIIEncoding.ASCII.GetString(Convert.FromBase64String(area.EncodedPolygon)); area.EncodedCompletedTiles = null; area.EncodedPartialTiles = null; } return(new GetAreaListingWrapper { PropertyCount = output.PropertyCount, ScanCount = output.ScanCount, ConsumedCapacityCount = output.ConsumedCapacityCount, TotalQueryExecutionTime = output.TotalQueryExecutionTime, TotalLambdaExecutionTime = output.TotalLambdaExecutionTime, TotalContainsExecutionTime = output.TotalContainsExecutionTime, TotalAreaQueryTime = (endQueryTime - startQueryTime).TotalMilliseconds, Properties = output.Properties, Area = listingArea, }); } else { return(null); } }
public static void migrateAreas(DataRow[] dtAreas) { List <Area> areaMigration = new List <Area>(); foreach (DataRow area in dtAreas) { Area obj = new Area(); obj.AreaID = area[0].ToString(); obj.AreaName = area[1].ToString(); obj.URLName = area[2].ToString(); obj.URLPath = area[3].ToString(); obj.StateFIPS = area[4].ToString(); obj.FIPS = area[5].ToString(); obj.State = area[6].ToString(); obj.USPSCity = area[7].ToString(); obj.AreaTypeID = area[8].ToString(); obj.SubTypeID = area[9].ToString(); obj.OriginalPolygon = area[10].ToString(); obj.Latitude = Convert.ToDecimal(area[11].ToString()); obj.Longitude = Convert.ToDecimal(area[12].ToString()); obj.North = area[13].ToString(); obj.South = area[14].ToString(); obj.East = area[15].ToString(); obj.West = area[16].ToString(); obj.TopLeveeaID = area[17].ToString(); obj.SourceID = area[18].ToString(); obj.SourceKey = area[19].ToString(); obj.AreaStatus = !area.Table.Columns.Contains("Status") ? string.Empty : area[21].ToString(); areaMigration.Add(obj); } List <AreaMaster> areaMaster = new List <AreaMaster>(); List <Area> areas = new List <Area>(); foreach (Area obj in areaMigration) { var tempPoints = obj.OriginalPolygon.Replace("MULTIPOLYGON", "").Replace("POLYGON", "").Replace("(", "").Replace(")", "").Split(",").Select(x => x.Trim()).Where(x => x.Length > 0).Select(x => new LocationPoint() { Lng = Convert.ToDecimal(x.Substring(0, x.IndexOf(" ")).Trim()), Lat = Convert.ToDecimal(x.Substring(x.IndexOf(" "), x.Length - x.IndexOf(" ")).Trim()) }).ToList(); obj.Points = tempPoints; List <Tile> rasterizePoints = regionServiceInstance.GetCoordinateTile(obj.Points.Select(x => new PointF((float)x.Lat, (float)x.Lng)).ToList(), true).tiles; AreaMaster areaMasterObj = new AreaMaster(); areaMasterObj.AreaID = obj.AreaID; areaMasterObj.AreaName = obj.AreaName; areaMasterObj.EncodedPolygon = GooglePoints.EncodeBase64(tempPoints.Select(x => new CoordinateEntity(Convert.ToDouble(x.Lat), Convert.ToDouble(x.Lng)))); areaMasterObj.EncodedCompletedTiles = GooglePoints.EncodeBase64(rasterizePoints.Where(x => !x.IsPartialTile).Select(x => new CoordinateEntity(Convert.ToDouble(x.Row), Convert.ToDouble(x.Column)))); areaMasterObj.EncodedPartialTiles = GooglePoints.EncodeBase64(rasterizePoints.Where(x => x.IsPartialTile).Select(x => new CoordinateEntity(Convert.ToDouble(x.Row), Convert.ToDouble(x.Column)))); areaMasterObj.IsPredefine = true; areaMaster.Add(areaMasterObj); foreach (var point in rasterizePoints) { Area tempObj = (Area)obj.Clone(); tempObj.Tile = regionServiceInstance.GetTileStr((int)point.Row, (int)point.Column); tempObj.Type = RecordType.Area; tempObj.OriginalPolygon = ""; tempObj.Points = null; areas.Add(tempObj); } } List <AttributeDefinition> areaAttributeDefinition = new List <AttributeDefinition>() { new AttributeDefinition { AttributeName = "Tile", AttributeType = ScalarAttributeType.S }, new AttributeDefinition { AttributeName = "AreaID", AttributeType = ScalarAttributeType.S } }; Projection projection = new Projection() { ProjectionType = "INCLUDE", NonKeyAttributes = new List <string> { "AreaName" } }; List <LocalSecondaryIndex> localSecondaryIndexes = new List <LocalSecondaryIndex>(); List <KeySchemaElement> areaIDKeySchema = new List <KeySchemaElement>() { new KeySchemaElement { AttributeName = "Tile", KeyType = KeyType.HASH }, new KeySchemaElement { AttributeName = "AreaID", KeyType = KeyType.RANGE } }; localSecondaryIndexes.Add(new LocalSecondaryIndex() { IndexName = "AreaIDIndex", Projection = projection, KeySchema = areaIDKeySchema }); regionServiceInstance.CreateTempTable(regionServiceInstance.areaTableName, areaAttributeDefinition, null, localSecondaryIndexes, "Tile", "AreaID").Wait(); List <LocalSecondaryIndex> areaMasterLocalSecondaryIndexes = new List <LocalSecondaryIndex>(); List <KeySchemaElement> areaMasterAreaIDKeySchema = new List <KeySchemaElement>() { new KeySchemaElement { AttributeName = "AreaID", KeyType = KeyType.HASH }, new KeySchemaElement { AttributeName = "AreaName", KeyType = KeyType.RANGE } }; areaMasterLocalSecondaryIndexes.Add(new LocalSecondaryIndex() { IndexName = "AreaIDIndex", Projection = new Projection() { ProjectionType = "INCLUDE", NonKeyAttributes = new List <string> { "IsPredefine" } }, KeySchema = areaMasterAreaIDKeySchema }); List <KeySchemaElement> areaMasterAreaTileKeySchema = new List <KeySchemaElement>() { new KeySchemaElement { AttributeName = "AreaID", KeyType = KeyType.HASH }, new KeySchemaElement { AttributeName = "IsPredefine", KeyType = KeyType.RANGE } }; areaMasterLocalSecondaryIndexes.Add(new LocalSecondaryIndex() { IndexName = "AreaTileIndex", Projection = new Projection() { ProjectionType = "INCLUDE", NonKeyAttributes = new List <string> { "EncodedTiles" } }, KeySchema = areaMasterAreaTileKeySchema }); areaMasterLocalSecondaryIndexes.Add(new LocalSecondaryIndex() { IndexName = "AreaPolygonIndex", Projection = new Projection() { ProjectionType = "INCLUDE", NonKeyAttributes = new List <string> { "EncodedPolygon" } }, KeySchema = areaMasterAreaTileKeySchema }); List <AttributeDefinition> areaMasterAttributeDefinition = new List <AttributeDefinition>() { new AttributeDefinition { AttributeName = "AreaID", AttributeType = ScalarAttributeType.S }, new AttributeDefinition { AttributeName = "AreaName", AttributeType = ScalarAttributeType.S }, new AttributeDefinition { AttributeName = "IsPredefine", AttributeType = ScalarAttributeType.N }, }; regionServiceInstance.CreateTempTable(regionServiceInstance.areaMasterTableName, areaMasterAttributeDefinition, null, areaMasterLocalSecondaryIndexes, "AreaID", "AreaName").Wait(); foreach (var obj in areaMaster.ToList().ChunkBy(100)) { try { System.Console.WriteLine("adding Area Master chunk"); var batch = regionServiceInstance.context.CreateBatchWrite <AreaMaster>(); batch.AddPutItems(obj); batch.ExecuteAsync().Wait(); System.Console.WriteLine("Area Master Chunk added"); //regionServiceInstance.context.SaveAsync(obj).Wait(); } catch (Exception e) { System.Console.WriteLine(obj); System.Console.WriteLine(e); } } int count = 1; foreach (var obj in areas.ToList().ChunkBy(100)) { try { System.Console.WriteLine("adding Area chunk. index: " + count); //Parallel.ForEach(obj, obj2 => //{ // regionServiceInstance.context.SaveAsync<Area>(obj2).Wait(); //}); var batch = regionServiceInstance.context.CreateBatchWrite <Area>(); batch.AddPutItems(obj); batch.ExecuteAsync().Wait(); System.Console.WriteLine("Area Chunk added. index: " + count); count += 1; } catch (Exception e) { System.Console.WriteLine(obj); System.Console.WriteLine(e); } } }