Esempio n. 1
0
            ////////////////////////////////////////////////////////////////////////
            //--------------------------------- REVISIONS --------------------------
            // Date       Name                 Tracking #         Description
            // ---------  -------------------  -------------      ------------------
            // 18JUN2009  James Shen                              Initial Creation
            ////////////////////////////////////////////////////////////////////////

            /**
             * draw route icon in given rectangle.
             * @param mapDirection
             * @param X
             * @param Y
             * @param Width
             * @param Height
             */
            private void DrawRouteIcons(MapDirection mapDirection, int x, int y,
                                        int width, int height)
            {
                GeoPoint  newPt;
                GeoLatLng pt;

                _routeGraphics.SetClip(0, 0, width, height);
                for (int i = 0; i < mapDirection.Routes[0].Steps.Length - 1; i++)
                {
                    MapStep mapStep = mapDirection.Routes[0].Steps[i];
                    pt = mapStep.LastLatLng;
                    if (_screenBounds.ContainsLatLng(pt))
                    {
                        newPt    = FromLatLngToMapPixel(pt);
                        newPt.X -= x;
                        newPt.Y -= y;
                        _routeGraphics.DrawImage(MiddleIcon,
                                                 (int)newPt.X - MiddleIcon.GetWidth() / 2, (int)newPt.Y - MiddleIcon.GetHeight() / 2);
                    }
                }
                pt       = mapDirection.Polyline.GetVertex(0);
                newPt    = FromLatLngToMapPixel(pt);
                newPt.X -= x;
                newPt.Y -= y;
                _routeGraphics.DrawImage(StartIcon,
                                         (int)newPt.X - StartIcon.GetWidth() / 2, (int)newPt.Y - StartIcon.GetHeight() / 2);
                pt       = mapDirection.Polyline.GetVertex(mapDirection.Polyline.GetVertexCount() - 1);
                newPt    = FromLatLngToMapPixel(pt);
                newPt.X -= x;
                newPt.Y -= y;
                _routeGraphics.DrawImage(EndIcon,
                                         (int)newPt.X - EndIcon.GetWidth() / 2, (int)newPt.Y - EndIcon.GetHeight() / 2);
            }
Esempio n. 2
0
        public override DCFG Export()
        {
            MapStep data = new MapStep();

            data.ID       = ID;
            data.StepName = StepName;
            for (int i = 0; i < StepEvents.Count; i++)
            {
                data.StepEvents.Add(StepEvents[i].ID);
            }
            return(data);
        }
Esempio n. 3
0
        public override void Import(DCFG cfg)
        {
            MapStep data = cfg as MapStep;

            this.ID       = data.ID;
            this.StepName = data.StepName;
            FTGroupEvent group = Map.GetGroup <FTGroupEvent>();

            for (int i = 0; i < data.StepEvents.Count; i++)
            {
                FTEvent e = group.GetElement(data.StepEvents[i]);
                if (e != null)
                {
                    StepEvents.Add(e);
                }
            }
        }
