Esempio n. 1
0
        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"));
        }
Esempio n. 2
0
File: Api.cs Progetto: pictos/APIFP
        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);
                }
            }
        }
Esempio n. 3
0
    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);
    }
Esempio n. 4
0
        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);
        }
Esempio n. 6
0
        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());
        }
Esempio n. 7
0
    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);
    }
Esempio n. 8
0
        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);
        }
Esempio n. 9
0
 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);
     }
 }
Esempio n. 10
0
        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;
 }
Esempio n. 12
0
    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);
    }
Esempio n. 13
0
    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);
    }
Esempio n. 14
0
 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)
     {}
 }
Esempio n. 15
0
        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);
        }
Esempio n. 16
0
        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;
            }
        }
Esempio n. 17
0
 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;
 }
Esempio n. 18
0
        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);
        }
Esempio n. 19
0
        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,
            });
        }
Esempio n. 20
0
        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);
            }
        }
Esempio n. 21
0
        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);
                }
            }
        }