コード例 #1
0
        public static void Add3DPolygon(LocalVectorDataSource source, Projection projection)
        {
            // Create 3d polygon style and poses
            Polygon3DStyleBuilder polygon3DStyleBuilder = new Polygon3DStyleBuilder();

            polygon3DStyleBuilder.Color = new Color(51, 51, 255, 255);

            MapPosVector polygon3DPoses = new MapPosVector();

            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.635930, 59.416659)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.642453, 59.411354)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.646187, 59.409607)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.652667, 59.413123)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.650736, 59.416703)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.646444, 59.416245)));

            // Create 3d polygon holes poses
            MapPosVector holePositions = new MapPosVector();

            holePositions.Add(projection.FromWgs84(new MapPos(24.643409, 59.411922)));
            holePositions.Add(projection.FromWgs84(new MapPos(24.651207, 59.412896)));
            holePositions.Add(projection.FromWgs84(new MapPos(24.643207, 59.414411)));

            MapPosVectorVector holes = new MapPosVectorVector();

            holes.Add(holePositions);

            // Add to datasource
            Polygon3D polygon = new Polygon3D(polygon3DPoses, holes, polygon3DStyleBuilder.BuildStyle(), 150);

            polygon.SetMetaDataElement("ClickText", new Variant("Polygon 3D"));
            source.Add(polygon);
        }
コード例 #2
0
        private static void DrawPolygons()
        {
            MapEvent(null, new MapEventArgs(0, 100, "Calling polygons..."));
            var polygons     = d.getObjects(day, 3);
            var overlayLayer = new VectorLayer(dataSourcePolygons);

            overlayLayer.VisibleZoomRange = new MapRange(16, 24);
            mapView.Layers.Add(overlayLayer);
            VectorElementVector v     = new VectorElementVector();
            VectorElementVector vText = new VectorElementVector();
            int i = 0;

            foreach (var obj in polygons)
            {
                //Define coordinates of outer ring
                MapPosVector polygonPoses = new MapPosVector();
                foreach (var pnt in obj.polygonList.coordinates[0])
                {
                    polygonPoses.Add(projection.FromWgs84(new MapPos(pnt[0], pnt[1])));
                }
                Polygon polygon = new Polygon(polygonPoses, Styles.GetDefaultPolygonStyle().BuildStyle());
                v.Add(polygon);
                if (i == 0)
                {
                    mapView.FocusPos = projection.FromWgs84(new MapPos(obj.polygonList.coordinates[0][0][0], obj.polygonList.coordinates[0][0][1]));
                }
                MapEvent(null, new MapEventArgs(i, polygons.Count, "Drawing polygons..."));
                i++;
            }
            dataSourcePolygons.RemoveAll(dataSourcePolygons.GetAll());
            dataSourcePolygons.AddAll(v);
        }
コード例 #3
0
        public static void Add3DPolygon(LocalVectorDataSource source, Projection projection)
        {
            // Create 3d polygon style and poses
            Polygon3DStyleBuilder polygon3DStyleBuilder = new Polygon3DStyleBuilder();
            polygon3DStyleBuilder.Color = new Color(51, 51, 255, 255);

            MapPosVector polygon3DPoses = new MapPosVector();
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.635930, 59.416659)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.642453, 59.411354)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.646187, 59.409607)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.652667, 59.413123)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.650736, 59.416703)));
            polygon3DPoses.Add(projection.FromWgs84(new MapPos(24.646444, 59.416245)));

            // Create 3d polygon holes poses
            MapPosVector holePositions = new MapPosVector();
            holePositions.Add(projection.FromWgs84(new MapPos(24.643409, 59.411922)));
            holePositions.Add(projection.FromWgs84(new MapPos(24.651207, 59.412896)));
            holePositions.Add(projection.FromWgs84(new MapPos(24.643207, 59.414411)));

            MapPosVectorVector holes = new MapPosVectorVector();
            holes.Add(holePositions);

            // Add to datasource
            Polygon3D polygon = new Polygon3D(polygon3DPoses, holes, polygon3DStyleBuilder.BuildStyle(), 150);
            polygon.SetMetaDataElement("ClickText", new Variant("Polygon 3D"));
            source.Add(polygon);
        }
        public static void AddPolygon(this LocalVectorDataSource source, MapPosVector positions)
        {
            PolygonStyleBuilder builder = new PolygonStyleBuilder();

            builder.Color = new Color(0, 255, 0, 255);

            Polygon polygon = new Polygon(positions, builder.BuildStyle());

            source.Add(polygon);
        }
