/// <summary> /// Method collects information from solve request data for planned date and /// builds request object. /// </summary> /// <param name="data">Required data to get information from.</param> /// <exception cref="T:System.ArgumentNullException"> /// <paramref name="data"/> is null reference.</exception> /// <returns>Request object with filled information for request.</returns> public SubmitDiscoveryRequest BuildRequest(DiscoveryRequestData data) { // Validate inputs. if (data == null) { throw new ArgumentNullException("data"); } // Build request object. SubmitDiscoveryRequest req = new SubmitDiscoveryRequest(); if (data.RegionPoint != null) { int wkid = data.MapExtent.SpatialReference.WKID; // Get depot point converted with correct spatial reference. Point depotPoint = (Point)data.RegionPoint; Point wmPoint = WebMercatorUtil.ProjectPointToWebMercator(depotPoint, wkid); GPPoint gpPoint = GPObjectHelper.PointToGPPoint(wmPoint); gpPoint.SpatialReference = new GPSpatialReference(wkid); // Fill required options. req.Geometry = gpPoint; req.GeometryType = NAGeometryType.esriGeometryPoint; req.SpatialReference = wkid; req.ResponseFormat = NAOutputFormat.JSON; req.Layers = NAIdentifyOperationLayers.AllLayers; req.Tolerance = DEFAULT_TOLERANCE; req.ImageDisplay = _GetImageDisplayParameter(data.MapExtent); req.MapExtent = string.Format(MAP_EXTENT_PARAMETER_FORMAT, data.MapExtent.XMin, data.MapExtent.YMin, data.MapExtent.XMax, data.MapExtent.YMax); // Do not return geometry to optimize request. req.ReturnGeometry = false; req.ReturnZ = false; req.ReturnM = false; // Fill non-required options. req.LayerDefinitions = string.Empty; req.Time = string.Empty; req.LayerTimeOptions = string.Empty; req.MaxAllowableOffset = string.Empty; req.DynamicLayers = string.Empty; } return(req); }
/// <summary> /// Convert Point Barrier into GPFeature. /// </summary> /// <param name="barrier">Barrier to convert</param> /// <returns>Point barrier GPFeature</returns> private GPFeature _ConvertToPointFeature(Barrier barrier) { Debug.Assert(barrier != null); GPFeature feature = new GPFeature(); feature.Geometry = new GeometryHolder(); // Convert geometry. feature.Geometry.Value = GPObjectHelper.PointToGPPoint((Point)barrier.Geometry); // Fill attributes. feature.Attributes = _GetAttributes(barrier, BarrierGeometryType.Point); return(feature); }
/// <summary> /// Converts the specified geometry object to corresponding GP Geometry object. /// </summary> /// <param name="geometry">A reference to the geometry object to be converted.</param> /// <returns>A new <see cref="GeometryHolder"/> with corresponding GP Geometry object /// or null reference if <paramref name="geometry"/> is null.</returns> private static GPGeometry _ConvertGeometryToGPGeometry(object geometry) { if (geometry == null) { return(null); } var gpGeometry = new GPGeometry(); if (geometry.GetType().IsAssignableFrom(typeof(Point))) { gpGeometry = GPObjectHelper.PointToGPPoint((Point)geometry); } else if (geometry.GetType().IsAssignableFrom(typeof(Polyline))) { gpGeometry = GPObjectHelper.PolylineToGPPolyline((Polyline)geometry); } else if (geometry.GetType().IsAssignableFrom(typeof(Polygon))) { gpGeometry = GPObjectHelper.PolygonToGPPolygon((Polygon)geometry); } return(gpGeometry); }
/// <summary> /// Method gets stops date from route. /// </summary> /// <param name="route">Route to get information.</param> /// <returns>Collection of stops data.</returns> private List <StopData> _GetStops(Route route) { Debug.Assert(route != null); IDataObjectCollection <Stop> stops = route.Stops; int stopsCount = stops.Count; var stopDatas = new List <StopData>(stopsCount); for (int index = 0; index < stopsCount; ++index) { Stop stop = stops[index]; StopData sd = new StopData(); sd.SequenceNumber = stop.SequenceNumber; sd.Distance = stop.Distance; sd.WaitTime = stop.WaitTime; sd.TimeAtStop = stop.TimeAtStop; sd.TravelTime = stop.TravelTime; sd.ArriveTime = (DateTime)stop.ArriveTime; if (stop.StopType == StopType.Lunch) { // Break. // ToDo - need update logic - now find only first TWBreak. var twBreaks = from currBreak in route.Breaks where currBreak is TimeWindowBreak select currBreak; TimeWindowBreak rtBreak = twBreaks.FirstOrDefault() as TimeWindowBreak; if (rtBreak != null && rtBreak.Duration > 0.0) { // TODO Break //// Time window. //DateTime? twStart = null; //DateTime? twEnd = null; //if (rtBreak.TimeWindow != null) // _ConvertTW(rtBreak.TimeWindow, out twStart, out twEnd); sd.TimeWindowStart1 = _TSToDate(rtBreak.From); sd.TimeWindowEnd1 = _TSToDate(rtBreak.To); } } else { Debug.Assert(stop.AssociatedObject != null); // Associated object id. sd.AssociatedObject = stop.AssociatedObject; // Geometry. Point pt = _GetStopPoint(stop); sd.Geometry = GPObjectHelper.PointToGPPoint(pt); // Time windows. DateTime?twStart1 = null; DateTime?twStart2 = null; DateTime?twEnd1 = null; DateTime?twEnd2 = null; // Type-specific data. if (stop.StopType == StopType.Order) { Order order = stop.AssociatedObject as Order; Debug.Assert(order != null); // Curbapproach. sd.NACurbApproach = CurbApproachConverter.ToNACurbApproach( _context.SolverSettings.GetDepotCurbApproach()); // Time window 1. if (order.TimeWindow != null) { _ConvertTW(order.TimeWindow, out twStart1, out twEnd1); } // Time window 2. if (order.TimeWindow2 != null) { _ConvertTW(order.TimeWindow2, out twStart2, out twEnd2); } } else if (stop.StopType == StopType.Location) { Location loc = stop.AssociatedObject as Location; Debug.Assert(loc != null); // Time window. if (loc.TimeWindow != null) { _ConvertTW(loc.TimeWindow, out twStart1, out twEnd1); } } sd.TimeWindowStart1 = twStart1; sd.TimeWindowStart2 = twStart2; sd.TimeWindowEnd1 = twEnd1; sd.TimeWindowEnd2 = twEnd2; } sd.RouteId = route.Id; sd.StopType = stop.StopType; stopDatas.Add(sd); } SolveHelper.ConsiderArrivalDelayInStops( _context.SolverSettings.ArriveDepartDelay, stopDatas); return(stopDatas); }