/// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 4
0
        /// <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);
        }