コード例 #5
0
        public RoutingResult GetResult(MapPos startPos, MapPos stopPos)
        {
            MapPosVector poses = new MapPosVector();

            poses.Add(startPos);
            poses.Add(stopPos);

            RoutingRequest request = new RoutingRequest(BaseProjection, poses);

            return(Service.CalculateRoute(request));
        }
        public static void AddLine(this LocalVectorDataSource source, MapPosVector positions)
        {
            LineStyleBuilder builder = new LineStyleBuilder();

            builder.Width      = 20;
            builder.ClickWidth = 40;
            builder.Color      = new Color(255, 0, 0, 255);

            Line line = new Line(positions, builder.BuildStyle());

            source.Add(line);
        }
コード例 #7
0
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            // Add default base layer
            AddOnlineBaseLayer(CartoBaseMapStyle.CartoBasemapStyleVoyager);

            // Load ground overlay bitmap
            //Bitmap androidMarkerBitmap = BitmapFactory.decodeResource(getResources(), R.drawable.jefferson);
            //com.carto.graphics.Bitmap overlayBitmap = BitmapUtils.createBitmapFromAndroidBitmap(androidMarkerBitmap);
            Bitmap overlayBitmap = BitmapUtils.LoadBitmapFromFile("jefferson-building-ground-floor.jpg");

            // Create two vectors containing geographical positions and corresponding raster image pixel coordinates.
            // 2, 3 or 4 points may be specified. Usually 2 points are enough (for conformal mapping).
            MapPos pos    = BaseProjection.FromWgs84(new MapPos(-77.004590, 38.888702));
            double sizeNS = 110;
            double sizeWE = 100;

            MapPosVector mapPoses = new MapPosVector();

            mapPoses.Add(new MapPos(pos.X - sizeWE, pos.Y + sizeNS));
            mapPoses.Add(new MapPos(pos.X + sizeWE, pos.Y + sizeNS));
            mapPoses.Add(new MapPos(pos.X + sizeWE, pos.Y - sizeNS));
            mapPoses.Add(new MapPos(pos.X - sizeWE, pos.Y - sizeNS));

            ScreenPosVector bitmapPoses = new ScreenPosVector();

            bitmapPoses.Add(new ScreenPos(0, 0));
            bitmapPoses.Add(new ScreenPos(0, overlayBitmap.Height));
            bitmapPoses.Add(new ScreenPos(overlayBitmap.Width, overlayBitmap.Height));
            bitmapPoses.Add(new ScreenPos(overlayBitmap.Width, 0));

            // Create bitmap overlay raster tile data source
            BitmapOverlayRasterTileDataSource rasterDataSource = new BitmapOverlayRasterTileDataSource(
                0, 20, overlayBitmap, BaseProjection, mapPoses, bitmapPoses
                );

            RasterTileLayer rasterLayer = new RasterTileLayer(rasterDataSource);

            MapView.Layers.Add(rasterLayer);

            // Apply zoom level bias to the raster layer.
            // By default, bitmaps are upsampled on high-DPI screens.
            // We will correct this by applying appropriate bias
            float zoomLevelBias = (float)(Math.Log(MapView.Options.DPI / 160.0f) / Math.Log(2));

            rasterLayer.ZoomLevelBias          = zoomLevelBias * 0.75f;
            rasterLayer.TileSubstitutionPolicy = TileSubstitutionPolicy.TileSubstitutionPolicyVisible;

            MapView.SetFocusPos(pos, 0);
            MapView.SetZoom(15.5f, 0);
        }
