Exemple #1
0
        public static void AddBalloonPopup1(LocalVectorDataSource source, Projection projection, Bitmap leftImage, Bitmap rightImage)
        {
            // TODO REMOVE WHEN ANDROID COMPLETE
            //Bitmap infoImage = BitmapFactory.decodeResource(getResources(), R.drawable.info);
            //Bitmap arrowImage = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);

            //BitmapUtils.createBitmapFromAndroidBitmap(infoImage)
            //BitmapUtils.createBitmapFromAndroidBitmap(arrowImage);

            // Add popup
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins = new BalloonPopupMargins(6, 6, 6, 6);
            builder.LeftImage   = leftImage;

            builder.RightImage   = rightImage;
            builder.RightMargins = new BalloonPopupMargins(2, 6, 12, 6);

            builder.CornerRadius      = 20;
            builder.PlacementPriority = 1;

            MapPos       position = projection.FromWgs84(new MapPos(24.655662, 59.425521));
            BalloonPopup popup1   = new BalloonPopup(position, builder.BuildStyle(), "Popup with pos", "Images, round");

            popup1.SetMetaDataElement("ClickText", new Variant("Popup nr 1"));
            source.Add(popup1);
        }
        void AddMarker(string title, string subtitle, float latitude, float longitude)
        {
            // Define the location of the marker, it must be converted to base map coordinate system
            MapPos location = MapView.Options.BaseProjection.FromWgs84(new MapPos(longitude, latitude));

            // Load default market style
            MarkerStyleBuilder markerBuilder = new MarkerStyleBuilder();

            // Add the label to the Marker
            positionMarker = new Marker(location, markerBuilder.BuildStyle());

            // Define label what is shown when you click on marker, with default style
            var balloonBuilder = new BalloonPopupStyleBuilder();

            positionLabel = new BalloonPopup(positionMarker, balloonBuilder.BuildStyle(), title, subtitle);

            // Add the marker and label to the layer
            markerSource.Add(positionMarker);
            markerSource.Add(positionLabel);

            // Center the map in the current location
            MapView.FocusPos = location;

            // Zoom in the map in the current location
            MapView.Zoom = 19f;
        }
 public MyClusterElementBuilder()
 {
     balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();
     balloonPopupStyleBuilder.CornerRadius = 3;
     balloonPopupStyleBuilder.TitleMargins = new BalloonPopupMargins(6, 6, 6, 6);
     balloonPopupStyleBuilder.LeftColor    = new Color(240, 230, 140, 255);
 }
Exemple #4
0
        public override bool OnUTFGridClicked(UTFGridClickInfo clickInfo)
        {
            if (vectorDataSource == null)
            {
                vectorDataSource = (LocalVectorDataSource)vectorLayer.DataSource;
            }

            // Clear previous popups
            vectorDataSource.Clear();

            // Multiple vector elements can be clicked at the same time, we only care about the one
            // Check the type of vector element
            BalloonPopup             clickPopup   = null;
            BalloonPopupStyleBuilder styleBuilder = new BalloonPopupStyleBuilder();

            // Configure style
            styleBuilder.LeftMargins  = new BalloonPopupMargins(0, 0, 0, 0);
            styleBuilder.TitleMargins = new BalloonPopupMargins(6, 3, 6, 3);

            // Make sure this label is shown on top all other labels
            styleBuilder.PlacementPriority = 10;

            // Show clicked element variant as JSON string
            string desc = clickInfo.ElementInfo.ToString();

            clickPopup = new BalloonPopup(clickInfo.ClickPos, styleBuilder.BuildStyle(), "", desc);

            vectorDataSource.Add(clickPopup);

            return(true);
        }
 public MyClusterElementBuilder()
 {
     balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();
     balloonPopupStyleBuilder.CornerRadius = 3;
     balloonPopupStyleBuilder.TitleMargins = new BalloonPopupMargins(6, 6, 6, 6);
     balloonPopupStyleBuilder.LeftColor = new Color(240, 230, 140, 255);
 }
Exemple #6
0
        void AddMarker(string currentPositionTitle, string currentPositionSubtitle, float latitude, float longitude)
        {
            // Define the location of the marker, it must be converted to base map coordinate system
            MapPos currentLocation = mapView.Options.BaseProjection.FromWgs84(new MapPos(longitude, latitude));

            // load default market style
            MarkerStyleBuilder markerStyleBuilder = new MarkerStyleBuilder();

            // add the label to the Marker
            _currentPositionMarker = new Marker(currentLocation, markerStyleBuilder.BuildStyle());

            // Define label what is shown when you click on marker, with default style
            var balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();

            _currentPositionMarkerLabel = new BalloonPopup(_currentPositionMarker, balloonPopupStyleBuilder.BuildStyle(), currentPositionTitle, currentPositionSubtitle);

            // add the marker and label to the layer
            _markerDataSource.Add(_currentPositionMarker);
            _markerDataSource.Add(_currentPositionMarkerLabel);

            //center the map in the current location
            mapView.FocusPos = currentLocation;

            //zoom in the map in the current location
            mapView.Zoom = 19f;
        }
Exemple #7
0
        public override bool OnVectorTileClicked(VectorTileClickInfo clickInfo)
        {
            LocalVectorDataSource source = (LocalVectorDataSource)layer.DataSource;

            source.Clear();

            Color color = new Color(0, 100, 200, 150);

            Feature  feature  = clickInfo.Feature;
            Geometry geometry = feature.Geometry;

            PointStyleBuilder pointBuilder = new PointStyleBuilder();

            pointBuilder.Color = color;

            LineStyleBuilder lineBuilder = new LineStyleBuilder();

            lineBuilder.Color = color;

            PolygonStyleBuilder polygonBuilder = new PolygonStyleBuilder();

            polygonBuilder.Color = color;

            if (geometry is PointGeometry)
            {
                source.Add(new Point((PointGeometry)geometry, pointBuilder.BuildStyle()));
            }
            else if (geometry is LineGeometry)
            {
                source.Add(new Line((LineGeometry)geometry, lineBuilder.BuildStyle()));
            }
            else if (geometry is PolygonGeometry)
            {
                source.Add(new Polygon((PolygonGeometry)geometry, polygonBuilder.BuildStyle()));
            }
            else if (geometry is MultiGeometry)
            {
                GeometryCollectionStyleBuilder collectionBuilder = new GeometryCollectionStyleBuilder();
                collectionBuilder.PointStyle   = pointBuilder.BuildStyle();
                collectionBuilder.LineStyle    = lineBuilder.BuildStyle();
                collectionBuilder.PolygonStyle = polygonBuilder.BuildStyle();

                source.Add(new GeometryCollection((MultiGeometry)geometry, collectionBuilder.BuildStyle()));
            }

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            /// Set a higher placement priority so it would always be visible
            builder.PlacementPriority = 10;

            string message = feature.Properties.ToString();

            BalloonPopup popup = new BalloonPopup(clickInfo.ClickPos, builder.BuildStyle(), "Click", message);

            source.Add(popup);

            return(true);
        }