Esempio n. 4
0
            private void SearchResponse(GDirections gDirection, Response response)
            {
                Exception ex = response.GetException();

                if (ex != null || response.GetCode() != HttpStatusCode.OK)
                {
                    if (gDirection._listener != null)
                    {
                        gDirection._listener.Done(gDirection._routeQuery, null);
                    }
                    return;
                }
                try
                {
                    Result result = response.GetResult();
                    gDirection._mapDirection.Name     = result.GetAsString("name");
                    gDirection._mapDirection.Status   = result.GetAsInteger("Status.code");
                    gDirection._mapDirection.Duration = result.GetAsInteger("Directions.Duration.seconds");
                    gDirection._mapDirection.Distance = result.GetAsInteger("Directions.Distance.meters");
                    gDirection._mapDirection.Summary  = _html2Text.Convert(result.GetAsString("Directions.summaryHtml"));
                    string points     = result.GetAsString("Directions.Polyline.points");
                    string levels     = result.GetAsString("Directions.Polyline.levels");
                    int    zoomFactor = result.GetAsInteger("Directions.Polyline.ZoomFactor");
                    int    numLevels  = result.GetAsInteger("Directions.Polyline.NumLevels");
                    gDirection._mapDirection.Polyline = GeoPolyline.FromEncoded(0x00FF00, 4, 1, points,
                                                                                zoomFactor, levels, numLevels);
                    int numOfGeocodes = result.GetSizeOfArray("Placemark");
                    if (numOfGeocodes > 0)
                    {
                        gDirection._mapDirection.GeoCodes = new MapPoint[numOfGeocodes];
                        for (int i = 0; i < numOfGeocodes; i++)
                        {
                            gDirection._mapDirection.GeoCodes[i]      = new MapPoint();
                            gDirection._mapDirection.GeoCodes[i].Name = result.GetAsString("Placemark[" + i + "].address");
                            string    location = result.GetAsString("Placemark[" + i + "].Point.coordinates");
                            GeoLatLng latLng   = MapLayer.FromStringToLatLng(location);
                            gDirection._mapDirection.GeoCodes[i].SetPoint(latLng);
                        }
                    }
                    int numOfRoutes = result.GetSizeOfArray("Directions.Routes");
                    if (numOfRoutes > 0)
                    {
                        gDirection._mapDirection.Routes = new MapRoute[numOfRoutes];
                        for (int i = 0; i < numOfRoutes; i++)
                        {
                            string routeString = "Directions.Routes[" + i + "]";
                            gDirection._mapDirection.Routes[i]          = MapDirection.NewRoute();
                            gDirection._mapDirection.Routes[i].Summary  = _html2Text.Convert(result.GetAsString(routeString + ".summaryHtml"));
                            gDirection._mapDirection.Routes[i].Distance = result.GetAsInteger(routeString + ".Distance.meters");
                            gDirection._mapDirection.Routes[i].Duration = result.GetAsInteger(routeString + ".Duration.seconds");
                            string lastLatLng = result.GetAsString(routeString + ".End.coordinates");
                            gDirection._mapDirection.Routes[i].LastLatLng = MapLayer.FromStringToLatLng(lastLatLng);
                            int numOfSteps = result.GetSizeOfArray(routeString + ".Steps");
                            if (numOfSteps > 0)
                            {
                                gDirection._mapDirection.Routes[i].Steps = new MapStep[numOfSteps];
                                for (int j = 0; j < numOfSteps; j++)
                                {
                                    string stepString = routeString + ".Steps[" + j + "]";
                                    gDirection._mapDirection.Routes[i].Steps[j]                    = MapRoute.NewStep();
                                    gDirection._mapDirection.Routes[i].Steps[j].Description        = _html2Text.Convert(result.GetAsString(stepString + ".descriptionHtml"));
                                    gDirection._mapDirection.Routes[i].Steps[j].Distance           = result.GetAsInteger(stepString + ".Distance.meters");
                                    gDirection._mapDirection.Routes[i].Steps[j].Duration           = result.GetAsInteger(stepString + ".Duration.seconds");
                                    gDirection._mapDirection.Routes[i].Steps[j].FirstLocationIndex = result.GetAsInteger(stepString + ".polylineIndex");
                                    string firstLocation = result.GetAsString(stepString + ".Point.coordinates");
                                    gDirection._mapDirection.Routes[i].Steps[j].FirstLatLng = MapLayer.FromStringToLatLng(firstLocation);
                                }
                            }
                        }
                    }
                }
                catch (Exception)
                {
                    if (gDirection._listener != null)
                    {
                        gDirection._listener.Done(gDirection._routeQuery, null);
                    }
                    return;
                }
                if (gDirection._listener != null)
                {
                    MapDirection mapDirection = gDirection._mapDirection;
                    if (mapDirection.GeoCodes.Length == mapDirection.Routes.Length + 1)
                    {
                        for (int i = 0; i < mapDirection.Routes.Length; i++)
                        {
                            mapDirection.Routes[i].StartGeocode = mapDirection.GeoCodes[i];
                            mapDirection.Routes[i].EndGeocode   = mapDirection.GeoCodes[i + 1];
                        }
                    }

                    for (int i = 0; i < mapDirection.Routes.Length; i++)
                    {
                        MapRoute mapRoute = mapDirection.Routes[i];
                        for (int j = 0; j < mapRoute.Steps.Length - 1; j++)
                        {
                            MapStep mapStep = mapRoute.Steps[j];

                            mapStep.LastLocationIndex = mapRoute.Steps[j + 1].FirstLocationIndex;
                            mapStep.LastLatLng        = mapDirection.Polyline.GetVertex(mapRoute.Steps[j + 1].FirstLocationIndex);
                        }
                        mapRoute.Steps[mapRoute.Steps.Length - 1].LastLocationIndex =
                            mapDirection.Polyline.GetVertexCount() - 1;
                        mapRoute.Steps[mapRoute.Steps.Length - 1].LastLatLng =
                            mapDirection.Polyline.GetVertex(mapDirection.Polyline.GetVertexCount() - 1);
                    }
                    GeoPolyline polyline = mapDirection.Polyline;
                    if (polyline.GetVertexCount() > 1)
                    {
                        GeoLatLng latLngTemp = polyline.GetVertex(0);
                        mapDirection.Bounds = new GeoLatLngBounds(latLngTemp, latLngTemp);

                        for (int i = 0; i < mapDirection.Routes.Length; i++)
                        {
                            MapRoute mapRoute = mapDirection.Routes[i];
                            latLngTemp      = polyline.GetVertex(mapRoute.Steps[0].FirstLocationIndex);
                            mapRoute.Bounds = new GeoLatLngBounds(latLngTemp, latLngTemp);
                            for (int j = 0; j < mapRoute.Steps.Length; j++)
                            {
                                latLngTemp = polyline.GetVertex(mapRoute.Steps[j].FirstLocationIndex);
                                MapStep mapStep = mapRoute.Steps[j];
                                mapStep.Bounds = new GeoLatLngBounds(latLngTemp, latLngTemp);
                                for (int k = mapStep.FirstLocationIndex; k <= mapStep.LastLocationIndex; k++)
                                {
                                    GeoLatLng latLng = polyline.GetVertex(k);
                                    mapStep.Bounds.Add(latLng.Lng(), latLng.Lat());
                                    mapRoute.Bounds.Add(latLng.Lng(), latLng.Lat());
                                    mapDirection.Bounds.Add(latLng.Lng(), latLng.Lat());
                                }
                            }
                        }
                    }

                    gDirection._listener.Done(gDirection._routeQuery, mapDirection);
                }
            }