コード例 #8
0
        public static void Add2DPolygon(LocalVectorDataSource source, Projection projection)
        {
            LineStyleBuilder lineBuilder = new LineStyleBuilder();

            lineBuilder.Color = new Color(0, 0, 0, 255);             // Black
            lineBuilder.Width = 1.0f;

            // Create polygon style and poses
            PolygonStyleBuilder polygonBuilder = new PolygonStyleBuilder();

            polygonBuilder.Color     = new Color(255, 0, 0, 255);         // Red
            polygonBuilder.LineStyle = lineBuilder.BuildStyle();

            MapPosVector polygonPoses = new MapPosVector();

            polygonPoses.Add(projection.FromWgs84(new MapPos(24.650930, 59.421659)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.657453, 59.416354)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.661187, 59.414607)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.667667, 59.418123)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.665736, 59.421703)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.661444, 59.421245)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.660199, 59.420677)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.656552, 59.420175)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.654010, 59.421472)));

            // Create 2 polygon holes
            MapPosVector holePoses1 = new MapPosVector();

            holePoses1.Add(projection.FromWgs84(new MapPos(24.658409, 59.420522)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.662207, 59.418896)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.662207, 59.417411)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.659524, 59.417171)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.657615, 59.419834)));

            MapPosVector holePoses2 = new MapPosVector();

            holePoses2.Add(projection.FromWgs84(new MapPos(24.665640, 59.421243)));
            holePoses2.Add(projection.FromWgs84(new MapPos(24.668923, 59.419463)));
            holePoses2.Add(projection.FromWgs84(new MapPos(24.662893, 59.419365)));

            MapPosVectorVector polygonHoles = new MapPosVectorVector();

            polygonHoles.Add(holePoses1);
            polygonHoles.Add(holePoses2);

            // Add polygon
            Polygon polygon = new Polygon(polygonPoses, polygonHoles, polygonBuilder.BuildStyle());

            polygon.SetMetaDataElement("ClickText", new Variant("Polygon"));
            source.Add(polygon);
        }
コード例 #9
0
        private static void DrawTrunks()
        {
            MapEvent(null, new MapEventArgs(0, 100, "Calling type trunk..."));
            var trunks       = d.getObjects(day, 2, 557);
            var overlayLayer = new VectorLayer(dataSourceTrunks);

            overlayLayer.VisibleZoomRange = new MapRange(6, 24);
            mapView.Layers.Add(overlayLayer);
            var overlayLayer2 = new VectorLayer(dataSourceTrunks2);

            overlayLayer2.VisibleZoomRange = new MapRange(9, 24);
            mapView.Layers.Add(overlayLayer2);
            var overlayLayerText = new VectorLayer(dataSourceTrunksText);

            overlayLayerText.VisibleZoomRange = new MapRange(17, 24);
            mapView.Layers.Add(overlayLayerText);
            VectorElementVector v     = new VectorElementVector();
            VectorElementVector v2    = new VectorElementVector();
            VectorElementVector vText = new VectorElementVector();

            mapView.FocusPos = projection.FromWgs84(new MapPos(trunks[0].lineList.coordinates[0][0], trunks[0].lineList.coordinates[0][1]));
            int i = 0;

            foreach (var obj in trunks)
            {
                var linePoses = new MapPosVector();
                foreach (var pnt in obj.lineList.coordinates)
                {
                    linePoses.Add(projection.FromWgs84(new MapPos(pnt[0], pnt[1])));
                }
                var line = new Line(linePoses, Styles.GetTrunkStyle1().BuildStyle());
                v.Add(line);
                var line2 = new Line(linePoses, Styles.GetTrunkStyle2().BuildStyle());
                v2.Add(line2);
                var textpopup1 = new Text(projection.FromWgs84(new MapPos(obj.lineList.coordinates[0][0], obj.lineList.coordinates[0][1])),
                                          Styles.GetDefaultTextStyle().BuildStyle(),
                                          obj.name);
                vText.Add(textpopup1);
                MapEvent(null, new MapEventArgs(i, trunks.Count, "Drawing type trunk..."));
                i++;
            }
            dataSourceTrunks.RemoveAll(dataSourceTrunks.GetAll());
            dataSourceTrunks.AddAll(v);
            dataSourceTrunks2.RemoveAll(dataSourceTrunks2.GetAll());
            dataSourceTrunks2.AddAll(v2);
            dataSourceTrunksText.RemoveAll(dataSourceTrunksText.GetAll());
            dataSourceTrunksText.AddAll(vText);
        }
        public void Update()
        {
            MapPos position = Projection.FromWgs84(new MapPos(Longitude, Latitude));

            if (!FoundUser)
            {
                MapView.SetFocusPos(position, 0);
                MapView.SetZoom(17, 0);
                FoundUser = true;
            }

            var builder = new PolygonStyleBuilder();

            builder.Color = LightTransparentAppleBlue;

            var borderBuilder = new LineStyleBuilder();

            borderBuilder.Color = DarkTransparentAppleBlue;
            borderBuilder.Width = 1;

            MapPosVector points = GetCirclePoints(Longitude, Latitude, Accuracy);

            if (accuracyMarker == null)
            {
                accuracyMarker = new Polygon(points, new MapPosVectorVector(), builder.BuildStyle());
                source.Add(accuracyMarker);
            }
            else
            {
                accuracyMarker.Style    = builder.BuildStyle();
                accuracyMarker.Geometry = new PolygonGeometry(points);
            }

            if (userMarker == null)
            {
                var markerBuilder = new PointStyleBuilder();
                markerBuilder.Color = DarkTransparentAppleBlue;
                markerBuilder.Size  = 16.0f;

                userMarker = new Point(position, markerBuilder.BuildStyle());
                source.Add(userMarker);
            }
            else
            {
                userMarker.SetPos(position);
            }
        }