Exemple #8
0
        public void SetSourcesAndElements(Bitmap olmarker, Bitmap up, Bitmap upleft, Bitmap upright, Color green, Color red, Color white)
        {
            // Define layer and datasource for route line and instructions
            routeDataSource = new LocalVectorDataSource(BaseProjection);
            VectorLayer routeLayer = new VectorLayer(routeDataSource);

            MapView.Layers.Add(routeLayer);

            // Define layer and datasource for route start and stop markers
            routeStartStopDataSource = new LocalVectorDataSource(BaseProjection);

            // Initialize a vector layer with the previous data source
            VectorLayer vectorLayer = new VectorLayer(routeStartStopDataSource);

            // Add the previous vector layer to the map
            MapView.Layers.Add(vectorLayer);

            // Set visible zoom range for the vector layer
            vectorLayer.VisibleZoomRange = new MapRange(0, 22);

            // Create markers for start & end and a layer for them
            MarkerStyleBuilder markerBuilder = new MarkerStyleBuilder();

            markerBuilder.Bitmap           = olmarker;
            markerBuilder.HideIfOverlapped = false;
            markerBuilder.Size             = 30;
            markerBuilder.Color            = green;

            startMarker         = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            startMarker.Visible = false;

            markerBuilder.Color = red;

            stopMarker         = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            stopMarker.Visible = false;

            routeStartStopDataSource.Add(startMarker);
            routeStartStopDataSource.Add(stopMarker);

            markerBuilder.Color  = white;
            markerBuilder.Bitmap = up;
            instructionUp        = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = upleft;
            instructionLeft      = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = upright;
            instructionRight     = markerBuilder.BuildStyle();

            // Style for instruction balloons
            balloonBuilder = new BalloonPopupStyleBuilder();
            balloonBuilder.TitleMargins = new BalloonPopupMargins(4, 4, 4, 4);
        }
        public override bool OnVectorTileClicked(VectorTileClickInfo clickInfo)
        {
            if (Previous != null)
            {
                source.Remove(Previous);
            }

            var feature    = clickInfo.Feature;
            var properties = feature.Properties;

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins       = new BalloonPopupMargins(0, 0, 0, 0);
            builder.RightMargins      = new BalloonPopupMargins(6, 3, 6, 3);
            builder.PlacementPriority = 10;
            builder.CornerRadius      = 5;

            builder.TitleFontSize       = 14;
            builder.TitleColor          = new Color(20, 20, 20, 255);
            builder.DescriptionFontSize = 9;
            builder.DescriptionColor    = new Color(100, 100, 100, 255);

            builder.LeftMargins  = new BalloonPopupMargins(6, 6, 6, 6);
            builder.LeftImage    = LeftImage;
            builder.RightMargins = new BalloonPopupMargins(2, 6, 12, 6);

            var animationBuilder = new AnimationStyleBuilder();

            animationBuilder.RelativeSpeed     = 2.0f;
            animationBuilder.SizeAnimationType = AnimationType.AnimationTypeSpring;
            builder.AnimationStyle             = animationBuilder.BuildStyle();

            BalloonPopupStyle style = builder.BuildStyle();

            string title       = properties.GetObjectElement("title").String;
            string description = properties.GetObjectElement("description").String;

            MapPos       position = clickInfo.Feature.Geometry.CenterPos;
            BalloonPopup popup    = new BalloonPopup(position, style, title, description);;

            source.Add(popup);
            Previous = popup;

            string url = properties.GetObjectElement("attachment_url").String;

            Click?.Invoke(url, EventArgs.Empty);

            return(true);
        }