コード例 #11
0
        public static void AddOverlyingLines(MapView map, LocalVectorDataSource source, Projection projection)
        {
            // Initialize a second vector data source and vector layer
            // This secondary vector layer will be used for drawing borders for
            // line elements (by drawing the same line twice, with different widths)
            // Drawing order withing a layer is currently undefined
            // Using multiple layers is the only way to guarantee
            // that point, line and polygon elements are drawn in a specific order
            LocalVectorDataSource source2      = new LocalVectorDataSource(projection);
            VectorLayer           vectorLayer2 = new VectorLayer(source2);

            map.Layers.Add(vectorLayer2);

            vectorLayer2.VisibleZoomRange = new MapRange(10, 24);

            // Create line style, and line poses
            LineStyleBuilder lineStyleBuilder = new LineStyleBuilder();

            lineStyleBuilder.Color = new Color(255, 255, 255, 255);             // White
            lineStyleBuilder.Width = 8;

            MapPosVector linePoses = new MapPosVector();

            linePoses.Add(projection.FromWgs84(new MapPos(24.645565, 59.422074)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.643076, 59.420502)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.645351, 59.419149)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.648956, 59.420393)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.650887, 59.422707)));

            // Add first line
            Line line1 = new Line(linePoses, lineStyleBuilder.BuildStyle());

            line1.SetMetaDataElement("ClickText", new Variant("Line nr 1"));
            source2.Add(line1);

            // Create another line style, use the same lines poses
            lineStyleBuilder       = new LineStyleBuilder();
            lineStyleBuilder.Color = new Color(204, 15, 0, 255);
            lineStyleBuilder.Width = 12;

            // Add second line to the second layer.
            Line line2 = new Line(linePoses, lineStyleBuilder.BuildStyle());

            line2.SetMetaDataElement("ClickText", new Variant("Line nr 2"));
            source.Add(line2);
        }
コード例 #12
0
        public static void Add2DPolygon(LocalVectorDataSource source, Projection projection)
        {
            LineStyleBuilder lineBuilder = new LineStyleBuilder();
            lineBuilder.Color = new Color(0, 0, 0, 255); // Black
            lineBuilder.Width = 1.0f;

            // Create polygon style and poses
            PolygonStyleBuilder polygonBuilder = new PolygonStyleBuilder();
            polygonBuilder.Color = new Color(255, 0, 0, 255); // Red
            polygonBuilder.LineStyle = lineBuilder.BuildStyle();

            MapPosVector polygonPoses = new MapPosVector();
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.650930, 59.421659)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.657453, 59.416354)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.661187, 59.414607)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.667667, 59.418123)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.665736, 59.421703)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.661444, 59.421245)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.660199, 59.420677)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.656552, 59.420175)));
            polygonPoses.Add(projection.FromWgs84(new MapPos(24.654010, 59.421472)));

            // Create 2 polygon holes
            MapPosVector holePoses1 = new MapPosVector();
            holePoses1.Add(projection.FromWgs84(new MapPos(24.658409, 59.420522)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.662207, 59.418896)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.662207, 59.417411)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.659524, 59.417171)));
            holePoses1.Add(projection.FromWgs84(new MapPos(24.657615, 59.419834)));

            MapPosVector holePoses2 = new MapPosVector();
            holePoses2.Add(projection.FromWgs84(new MapPos(24.665640, 59.421243)));
            holePoses2.Add(projection.FromWgs84(new MapPos(24.668923, 59.419463)));
            holePoses2.Add(projection.FromWgs84(new MapPos(24.662893, 59.419365)));

            MapPosVectorVector polygonHoles = new MapPosVectorVector();
            polygonHoles.Add(holePoses1);
            polygonHoles.Add(holePoses2);

            // Add polygon
            Polygon polygon = new Polygon(polygonPoses, polygonHoles, polygonBuilder.BuildStyle());
            polygon.SetMetaDataElement("ClickText", new Variant("Polygon"));
            source.Add(polygon);
        }
コード例 #13
0
        private static void DrawForests()
        {
            MapEvent(null, new MapEventArgs(0, 100, "Calling type landuse forest ..."));
            var forests      = d.getObjects(day, 3, 472);
            var overlayLayer = new VectorLayer(dataSourceForests);

            overlayLayer.VisibleZoomRange = new MapRange(6, 24);
            mapView.Layers.Add(overlayLayer);
            var overlayLayerText = new VectorLayer(dataSourceForestsText);

            overlayLayerText.VisibleZoomRange = new MapRange(17, 24);
            mapView.Layers.Add(overlayLayerText);
            VectorElementVector v     = new VectorElementVector();
            VectorElementVector vText = new VectorElementVector();
            int i = 0;

            foreach (var obj in forests)
            {
                //Define coordinates of outer ring
                MapPosVector polygonPoses = new MapPosVector();
                foreach (var pnt in obj.polygonList.coordinates[0])
                {
                    polygonPoses.Add(projection.FromWgs84(new MapPos(pnt[0], pnt[1])));
                }
                Polygon polygon = new Polygon(polygonPoses, Styles.GetDefaultForestStyle().BuildStyle());
                //polygon.SetMetaDataElement("ClickText", obj.name);
                v.Add(polygon);
                if (i == 0)
                {
                    mapView.FocusPos = projection.FromWgs84(new MapPos(obj.polygonList.coordinates[0][0][0], obj.polygonList.coordinates[0][0][1]));
                }
                var textpopup1 = new Text(projection.FromWgs84(new MapPos(obj.polygonList.coordinates[0][0][0], obj.polygonList.coordinates[0][0][1])),
                                          Styles.GetDefaultTextStyle().BuildStyle(),
                                          obj.name);
                vText.Add(textpopup1);
                MapEvent(null, new MapEventArgs(i, forests.Count, "Drawing Type landuse forest..."));
                i++;
            }
            dataSourceForests.RemoveAll(dataSourceForests.GetAll());
            dataSourceForests.AddAll(v);
            dataSourceForestsText.RemoveAll(dataSourceForestsText.GetAll());
            dataSourceForestsText.AddAll(vText);
        }
        public MapPosVector GetCirclePoints(double centerLon, double centerLat, double radius)
        {
            // Number of points of circle
            int N            = 100;
            int EARTH_RADIUS = 6378137;

            MapPosVector points = new MapPosVector();

            for (int i = 0; i <= N; i++)
            {
                double angle = Math.PI * 2 * (i % N) / N;
                double dx    = radius * Math.Cos(angle);
                double dy    = radius * Math.Sin(angle);
                double lat   = centerLat + (180 / Math.PI) * (dy / EARTH_RADIUS);
                double lon   = centerLon + (180 / Math.PI) * (dx / EARTH_RADIUS) / Math.Cos(centerLat * Math.PI / 180);
                points.Add(Projection.FromWgs84(new MapPos(lon, lat)));
            }

            return(points);
        }