Exemple #10
0
        public override void OnMapClicked(MapClickInfo mapClickInfo)
        {
            // Remove old click label
            if (oldClickLabel != null)
            {
                vectorDataSource.Remove(oldClickLabel);
                oldClickLabel = null;
            }

            BalloonPopupStyleBuilder styleBuilder = new BalloonPopupStyleBuilder();

            // Make sure this label is shown on top all other labels
            styleBuilder.PlacementPriority = 10;

            // Check the type of the click
            string clickMsg = null;

            if (mapClickInfo.ClickType == ClickType.ClickTypeSingle)
            {
                clickMsg = "Single map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeLong)
            {
                clickMsg = "Long map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeDouble)
            {
                clickMsg = "Double map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeDual)
            {
                clickMsg = "Dual map click!";
            }

            MapPos clickPos = mapClickInfo.ClickPos;

            // Show click coordinates also
            MapPos wgs84Clickpos = mapView.Options.BaseProjection.ToWgs84(clickPos);
            //string message = string.Format("%.4f, %.4f", wgs84Clickpos.Y, wgs84Clickpos.X);
            string message = Math.Round(wgs84Clickpos.Y, 4) + ", " + Math.Round(wgs84Clickpos.X, 4);

            BalloonPopupStyle style = styleBuilder.BuildStyle();
            BalloonPopup      popup = new BalloonPopup(mapClickInfo.ClickPos, style, clickMsg, message);

            vectorDataSource.Add(popup);

            oldClickLabel = popup;
        }
        public override void OnMapClicked(MapClickInfo mapClickInfo)
        {
            // Remove old click label
            if (oldClickLabel != null)
            {
                vectorDataSource.Remove(oldClickLabel);
                oldClickLabel = null;
            }

            BalloonPopupStyleBuilder styleBuilder = new BalloonPopupStyleBuilder();
            // Make sure this label is shown on top all other labels
            styleBuilder.PlacementPriority = 10;

            // Check the type of the click
            string clickMsg = null;

            if (mapClickInfo.ClickType == ClickType.ClickTypeSingle)
            {
                clickMsg = "Single map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeLong)
            {
                clickMsg = "Long map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeDouble)
            {
                clickMsg = "Double map click!";
            }
            else if (mapClickInfo.ClickType == ClickType.ClickTypeDual)
            {
                clickMsg = "Dual map click!";
            }

            MapPos clickPos = mapClickInfo.ClickPos;

            // Show click coordinates also
            MapPos wgs84Clickpos = mapView.Options.BaseProjection.ToWgs84(clickPos);
            //string message = string.Format("%.4f, %.4f", wgs84Clickpos.Y, wgs84Clickpos.X);
            string message = Math.Round(wgs84Clickpos.Y, 4) + ", " + Math.Round(wgs84Clickpos.X, 4);

            BalloonPopupStyle style = styleBuilder.BuildStyle();
            BalloonPopup popup = new BalloonPopup(mapClickInfo.ClickPos, style, clickMsg, message);

            vectorDataSource.Add(popup);

            oldClickLabel = popup;
        }
Exemple #12
0
        public static void AddBalloonPopup3(LocalVectorDataSource source, Projection projection)
        {
            // Add popup
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.DescriptionWrap   = false;
            builder.PlacementPriority = 1;

            MapPos position    = projection.FromWgs84(new MapPos(24.658662, 59.432521));
            String title       = "This title will be wrapped if there's not enough space on the screen.";
            String description = "Description is set to be truncated with three dots, unless the screen is really really big.";

            BalloonPopup popup = new BalloonPopup(position, builder.BuildStyle(), title, description);

            popup.SetMetaDataElement("ClickText", new Variant("Popup nr 3"));

            source.Add(popup);
        }
Exemple #13
0
        public override bool OnVectorElementClicked(VectorElementClickInfo clickInfo)
        {
            if (previous != null)
            {
                source.Remove(previous);
            }

            VectorElement element = clickInfo.VectorElement;

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins       = new BalloonPopupMargins(0, 0, 0, 0);
            builder.RightMargins      = new BalloonPopupMargins(6, 3, 6, 3);
            builder.PlacementPriority = 10;

            BalloonPopupStyle style = builder.BuildStyle();

            string title       = element.GetMetaDataElement("ClickText").String;
            string description = "";

            for (int i = 0; i < element.MetaData.Count; i++)
            {
                string key = element.MetaData.Keys.ToList()[i];
                description += key + " = " + element.GetMetaDataElement(key) + "; ";
            }

            BalloonPopup popup;

            if (element is BalloonPopup)
            {
                Billboard billboard = (Billboard)element;
                popup = new BalloonPopup(billboard, style, title, description);
            }
            else
            {
                MapPos position = clickInfo.ClickPos;
                popup = new BalloonPopup(position, style, title, description);
            }

            source.Add(popup);
            previous = popup;

            return(true);
        }
        public override bool OnVectorElementClicked(VectorElementClickInfo clickInfo)
        {
            if (previous != null)
            {
                source.Remove(previous);
            }

            VectorElement element = clickInfo.VectorElement;

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();
            builder.LeftMargins = new BalloonPopupMargins(0, 0, 0, 0);
            builder.RightMargins = new BalloonPopupMargins(6, 3, 6, 3);
            builder.PlacementPriority = 10;

            BalloonPopupStyle style = builder.BuildStyle();

            string title = element.GetMetaDataElement("ClickText").String;
            string description = "";

            for (int i = 0; i < element.MetaData.Count; i++)
            {
                string key = element.MetaData.Keys.ToList()[i];
                description += key + " = " + element.GetMetaDataElement(key) + "; ";
            }

            BalloonPopup popup;

            if (element is BalloonPopup)
            {
                Billboard billboard = (Billboard)element;
                popup = new BalloonPopup(billboard, style, title, description);
            }
            else
            {
                MapPos position = clickInfo.ClickPos;
                popup = new BalloonPopup(position, style, title, description);
            }

            source.Add(popup);
            previous = popup;

            return true;
        }
Exemple #15
0
        public static void AddBalloonPopup2(LocalVectorDataSource source, Projection projection,
                                            Bitmap leftImage, Bitmap rightImage, Bitmap markerImage)
        {
            // Add popup, but instead of giving it a position attach it to a marker
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

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

            builder.LeftMargins = new BalloonPopupMargins(6, 6, 6, 6);
            builder.LeftImage   = leftImage;

            builder.RightImage   = rightImage;
            builder.RightMargins = new BalloonPopupMargins(2, 6, 12, 6);

            builder.TitleColor          = new Color(255, 255, 255, 255);
            builder.TitleFontName       = "HelveticaNeue-Medium";
            builder.TitleFontSize       = 11;
            builder.DescriptionColor    = new Color(255, 255, 255, 255);
            builder.DescriptionFontName = "HelveticaNeue-Medium";
            builder.DescriptionFontSize = 11;

            builder.StrokeColor = new Color(255, 0, 120, 255);
            builder.StrokeWidth = 0;

            builder.PlacementPriority = 1;

            Marker marker = GetMarker(projection, new MapPos(24.646469, 59.426939), markerImage);

            source.Add(marker);

            Marker marker2 = GetMarker(projection, new MapPos(24.666469, 59.422939), markerImage);

            source.Add(marker2);

            BalloonPopup popup = new BalloonPopup(marker, builder.BuildStyle(), "Popup attached to marker", "Black, rectangle.");

            popup.SetMetaDataElement("ClickText", new Variant("Popup nr 2"));

            source.Add(popup);
        }
Exemple #16
0
        public static void addJosnLayer(IMapView mapView, String json)
        {
            var features = Newtonsoft.Json.Linq.JObject.Parse(json)["features"];

            var geoJsonParser = new GeoJSONGeometryReader();

            var proj = new EPSG3857();
            var balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();

            // Create overlay layer for markers
            var dataSource   = new LocalVectorDataSource(proj);
            var overlayLayer = new ClusteredVectorLayer(dataSource, new MyClusterElementBuilder());

            overlayLayer.MinimumClusterDistance = 80;             // in pixels
            mapView.Layers.Add(overlayLayer);

            foreach (var feature in features)
            {
                var featureType = feature ["type"];

                var geometry = feature ["geometry"];
                var ntGeom   = geoJsonParser.ReadGeometry(Newtonsoft.Json.JsonConvert.SerializeObject(geometry));

                var popup = new BalloonPopup(
                    ntGeom,
                    balloonPopupStyleBuilder.BuildStyle(),
                    (string)feature ["properties"]["Capital"], (string)feature ["properties"]["Country"]);

                var properties = (JObject)feature ["properties"];
                foreach (var property in properties)
                {
                    var key   = (string)property.Key;
                    var value = (string)property.Value;
                    popup.SetMetaDataElement(key, value);
                }

                dataSource.Add(popup);
            }
        }
Exemple #17
0
        void OnLocationUpdate(object sender, LocationUpdatedEventArgs e)
        {
            double latitude  = e.Location.Coordinate.Latitude;
            double longitude = e.Location.Coordinate.Longitude;

            string title       = "Your current location";
            string description = latitude.To4Decimals() + ", " + longitude.To4Decimals();

            MapPos location = MapView.Options.BaseProjection.FromWgs84(new MapPos(longitude, latitude));

            if (IsMarkerSet)
            {
                markerLabel.Description = description;
                positionMarker.Geometry = new PointGeometry(location);
                return;
            }

            // Load default market style
            MarkerStyleBuilder markerStyleBuilder = new MarkerStyleBuilder();

            // Add the label to the Marker
            positionMarker = new Marker(location, markerStyleBuilder.BuildStyle());

            // Define label what is shown when you click on marker, with default style
            var builder = new BalloonPopupStyleBuilder();

            markerLabel = new BalloonPopup(positionMarker, builder.BuildStyle(), title, description);

            // Add the marker and label to the layer
            markerSource.Add(positionMarker);
            markerSource.Add(markerLabel);

            // Center the map in the current location
            MapView.FocusPos = location;

            // Zoom in the map in the current location
            MapView.Zoom = 19f;
        }
        public static void AddJsonLayer(IMapView mapView, string json)
        {
            var features = new Carto.Geometry.GeoJSONGeometryReader().ReadFeatureCollection(json);

            //var geoJsonParser = new GeoJSONGeometryReader();

            var balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();

            // Create overlay layer for markers
            var dataSource   = new LocalVectorDataSource(proj);
            var overlayLayer = new ClusteredVectorLayer(dataSource, new MyClusterElementBuilder());

            overlayLayer.MinimumClusterDistance = 80;             // in pixels

            mapView.Layers.Add(overlayLayer);

            for (int i = 0; i < features.FeatureCount; i++)
            {
                var geom  = features.GetFeature(i).Geometry;
                var props = features.GetFeature(i).Properties;

                // Create popup
                var popup = new BalloonPopup(
                    geom,
                    balloonPopupStyleBuilder.BuildStyle(),
                    props.GetObjectElement("Capital").String, props.GetObjectElement("Country").String);

                // Copy feature properties to popup metadata
                for (int j = 0; j < props.ObjectKeys.Count; j++)
                {
                    var key = props.ObjectKeys[j];
                    var val = props.GetObjectElement(key);
                    popup.SetMetaDataElement(key, val);
                }

                dataSource.Add(popup);
            }
        }
Exemple #19
0
        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            AddBaseLayer(CartoBaseMapStyle.CartoBasemapStyleDefault);

            // Create PackageManager instance for dealing with offline packages
            var packageFolder = new File(GetExternalFilesDir(null), "routingpackages");

            if (!(packageFolder.Mkdirs() || packageFolder.IsDirectory))
            {
                Log.Fatal("Could not create package folder!");
            }

            packageManager = new CartoPackageManager(ManagerSource, packageFolder.AbsolutePath);

            PackageListener = new RoutingPackageListener(packageManager, downloadablePackages);
            packageManager.PackageManagerListener = PackageListener;
            packageManager.Start();

            // Fetch list of available packages from server.
            // Note that this is asynchronous operation
            // and listener will be notified via onPackageListUpdated when this succeeds.
            packageManager.StartPackageListDownload();

            // create offline routing service connected to package manager
            offlineRoutingService = new PackageManagerRoutingService(packageManager);

            // Create additional online routing service that will be used
            // when offline package is not yet downloaded or offline routing fails
            onlineRoutingService = new CartoOnlineRoutingService(ServiceSource);

            // Define layer and datasource for route line and instructions
            routeDataSource = new LocalVectorDataSource(BaseProjection);
            VectorLayer routeLayer = new VectorLayer(routeDataSource);

            MapView.Layers.Add(routeLayer);

            // Define layer and datasource for route start and stop markers
            routeStartStopDataSource = new LocalVectorDataSource(BaseProjection);

            // Initialize a vector layer with the previous data source
            VectorLayer vectorLayer = new VectorLayer(routeStartStopDataSource);

            // Add the previous vector layer to the map
            MapView.Layers.Add(vectorLayer);

            // Set visible zoom range for the vector layer
            vectorLayer.VisibleZoomRange = new MapRange(0, 22);

            // Set route listener
            MapListener = new RouteMapEventListener();
            MapView.MapEventListener = MapListener;

            // Create markers for start & end and a layer for them
            MarkerStyleBuilder markerBuilder = new MarkerStyleBuilder();

            markerBuilder.Bitmap           = CreateBitmap(Resource.Drawable.olmarker);
            markerBuilder.HideIfOverlapped = false;
            markerBuilder.Size             = 30;
            markerBuilder.Color            = new Carto.Graphics.Color(Android.Graphics.Color.Green);

            startMarker         = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            startMarker.Visible = false;

            markerBuilder.Color = new Carto.Graphics.Color(Android.Graphics.Color.Red);

            stopMarker         = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            stopMarker.Visible = false;

            routeStartStopDataSource.Add(startMarker);
            routeStartStopDataSource.Add(stopMarker);

            markerBuilder.Color  = new Carto.Graphics.Color(Android.Graphics.Color.White);
            markerBuilder.Bitmap = CreateBitmap(Resource.Drawable.direction_up);
            instructionUp        = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = CreateBitmap(Resource.Drawable.direction_upthenleft);
            instructionLeft      = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = CreateBitmap(Resource.Drawable.direction_upthenright);
            instructionRight     = markerBuilder.BuildStyle();

            // Style for instruction balloons
            balloonBuilder = new BalloonPopupStyleBuilder();
            balloonBuilder.TitleMargins = new BalloonPopupMargins(4, 4, 4, 4);

            // Finally animate map to Estonia
            MapView.FocusPos = BaseProjection.FromWgs84(new MapPos(25.662893, 58.919365));
            MapView.Zoom     = 7;

            Alert("Long-press on map to set route start and finish");
        }
        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);
        }
        void OnLocationUpdate(object sender, LocationUpdatedEventArgs e)
        {
            double latitude = e.Location.Coordinate.Latitude;
            double longitude = e.Location.Coordinate.Longitude;

            string title = "Your current location";
            string description = latitude.To4Decimals() + ", " + longitude.To4Decimals();

            MapPos location = MapView.Options.BaseProjection.FromWgs84(new MapPos(longitude, latitude));

            if (IsMarkerSet) {
                markerLabel.Description = description;
                positionMarker.Geometry = new PointGeometry(location);
                return;
            }

            // Load default market style
            MarkerStyleBuilder markerStyleBuilder = new MarkerStyleBuilder();

            // Add the label to the Marker
            positionMarker = new Marker(location, markerStyleBuilder.BuildStyle());

            // Define label what is shown when you click on marker, with default style
            var builder = new BalloonPopupStyleBuilder();
            markerLabel = new BalloonPopup(positionMarker, builder.BuildStyle(), title, description);

            // Add the marker and label to the layer
            markerSource.Add(positionMarker);
            markerSource.Add(markerLabel);

            // Center the map in the current location
            MapView.FocusPos = location;

            // Zoom in the map in the current location
            MapView.Zoom = 19f;
        }
        public static void ShowResult(this LocalVectorDataSource source, MapView map, GeocodingResult result, string title, string description, bool goToPosition)
        {
            source.Clear();

            var builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins  = new BalloonPopupMargins(0, 0, 0, 0);
            builder.TitleMargins = new BalloonPopupMargins(6, 3, 6, 3);
            builder.CornerRadius = 5;
            // Make sure this label is shown on top of all other labels
            builder.PlacementPriority = 10;

            FeatureCollection collection = result.FeatureCollection;
            int count = collection.FeatureCount;

            MapPos   position = new MapPos();
            Geometry geometry;

            for (int i = 0; i < count; i++)
            {
                geometry = collection.GetFeature(i).Geometry;
                var color = new Carto.Graphics.Color(0, 100, 200, 150);

                var pointBuilder = new PointStyleBuilder();
                pointBuilder.Color = color;

                var lineBuilder = new LineStyleBuilder();
                lineBuilder.Color = color;

                var polygonBuilder = new PolygonStyleBuilder();
                polygonBuilder.Color = color;

                VectorElement element = null;

                if (geometry is PointGeometry)
                {
                    element = new Point(geometry as PointGeometry, pointBuilder.BuildStyle());
                }
                else if (geometry is LineGeometry)
                {
                    element = new Line(geometry as LineGeometry, lineBuilder.BuildStyle());
                }
                else if (geometry is PolygonGeometry)
                {
                    element = new Polygon(geometry as PolygonGeometry, polygonBuilder.BuildStyle());
                }
                else if (geometry is MultiGeometry)
                {
                    var collectionBuilder = new GeometryCollectionStyleBuilder();
                    collectionBuilder.PointStyle   = pointBuilder.BuildStyle();
                    collectionBuilder.LineStyle    = lineBuilder.BuildStyle();
                    collectionBuilder.PolygonStyle = polygonBuilder.BuildStyle();

                    element = new GeometryCollection(geometry as MultiGeometry, collectionBuilder.BuildStyle());
                }

                if (element != null)
                {
                    position = geometry.CenterPos;
                    source.Add(element);
                }
            }

            if (goToPosition)
            {
                map.SetFocusPos(position, 1.0f);
                map.SetZoom(16, 1.0f);
            }

            var popup = new BalloonPopup(position, builder.BuildStyle(), title, description);

            source.Add(popup);
        }
        public override bool OnVectorTileClicked(Carto.Ui.VectorTileClickInfo clickInfo)
        {
            source.Clear();

            Color color = new Color(0, 100, 200, 150);

            Feature  feature  = clickInfo.Feature;
            Geometry geometry = feature.Geometry;

            PointStyleBuilder pointBuilder = new PointStyleBuilder();

            pointBuilder.Color = color;

            LineStyleBuilder lineBuilder = new LineStyleBuilder();

            lineBuilder.Color = color;

            PolygonStyleBuilder polygonBuilder = new PolygonStyleBuilder();

            polygonBuilder.Color = color;

            if (geometry is PointGeometry)
            {
                source.Add(new Point((PointGeometry)geometry, pointBuilder.BuildStyle()));
            }
            else if (geometry is LineGeometry)
            {
                source.Add(new Line((LineGeometry)geometry, lineBuilder.BuildStyle()));
            }
            else if (geometry is PolygonGeometry)
            {
                source.Add(new Polygon((PolygonGeometry)geometry, polygonBuilder.BuildStyle()));
            }
            else if (geometry is MultiGeometry)
            {
                GeometryCollectionStyleBuilder collectionBuilder = new GeometryCollectionStyleBuilder();
                collectionBuilder.PointStyle   = pointBuilder.BuildStyle();
                collectionBuilder.LineStyle    = lineBuilder.BuildStyle();
                collectionBuilder.PolygonStyle = polygonBuilder.BuildStyle();

                source.Add(new GeometryCollection((MultiGeometry)geometry, collectionBuilder.BuildStyle()));
            }

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            // Set a higher placement priority so it would always be visible
            builder.PlacementPriority = 10;

            string id = clickInfo.FeatureId.ToString();

            string name = "Info (id: " + id + ")";

            if (feature.Properties.GetObjectElement("name").String != "null")
            {
                name += " about " + feature.Properties.GetObjectElement("name").String;
            }

            string description = feature.Properties.ToString();

            BalloonPopup popup = new BalloonPopup(clickInfo.ClickPos, builder.BuildStyle(), name, description);

            source.Add(popup);

            return(true);
        }
        public static void AddBalloonPopup3(LocalVectorDataSource source, Projection projection)
        {
            // Add popup
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();
            builder.DescriptionWrap = false;
            builder.PlacementPriority = 1;
            builder.TitleFontSize = 14;
            builder.DescriptionFontSize = 12;

            MapPos position = projection.FromWgs84(new MapPos(24.658662, 59.432521));
            String title = "This title will be wrapped if there's not enough space on the screen.";
            String description = "Description is set to be truncated with three dots, unless the screen is really really big.";

            BalloonPopup popup = new BalloonPopup(position, builder.BuildStyle(), title, description);

            popup.SetMetaDataElement("ClickText", new Variant("Popup nr 3"));

            source.Add(popup);
        }
        public override bool OnVectorElementClicked(VectorElementClickInfo clickInfo)
        {
            if (previous != null)
            {
                source.Remove(previous);
            }

            VectorElement element = clickInfo.VectorElement;

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins         = new BalloonPopupMargins(0, 0, 0, 0);
            builder.RightMargins        = new BalloonPopupMargins(6, 3, 6, 3);
            builder.PlacementPriority   = 10;
            builder.CornerRadius        = 5;
            builder.TitleFontSize       = 12;
            builder.DescriptionFontSize = 10;

            var navy = new Color(22, 41, 69, 255);

            builder.TitleColor       = navy;
            builder.DescriptionColor = navy;

            var animationBuilder = new AnimationStyleBuilder();

            animationBuilder.RelativeSpeed     = 2.0f;
            animationBuilder.SizeAnimationType = AnimationType.AnimationTypeSpring;
            builder.AnimationStyle             = animationBuilder.BuildStyle();

            BalloonPopupStyle style = builder.BuildStyle();

            string title       = element.GetMetaDataElement("ClickText").String;
            string description = "";

            if (!element.GetMetaDataElement(RouteSearchTitle).String.Equals(NullString))
            {
                // Route search has a special click text
                title       = element.GetMetaDataElement(RouteSearchTitle).String;
                description = element.GetMetaDataElement(RouteSearchDescription).String;
            }
            else
            {
                for (int i = 0; i < element.MetaData.Count; i++)
                {
                    string key = element.MetaData.Keys.ToList()[i];
                    description += key + " = " + element.GetMetaDataElement(key) + "; ";
                }
            }


            BalloonPopup popup;

            if (element is BalloonPopup)
            {
                Billboard billboard = (Billboard)element;
                popup = new BalloonPopup(billboard, style, title, description);
            }
            else
            {
                MapPos position = clickInfo.ClickPos;
                popup = new BalloonPopup(position, style, title, description);
            }

            source.Add(popup);
            previous = popup;

            return(true);
        }
Exemple #26
0
        protected override void OnCreate(Android.OS.Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);

            /// Set online base layer
            var baseLayer = new NutiteqOnlineVectorTileLayer("nutibright-v2a.zip");

            mapView.Layers.Add(baseLayer);


            // create PackageManager instance for dealing with offline packages
            var packageFolder = new File(GetExternalFilesDir(null), "routingpackages");

            if (!(packageFolder.Mkdirs() || packageFolder.IsDirectory))
            {
                Log.Fatal("Could not create package folder!");
            }

            packageManager = new NutiteqPackageManager(ROUTING_PACKAGEMANAGER_SOURCE, packageFolder.AbsolutePath);
            packageManager.PackageManagerListener = new RoutingPackageListener(this);
            packageManager.Start();

            // fetch list of available packages from server. Note that this is asynchronous operation and listener will be notified via onPackageListUpdated when this succeeds.
            packageManager.StartPackageListDownload();

            // create offline routing service connected to package manager
            offlineRoutingService = new PackageManagerRoutingService(packageManager);

            // create additional online routing service that will be used when offline package is not yet downloaded or offline routing fails
            onlineRoutingService = new NutiteqOnlineRoutingService(ROUTING_SERVICE_SOURCE);

            // define layer and datasource for route line and instructions
            routeDataSource = new LocalVectorDataSource(baseProjection);
            VectorLayer routeLayer = new VectorLayer(routeDataSource);

            mapView.Layers.Add(routeLayer);


            // define layer and datasource for route start and stop markers
            routeStartStopDataSource = new LocalVectorDataSource(baseProjection);
            // Initialize a vector layer with the previous data source
            VectorLayer vectorLayer = new VectorLayer(routeStartStopDataSource);

            // Add the previous vector layer to the map
            mapView.Layers.Add(vectorLayer);
            // Set visible zoom range for the vector layer
            vectorLayer.VisibleZoomRange = new MapRange(0, 22);


            // set route listener
            RouteMapEventListener mapListener = new RouteMapEventListener(this);

            mapView.MapEventListener = mapListener;

            // create markers for start & end, and a layer for them
            MarkerStyleBuilder markerStyleBuilder = new MarkerStyleBuilder();

            markerStyleBuilder.Bitmap = BitmapUtils
                                        .CreateBitmapFromAndroidBitmap(BitmapFactory.DecodeResource(
                                                                           Resources, Resource.Drawable.olmarker));
            markerStyleBuilder.HideIfOverlapped = false;
            markerStyleBuilder.Size             = 30;

            markerStyleBuilder.Color = new Nutiteq.Graphics.Color(Android.Graphics.Color.Green);

            startMarker         = new Marker(new MapPos(0, 0), markerStyleBuilder.BuildStyle());
            startMarker.Visible = false;


            markerStyleBuilder.Color = new Nutiteq.Graphics.Color(Android.Graphics.Color.Red);

            stopMarker         = new Marker(new MapPos(0, 0), markerStyleBuilder.BuildStyle());
            stopMarker.Visible = false;

            routeStartStopDataSource.Add(startMarker);
            routeStartStopDataSource.Add(stopMarker);

            markerStyleBuilder.Color  = new Nutiteq.Graphics.Color(Android.Graphics.Color.White);
            markerStyleBuilder.Bitmap = BitmapUtils
                                        .CreateBitmapFromAndroidBitmap(BitmapFactory.DecodeResource(
                                                                           Resources, Resource.Drawable.direction_up));
            instructionUp = markerStyleBuilder.BuildStyle();

            markerStyleBuilder.Bitmap = BitmapUtils
                                        .CreateBitmapFromAndroidBitmap(BitmapFactory.DecodeResource(
                                                                           Resources, Resource.Drawable.direction_upthenleft));
            instructionLeft = markerStyleBuilder.BuildStyle();

            markerStyleBuilder.Bitmap = BitmapUtils
                                        .CreateBitmapFromAndroidBitmap(BitmapFactory.DecodeResource(
                                                                           Resources, Resource.Drawable.direction_upthenright));

            instructionRight = markerStyleBuilder.BuildStyle();

            // style for instruction balloons
            balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();
            balloonPopupStyleBuilder.TitleMargins = new BalloonPopupMargins(4, 4, 4, 4);

            // finally animate map to Estonia
            mapView.FocusPos = baseProjection.FromWgs84(new MapPos(25.662893, 58.919365));
            mapView.Zoom     = 7;

            Toast.MakeText(ApplicationContext, "Long-press on map to set route start and finish", ToastLength.Long).Show();
        }
        public override void ViewDidLoad()
        {
            base.ViewDidLoad();

            AddBaseLayer(CartoBaseMapStyle.CartoBasemapStyleDefault);

            // Create PackageManager instance for dealing with offline packages
            string folder = Utils.GetDocumentDirectory("routingpackages");

            if (!Directory.Exists(folder))
            {
                Directory.CreateDirectory(folder);
                Console.WriteLine("Directory: Does not exist... Creating");
            }
            else
            {
                Console.WriteLine("Directory: Exists");
            }

            packageManager  = new CartoPackageManager(ROUTING_PACKAGEMANAGER_SOURCE, folder);
            PackageListener = new RoutingPackageListener(packageManager, downloadablePackages);

            packageManager.PackageManagerListener = PackageListener;

            // Fetch list of available packages from server.
            // Note that this is asynchronous operation
            // and listener will be notified via onPackageListUpdated when this succeeds.
            packageManager.StartPackageListDownload();

            // Create offline routing service connected to package manager
            offlineRoutingService = new PackageManagerRoutingService(packageManager);

            // Create additional online routing service that will be used
            // when offline package is not yet downloaded or offline routing fails
            onlineRoutingService = new CartoOnlineRoutingService(ROUTING_SERVICE_SOURCE);

            // Define layer and datasource for route line and instructions
            routeDataSource = new LocalVectorDataSource(BaseProjection);
            VectorLayer routeLayer = new VectorLayer(routeDataSource);

            MapView.Layers.Add(routeLayer);

            // Define layer and datasource for route start and stop markers
            routeStartStopDataSource = new LocalVectorDataSource(BaseProjection);

            // Initialize a vector layer with the previous data source
            VectorLayer vectorLayer = new VectorLayer(routeStartStopDataSource);

            // Add the previous vector layer to the map
            MapView.Layers.Add(vectorLayer);

            // Set visible zoom range for the vector layer
            vectorLayer.VisibleZoomRange = new MapRange(0, 22);

            MapListener = new RouteMapEventListener();
            MapView.MapEventListener = MapListener;

            // Create markers for start & end, and a layer for them
            MarkerStyleBuilder markerStyleBuilder = new MarkerStyleBuilder();

            markerStyleBuilder.Bitmap           = BitmapUtils.CreateBitmapFromUIImage(UIImage.FromFile("icons/olmarker.png"));
            markerStyleBuilder.HideIfOverlapped = false;
            markerStyleBuilder.Size             = 30;

            markerStyleBuilder.Color = new Carto.Graphics.Color(0, 255, 0, 255);

            startMarker         = new Marker(new MapPos(0, 0), markerStyleBuilder.BuildStyle());
            startMarker.Visible = false;

            markerStyleBuilder.Color = new Carto.Graphics.Color(255, 0, 0, 255);

            stopMarker         = new Marker(new MapPos(0, 0), markerStyleBuilder.BuildStyle());
            stopMarker.Visible = false;

            routeStartStopDataSource.Add(startMarker);
            routeStartStopDataSource.Add(stopMarker);

            markerStyleBuilder.Color  = new Carto.Graphics.Color(255, 255, 255, 255);
            markerStyleBuilder.Bitmap = BitmapUtils.CreateBitmapFromUIImage(UIImage.FromFile("icons/direction_up.png"));
            instructionUp             = markerStyleBuilder.BuildStyle();

            markerStyleBuilder.Bitmap = BitmapUtils.CreateBitmapFromUIImage(UIImage.FromFile("icons/direction_upthenleft.png"));
            instructionLeft           = markerStyleBuilder.BuildStyle();

            markerStyleBuilder.Bitmap = BitmapUtils.CreateBitmapFromUIImage(UIImage.FromFile("icons/direction_upthenright.png"));

            instructionRight = markerStyleBuilder.BuildStyle();

            // Style for instruction balloons
            balloonPopupStyleBuilder = new BalloonPopupStyleBuilder();
            balloonPopupStyleBuilder.TitleMargins = new BalloonPopupMargins(4, 4, 4, 4);

            // Finally animate map to Estonia
            MapView.FocusPos = BaseProjection.FromWgs84(new MapPos(25.662893, 58.919365));
            MapView.Zoom     = 7;

            Alert("Long-press on map to set route start and finish");
        }
        public void SetSourcesAndElements(Bitmap olmarker, Bitmap up, Bitmap upleft, Bitmap upright, Color green, Color red, Color white)
        {
            // Define layer and datasource for route line and instructions
            routeDataSource = new LocalVectorDataSource(BaseProjection);
            VectorLayer routeLayer = new VectorLayer(routeDataSource);
            MapView.Layers.Add(routeLayer);

            // Define layer and datasource for route start and stop markers
            routeStartStopDataSource = new LocalVectorDataSource(BaseProjection);

            // Initialize a vector layer with the previous data source
            VectorLayer vectorLayer = new VectorLayer(routeStartStopDataSource);

            // Add the previous vector layer to the map
            MapView.Layers.Add(vectorLayer);

            // Set visible zoom range for the vector layer
            vectorLayer.VisibleZoomRange = new MapRange(0, 22);

            // Create markers for start & end and a layer for them
            MarkerStyleBuilder markerBuilder = new MarkerStyleBuilder();
            markerBuilder.Bitmap = olmarker;
            markerBuilder.HideIfOverlapped = false;
            markerBuilder.Size = 30;
            markerBuilder.Color = green;

            startMarker = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            startMarker.Visible = false;

            markerBuilder.Color = red;

            stopMarker = new Marker(new MapPos(0, 0), markerBuilder.BuildStyle());
            stopMarker.Visible = false;

            routeStartStopDataSource.Add(startMarker);
            routeStartStopDataSource.Add(stopMarker);

            markerBuilder.Color = white;
            markerBuilder.Bitmap = up;
            instructionUp = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = upleft;
            instructionLeft = markerBuilder.BuildStyle();

            markerBuilder.Bitmap = upright;
            instructionRight = markerBuilder.BuildStyle();

            // Style for instruction balloons
            balloonBuilder = new BalloonPopupStyleBuilder();
            balloonBuilder.TitleMargins = new BalloonPopupMargins(4, 4, 4, 4);
        }
        void AddMarker(string title, string subtitle, float latitude, float longitude)
        {
            // Define the location of the marker, it must be converted to base map coordinate system
            MapPos location = MapView.Options.BaseProjection.FromWgs84(new MapPos(longitude, latitude));

            // Load default market style
            MarkerStyleBuilder markerBuilder = new MarkerStyleBuilder();

            // Add the label to the Marker
            positionMarker = new Marker(location, markerBuilder.BuildStyle());

            // Define label what is shown when you click on marker, with default style
            var balloonBuilder = new BalloonPopupStyleBuilder();
            positionLabel = new BalloonPopup(positionMarker, balloonBuilder.BuildStyle(), title, subtitle);

            // Add the marker and label to the layer
            markerSource.Add(positionMarker);
            markerSource.Add(positionLabel);

            // Center the map in the current location
            MapView.FocusPos = location;

            // Zoom in the map in the current location
            MapView.Zoom = 19f;
        }
        public override bool OnUTFGridClicked(UTFGridClickInfo clickInfo)
        {
            if (vectorDataSource == null)
            {
                vectorDataSource = (LocalVectorDataSource)vectorLayer.DataSource;
            }

            // Clear previous popups
            vectorDataSource.Clear();

            // Multiple vector elements can be clicked at the same time, we only care about the one
            // Check the type of vector element
            BalloonPopup clickPopup = null;
            BalloonPopupStyleBuilder styleBuilder = new BalloonPopupStyleBuilder();

            // Configure style
            styleBuilder.LeftMargins = new BalloonPopupMargins(0, 0, 0, 0);
            styleBuilder.TitleMargins = new BalloonPopupMargins(6, 3, 6, 3);

            // Make sure this label is shown on top all other labels
            styleBuilder.PlacementPriority = 10;

            // Show clicked element variant as JSON string
            string desc = clickInfo.ElementInfo.ToString();

            clickPopup = new BalloonPopup(clickInfo.ClickPos, styleBuilder.BuildStyle(), "Clicked", desc);

            vectorDataSource.Add(clickPopup);

            return true;
        }
        public static void AddBalloonPopup1(LocalVectorDataSource source, Projection projection, Bitmap leftImage, Bitmap rightImage)
        {
            // TODO REMOVE WHEN ANDROID COMPLETE
            //Bitmap infoImage = BitmapFactory.decodeResource(getResources(), R.drawable.info);
            //Bitmap arrowImage = BitmapFactory.decodeResource(getResources(), R.drawable.arrow);

            //BitmapUtils.createBitmapFromAndroidBitmap(infoImage)
            //BitmapUtils.createBitmapFromAndroidBitmap(arrowImage);

            // Add popup
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            builder.LeftMargins = new BalloonPopupMargins(6, 6, 6, 6);
            builder.LeftImage = leftImage;

            builder.RightImage = rightImage;
            builder.RightMargins = new BalloonPopupMargins(2, 6, 12, 6);

            builder.CornerRadius = 20;
            builder.PlacementPriority = 1;
            builder.TitleFontSize = 10;
            builder.DescriptionFontSize = 10;

            MapPos position = projection.FromWgs84(new MapPos(24.655662, 59.425521));
            BalloonPopup popup1 = new BalloonPopup(position, builder.BuildStyle(), "Popup with pos", "Images, round");

            popup1.SetMetaDataElement("ClickText", new Variant("Popup nr 1"));
            source.Add(popup1);
        }
        public static void AddBalloonPopup2(LocalVectorDataSource source, Projection projection, 
		                                    Bitmap leftImage, Bitmap rightImage, Bitmap markerImage)
        {
            // Add popup, but instead of giving it a position attach it to a marker
            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();
            builder.Color = new Color(0, 0, 0, 255);
            builder.CornerRadius = 0;

            builder.LeftMargins = new BalloonPopupMargins(6, 6, 6, 6);
            builder.LeftImage = leftImage;

            builder.RightImage = rightImage;
            builder.RightMargins = new BalloonPopupMargins(2, 6, 12, 6);

            builder.TitleColor = new Color(255, 255, 255, 255);
            builder.TitleFontName = "HelveticaNeue-Medium";
            builder.TitleFontSize = 11;
            builder.DescriptionColor = new Color(255, 255, 255, 255);
            builder.DescriptionFontName = "HelveticaNeue-Medium";
            builder.DescriptionFontSize = 11;

            builder.StrokeColor = new Color(255, 0, 120, 255);
            builder.StrokeWidth = 0;

            builder.PlacementPriority = 1;

            Marker marker = GetMarker(projection, new MapPos(24.646469, 59.426939), markerImage);
            source.Add(marker);

            Marker marker2 = GetMarker(projection, new MapPos(24.666469, 59.422939), markerImage);
            source.Add(marker2);

            BalloonPopup popup = new BalloonPopup(marker, builder.BuildStyle(), "Popup attached to marker", "Black, rectangle.");
            popup.SetMetaDataElement("ClickText", new Variant("Popup nr 2"));

            source.Add(popup);
        }
Exemple #33
0
        public override bool OnVectorTileClicked(VectorTileClickInfo clickInfo)
        {
            LocalVectorDataSource source = (LocalVectorDataSource)layer.DataSource;

            source.Clear();

            Color color = new Color(0, 100, 200, 150);

            Feature  feature  = clickInfo.Feature;
            Geometry geometry = feature.Geometry;

            PointStyleBuilder pointBuilder = new PointStyleBuilder();

            pointBuilder.Color = color;

            LineStyleBuilder lineBuilder = new LineStyleBuilder();

            lineBuilder.Color = color;

            PolygonStyleBuilder polygonBuilder = new PolygonStyleBuilder();

            polygonBuilder.Color = color;

            if (geometry is PointGeometry)
            {
                source.Add(new Point((PointGeometry)geometry, pointBuilder.BuildStyle()));
            }
            else if (geometry is LineGeometry)
            {
                source.Add(new Line((LineGeometry)geometry, lineBuilder.BuildStyle()));
            }
            else if (geometry is PolygonGeometry)
            {
                source.Add(new Polygon((PolygonGeometry)geometry, polygonBuilder.BuildStyle()));
            }
            else if (geometry is MultiGeometry)
            {
                GeometryCollectionStyleBuilder collectionBuilder = new GeometryCollectionStyleBuilder();
                collectionBuilder.PointStyle   = pointBuilder.BuildStyle();
                collectionBuilder.LineStyle    = lineBuilder.BuildStyle();
                collectionBuilder.PolygonStyle = polygonBuilder.BuildStyle();

                source.Add(new GeometryCollection((MultiGeometry)geometry, collectionBuilder.BuildStyle()));
            }

            BalloonPopupStyleBuilder builder = new BalloonPopupStyleBuilder();

            // Set a higher placement priority so it would always be visible
            builder.PlacementPriority = 10;

            string id          = clickInfo.FeatureId.ToString();
            string message     = "(Id: " + id + ") ";
            string name        = feature.Properties.GetObjectElement("name").String;
            string description = feature.Properties.GetObjectElement("description").String.ToMax200Characters();

            if (name.Equals("null"))
            {
                string facility = feature.Properties.GetObjectElement("facility").String;

                if (!facility.Equals("null"))
                {
                    message += facility;
                }
                else
                {
                    message += feature.Properties.ToString();
                }
            }
            else
            {
                message += name;

                if (!description.Equals("null"))
                {
                    message += "\n" + description;
                }
            }

            BalloonPopup popup = new BalloonPopup(clickInfo.ClickPos, builder.BuildStyle(), "", message);

            source.Add(popup);

            if (IsForce)
            {
                Console.WriteLine("Force touch");
                return(false);
            }

            Console.WriteLine("Non-force");
            return(true);
        }