コード例 #15
0
        private static void DrawRivers()
        {
            MapEvent(null, new MapEventArgs(0, 100, "Calling type waterway river..."));
            var rivers       = d.getObjects(day, 2, 744);
            var overlayLayer = new VectorLayer(dataSourceRivers);

            overlayLayer.VisibleZoomRange = new MapRange(9, 24);
            mapView.Layers.Add(overlayLayer);
            var overlayLayerText = new VectorLayer(dataSourceRiversText);

            overlayLayerText.VisibleZoomRange = new MapRange(17, 24);
            mapView.Layers.Add(overlayLayerText);
            VectorElementVector v     = new VectorElementVector();
            VectorElementVector vText = new VectorElementVector();
            int i = 0;

            foreach (var obj in rivers)
            {
                var linePoses = new MapPosVector();
                foreach (var pnt in obj.lineList.coordinates)
                {
                    linePoses.Add(projection.FromWgs84(new MapPos(pnt[0], pnt[1])));
                }
                var line = new Line(linePoses, Styles.GetRiverStyle().BuildStyle());
                v.Add(line);
                if (i == 0)
                {
                    mapView.FocusPos = projection.FromWgs84(new MapPos(obj.lineList.coordinates[0][0], obj.lineList.coordinates[0][1]));
                }
                var textpopup1 = new Text(projection.FromWgs84(new MapPos(obj.lineList.coordinates[0][0], obj.lineList.coordinates[0][1])),
                                          Styles.GetDefaultTextStyle().BuildStyle(),
                                          obj.name);
                vText.Add(textpopup1);
                MapEvent(null, new MapEventArgs(i, rivers.Count, "Drawing type waterway river..."));
                i++;
            }
            dataSourceRivers.RemoveAll(dataSourceRivers.GetAll());
            dataSourceRivers.AddAll(v);
            dataSourceRiversText.RemoveAll(dataSourceRiversText.GetAll());
            dataSourceRiversText.AddAll(vText);
        }
コード例 #16
0
        public RoutingResult GetResult(MapPos startPos, MapPos stopPos)
        {
            MapPosVector poses = new MapPosVector();

            poses.Add(startPos);
            poses.Add(stopPos);

            RoutingRequest request = new RoutingRequest(Projection, poses);

            RoutingResult result = null;

            try
            {
                result = Service.CalculateRoute(request);
            }
            catch (Exception e)
            {
                Console.WriteLine("Exception calculating route: " + e.Message);
            }

            return(result);
        }
コード例 #17
0
        public void showRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                RunOnUiThread(() => {
                    Toast.MakeText(ApplicationContext, "Offline package is not ready, using online routing", ToastLength.Long).Show();
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                Task.Run(() => {
                    timeStart          = Java.Lang.JavaSystem.CurrentTimeMillis();
                    MapPosVector poses = new MapPosVector();
                    poses.Add(startPos);
                    poses.Add(stopPos);
                    RoutingRequest request = new RoutingRequest(baseProjection, poses);
                    RoutingResult result;
                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }


                    // now update response in UI thread
                    RunOnUiThread(() => {
                        if (result == null)
                        {
                            Toast.MakeText(ApplicationContext, "Routing failed", ToastLength.Long).Show();
                            shortestPathRunning = false;
                            return;
                        }

                        String routeText = "The route is " + (int)(result.TotalDistance / 100) / 10f
                                           + "km (" + secondsToHours((int)result.TotalTime)
                                           + ") calculation: " + (Java.Lang.JavaSystem.CurrentTimeMillis() - timeStart) + " ms";
                        Log.Info(routeText);

                        Toast.MakeText(ApplicationContext, routeText, ToastLength.Long).Show();

                        routeDataSource.RemoveAll();

                        startMarker.Visible = false;

                        routeDataSource.Add(createPolyline(startMarker.Geometry
                                                           .CenterPos, stopMarker.Geometry.CenterPos, result));

                        // add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;
                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions [i];
                            // Log.d(Const.LOG_TAG, instruction.toString());
                            createRoutePoint(result.Points [instruction.PointIndex], instruction.StreetName,
                                             instruction.Time, instruction.Distance, instruction.Action, routeDataSource);
                        }

                        shortestPathRunning = false;
                    });
                });
            }
        }
コード例 #18
0
        public RoutingResult GetResult(MapPos startPos, MapPos stopPos)
        {
            MapPosVector poses = new MapPosVector();

            poses.Add(startPos);
            poses.Add(stopPos);

            RoutingRequest request = new RoutingRequest(BaseProjection, poses);

            return Service.CalculateRoute(request);
        }
コード例 #19
0
        public void ShowRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                RunOnUiThread(() =>
                {
                    string message = "Offline package is not ready, using online routing";
                    Toast.MakeText(ApplicationContext, message, ToastLength.Long).Show();
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                Task.Run(() =>
                {
                    timeStart          = Java.Lang.JavaSystem.CurrentTimeMillis();
                    MapPosVector poses = new MapPosVector();

                    poses.Add(startPos);
                    poses.Add(stopPos);

                    RoutingRequest request = new RoutingRequest(BaseProjection, poses);
                    RoutingResult result;

                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }

                    // Now update response in UI thread
                    RunOnUiThread(() =>
                    {
                        if (result == null)
                        {
                            Alert("Routing failed");
                            shortestPathRunning = false;
                            return;
                        }

                        string distance    = "The route is " + (int)(result.TotalDistance / 100) / 10f + "km";
                        string time        = "(" + result.TotalTime.ConvertFromSecondsToHours() + ")";
                        string calculation = "| Calculation: " + (Java.Lang.JavaSystem.CurrentTimeMillis() - timeStart) + " ms";

                        Alert(distance + time + calculation);

                        routeDataSource.Clear();

                        startMarker.Visible = false;

                        Line line = CreatePolyline(startMarker.Geometry.CenterPos, stopMarker.Geometry.CenterPos, result);
                        routeDataSource.Add(line);

                        // Add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;

                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions[i];
                            MapPos position = result.Points[instruction.PointIndex];
                            CreateRoutePoint(position, instruction, routeDataSource);
                        }

                        shortestPathRunning = false;
                    });
                });
            }
        }
コード例 #20
0
        public void ShowRoute(MapPos startPos, MapPos stopPos)
        {
            Log.Debug("calculating path " + startPos + " to " + stopPos);

            if (!offlinePackageReady)
            {
                InvokeOnMainThread(() =>
                {
                    string message = "Offline package is not ready. Using online routing";
                    Alert(message);
                });
            }

            if (!shortestPathRunning)
            {
                shortestPathRunning = true;
                long timeStart;

                // run routing in background
                System.Threading.Tasks.Task.Run(delegate
                {
                    timeStart          = DateTime.Now.ToUnixTime();
                    MapPosVector poses = new MapPosVector {
                        startPos, stopPos
                    };

                    RoutingRequest request = new RoutingRequest(BaseProjection, poses);
                    RoutingResult result;

                    if (offlinePackageReady)
                    {
                        result = offlineRoutingService.CalculateRoute(request);
                    }
                    else
                    {
                        result = onlineRoutingService.CalculateRoute(request);
                    }

                    // Now update response in UI thread
                    InvokeOnMainThread(delegate
                    {
                        if (result == null)
                        {
                            Alert("Routing failed");
                            shortestPathRunning = false;
                            return;
                        }

                        routeDataSource.Clear();

                        startMarker.Visible = false;

                        Line line = CreatePolyline(startMarker.Geometry.CenterPos, stopMarker.Geometry.CenterPos, result);
                        routeDataSource.Add(line);

                        // Add instruction markers
                        RoutingInstructionVector instructions = result.Instructions;

                        for (int i = 0; i < instructions.Count; i++)
                        {
                            RoutingInstruction instruction = instructions[i];
                            MapPos position = result.Points[instruction.PointIndex];
                            CreateRoutePoint(position, instruction, routeDataSource);
                        }

                        string distance    = "The route is " + (int)(result.TotalDistance / 100) / 10f + "km";
                        string time        = " (" + result.TotalTime.ConvertFromSecondsToHours() + ") ";
                        string calculation = "| Calculation: " + (DateTime.Now.ToUnixTime() - timeStart) + " ms";

                        Alert(distance + time + calculation);

                        shortestPathRunning = false;
                    });
                });
            }
        }
コード例 #21
0
        async public static void AddMapOverlays(IMapView mapView)
        {
            // Create overlay layer for markers
            var dataSource   = new LocalVectorDataSource(proj);
            var overlayLayer = new VectorLayer(dataSource);

            mapView.Layers.Add(overlayLayer);

            // Create line style, and line poses
            var lineStyleBuilder = new LineStyleBuilder();

            lineStyleBuilder.Width = 8;

            var linePoses = new MapPosVector();

            // proj.FromWgs84 returns (spherical) Mercator projection
            linePoses.Add(proj.FromWgs84(new MapPos(0, 0)));
            linePoses.Add(proj.FromWgs84(new MapPos(0, 80)));
            linePoses.Add(proj.FromWgs84(new MapPos(45, 45)));

            var line = new Line(linePoses, lineStyleBuilder.BuildStyle());

            dataSource.Add(line);

            // Create balloon popup
            var balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();

            balloonPopupStyleBuilder.CornerRadius      = 3;
            balloonPopupStyleBuilder.TitleFontName     = "Helvetica";
            balloonPopupStyleBuilder.TitleFontSize     = 55;
            balloonPopupStyleBuilder.TitleColor        = new Color(200, 0, 0, 255);
            balloonPopupStyleBuilder.StrokeColor       = new Color(200, 120, 0, 255);
            balloonPopupStyleBuilder.StrokeWidth       = 1;
            balloonPopupStyleBuilder.PlacementPriority = 1;

            var popup = new BalloonPopup(
                proj.FromWgs84(new MapPos(0, 20)),
                balloonPopupStyleBuilder.BuildStyle(),
                "Title", "Description");

            dataSource.Add(popup);

            // Load NML file model from a file
            BinaryData modelFile = AssetUtils.LoadAsset("fcd_auto.nml");

            // set location for model, and create NMLModel object with this
            var modelPos = proj.FromWgs84(new MapPos(24.646469, 59.423939));
            var model    = new NMLModel(modelPos, modelFile);

            mapView.FocusPos = modelPos;
            mapView.Zoom     = 15;

            // Oversize it 20*, just to make it more visible (optional)
            model.Scale = 20;

            // Add metadata for click handling (optional)
            model.SetMetaDataElement("ClickText", new Variant("Single model"));

            // Add it to normal datasource
            dataSource.Add(model);

            // Create and set map listener
            mapView.MapEventListener = new MapListener(dataSource);

            await AnimateModel(model);
        }
コード例 #22
0
        public static void AddOverlyingLines(MapView map, LocalVectorDataSource source, Projection projection)
        {
            // Initialize a second vector data source and vector layer
            // This secondary vector layer will be used for drawing borders for
            // line elements (by drawing the same line twice, with different widths)
            // Drawing order withing a layer is currently undefined
            // Using multiple layers is the only way to guarantee
            // that point, line and polygon elements are drawn in a specific order
            LocalVectorDataSource source2 = new LocalVectorDataSource(projection);
            VectorLayer vectorLayer2 = new VectorLayer(source2);
            map.Layers.Add(vectorLayer2);

            vectorLayer2.VisibleZoomRange = new MapRange(10, 24);

            // Create line style, and line poses
            LineStyleBuilder lineStyleBuilder = new LineStyleBuilder();
            lineStyleBuilder.Color = new Color(255, 255, 255, 255); // White
            lineStyleBuilder.Width = 8;

            MapPosVector linePoses = new MapPosVector();

            linePoses.Add(projection.FromWgs84(new MapPos(24.645565, 59.422074)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.643076, 59.420502)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.645351, 59.419149)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.648956, 59.420393)));
            linePoses.Add(projection.FromWgs84(new MapPos(24.650887, 59.422707)));

            // Add first line
            Line line1 = new Line(linePoses, lineStyleBuilder.BuildStyle());
            line1.SetMetaDataElement("ClickText", new Variant("Line nr 1"));
            source2.Add(line1);

            // Create another line style, use the same lines poses
            lineStyleBuilder = new LineStyleBuilder();
            lineStyleBuilder.Color = new Color(204, 15, 0, 255);
            lineStyleBuilder.Width = 12;

            // Add second line to the second layer.
            Line line2 = new Line(linePoses, lineStyleBuilder.BuildStyle());
            line2.SetMetaDataElement("ClickText", new Variant("Line nr 2"));
            source.Add(line2);
        }