Ejemplo n.º 1
0
        private async void MySceneView_MouseLeftDown(object sender, MouseEventArgs e)
        {
            if (edit == true && (type == "line" || type == "area"))
            {
                if (MySceneView.GetCurrentViewpoint(ViewpointType.BoundingGeometry) == null)
                {
                    return;
                }
                _mapViewModel.Clear(type);
                System.Windows.Point screenPoint = e.GetPosition(MySceneView);
                MapPoint             mapPoint    = await MySceneView.ScreenToLocationAsync(screenPoint);

                if (mapPoint.X != 0 && mapPoint.Y != 0 && mapPoint.Z != 0)
                {
                    mapPoint = GeometryEngine.NormalizeCentralMeridian(mapPoint) as MapPoint;
                    mapPoint_list.Add(new MapPoint(mapPoint.X, mapPoint.Y));
                    if (mapPoint_list.Count > 1)
                    {
                        var boatPositions = new PolylineBuilder(SpatialReferences.Wgs84);
                        boatPositions.AddPoint(new MapPoint(mapPoint_list[mapPoint_list.Count - 2].X, mapPoint_list[mapPoint_list.Count - 2].Y));
                        boatPositions.AddPoint(new MapPoint(mapPoint_list[mapPoint_list.Count - 1].X, mapPoint_list[mapPoint_list.Count - 1].Y));
                        var boatRoute = boatPositions.ToGeometry();
                        _mapViewModel.Line(boatRoute, "temp");;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public static Polyline ToPolyline(this List <Vertex> path, MapPoint start, MapPoint end)
        {
            var polyline = new PolylineBuilder(SpatialReferences.Wgs84);

            polyline.AddPoint(start);
            foreach (var v in path)
            {
                var mapPoint = v.Coordinates.ToMapPoint();
                polyline.AddPoint(mapPoint);
            }
            polyline.AddPoint(end);
            return(polyline.ToGeometry());
        }
Ejemplo n.º 3
0
        public TrackModel(TaskEventArgs args, Action <string> callback)
        {
            Callback    = callback;
            TrackPoints = new List <Graphic>();
            TrackLine   = new Graphic {
                Geometry = new Polyline(new PointCollection())
            };

            PolylineBuilder polylineBuilder = new PolylineBuilder(TrackLine.Geometry as Polyline);

            XmlNodeList pts = args.GetXmlNodes("//PLocation");

            if (pts == null)
            {
                return;
            }

            var sms = GetPointSymbol(args.GetXmlNode("//LSymbol"));

            foreach (XmlNode n in pts)
            {
                var tp = GetGraphic(n);
                tp.Symbol = sms;
                TrackPoints.Add(tp);
                polylineBuilder.AddPoint(tp.Geometry as MapPoint);
            }

            TrackLine.Geometry = polylineBuilder.ToGeometry();
            TrackLine.Symbol   = GetTrackSymbol(args.GetXmlNode("//LSymbol"));


            GetIcon(args.GetXmlNode("//PData"));
        }
Ejemplo n.º 4
0
        public static async Task <Polyline> DrawPolylineAsync(SceneView sceneView, System.Threading.CancellationToken cancellationToken)
        {
            var             tcs             = new TaskCompletionSource <Polyline>();
            PolylineBuilder polylineBuilder = new PolylineBuilder(sceneView.SpatialReference);

            polylineBuilder.AddPart(new MapPoint[] { });
            var     sketchlayer = CreateSketchLayer(sceneView);
            Graphic lineGraphic = new Graphic()
            {
                Symbol = DefaultLineSymbol
            };
            Graphic lineMoveGraphic = new Graphic()
            {
                Symbol = DefaultLineMoveSymbol
            };

            sketchlayer.Graphics.AddRange(new Graphic[] { lineGraphic, lineMoveGraphic });
            Action cleanupEvents = SetUpHandlers(sceneView,
                                                 (p) => //On mouse move, move completion line around
            {
                if (p != null && polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count > 0)
                {
                    lineMoveGraphic.Geometry = new Polyline(new MapPoint[] { polylineBuilder.Parts[0].Last().EndPoint, p });
                }
            },
                                                 (p) => //On tap add a vertex
            {
                if (p != null)
                {
                    polylineBuilder.AddPoint(p);
                    if (polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count >= 1)
                    {
                        lineGraphic.Geometry = polylineBuilder.ToGeometry();
                    }
                }
            },
                                                 (p) => //View tapped - completes task and returns point
            {
                tcs.SetResult(polylineBuilder.ToGeometry());
            });
            Action cleanup = () =>
            {
                cleanupEvents();
                sceneView.GraphicsOverlays.Remove(sketchlayer);
            };

            cancellationToken.Register(() => tcs.SetCanceled());

            Polyline result = null;

            try
            {
                result = await tcs.Task;
            }
            finally
            {
                cleanup();
            }
            return(result);
        }
Ejemplo n.º 5
0
 private void MySceneView_MouseDoubleClick(object sender, MouseEventArgs e)
 {
     if (type == "line" && mapPoint_list.Count != 0)
     {
         BorderContentText.Visibility = Visibility.Visible;
         var boatPositions = new PolylineBuilder(SpatialReferences.Wgs84);
         for (var i = 0; i < mapPoint_list.Count; i++)
         {
             boatPositions.AddPoint(new MapPoint(mapPoint_list[i].X, mapPoint_list[i].Y));
         }
         var boatRoute = boatPositions.ToGeometry();
         _mapViewModel.Line(boatRoute, "line");
         LineText.Text = "Line Length: " + GeometryEngine.LengthGeodetic(boatRoute).ToString("N2") + " meters";
     }
     else if (type == "area" && mapPoint_list.Count != 0)
     {
         BorderContentText.Visibility = Visibility.Visible;
         var boatPositions = new PolygonBuilder(SpatialReferences.Wgs84);
         for (var i = 0; i < mapPoint_list.Count; i++)
         {
             boatPositions.AddPoint(new MapPoint(mapPoint_list[i].X, mapPoint_list[i].Y));
         }
         var boatRoute = boatPositions.ToGeometry();
         _mapViewModel.Area(boatRoute);
         AreaText.Text = "Area Size: " + GeometryEngine.AreaGeodetic(boatRoute).ToString("N2") + "  square meters";
     }
     mapPoint_list.Clear();
 }
Ejemplo n.º 6
0
        private List <Graphic> GenerateGraphics(Diamond14EntityLine line, string type, Color color)
        {
            var result = new List <Graphic>();

            var lineBuilder = new PolylineBuilder(SpatialReferences.WebMercator);

            foreach (var point in line.Items)
            {
                if (point.IsValid())
                {
                    var mapPointWgs84 = new MapPoint(point.Longitude, point.Latitude, SpatialReferences.Wgs84);
                    var mapPoint      = GeometryEngine.Project(mapPointWgs84, SpatialReferences.WebMercator) as MapPoint;
                    lineBuilder.AddPoint(mapPoint);
                }
            }

            var geometry   = lineBuilder.ToGeometry();
            var resultLine = new Graphic
            {
                Geometry = geometry,
                Symbol   = new SimpleLineSymbol
                {
                    Color = color,
                    Width = line.Width
                }
            };

            resultLine.Attributes[Diamond14Attributes.LineValue] = line.LabelValue?.ToString() ?? string.Empty;
            resultLine.Attributes[Diamond14Attributes.LineType]  = type;

            result.Add(resultLine);

            return(result);
        }
Ejemplo n.º 7
0
        private Polyline CreateGeometryFromWayPoints(List <wptType> wayPoints)
        {
            var builder = new PolylineBuilder(new SpatialReference(4326));

            foreach (var wayPoint in wayPoints)
            {
                builder.AddPoint(new MapPoint((double)wayPoint.lon, (double)wayPoint.lat));
            }
            return(builder.ToGeometry());
        }
Ejemplo n.º 8
0
        public static Polyline ToEsriPolyline(this LineString line)
        {
            PolylineBuilder bld = new PolylineBuilder(SpatialReferences.Wgs84);

            foreach (var coord in line.Coordinates)
            {
                bld.AddPoint(new MapPoint(coord.X, coord.Y, SpatialReferences.Wgs84));
            }

            return(bld.ToGeometry());
        }
Ejemplo n.º 9
0
        public MainPageViewModel()
        {
            Map = new Map(SpatialReference.Create(102100));

            // Add the tile basemap only after the map has loaded so it doesn't block the map if offline
            Map.Loaded += (sender, e) => { Map.Basemap = Basemap.CreateImagery(); };

            GraphicsOverlay editGraphics = new GraphicsOverlay();

            editGraphics.Id = "MyGraphics";
            GraphicsOverlays.Add(editGraphics);

            // Add some test graphics

            var point       = new MapPoint(-3000000, 5000000);
            var pointSymbol = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Circle, SystemColor.Red, 25);
            List <KeyValuePair <string, object> > PolyPoint = new List <KeyValuePair <string, object> >();

            PolyPoint.Add(new KeyValuePair <string, object>("Number", 678910));
            PolyPoint.Add(new KeyValuePair <string, object>("Type", "This is Point"));
            Graphic mapPoint = new Graphic(point, PolyPoint, pointSymbol);

            GraphicsOverlays["MyGraphics"].Graphics.Add(mapPoint);

            var travelPolyline = new SimpleLineSymbol(SimpleLineSymbolStyle.Dash, SystemColor.Red, 5);
            var travelPosition = new PolylineBuilder(SpatialReference.Create(102100));

            travelPosition.AddPoint(new MapPoint(0, 0));
            travelPosition.AddPoint(new MapPoint(1000000, 1000000));
            travelPosition.AddPoint(new MapPoint(5000000, 5000000));
            travelPosition.AddPoint(new MapPoint(2000000, 8000000));
            var travelRoute = travelPosition.ToGeometry();
            List <KeyValuePair <string, object> > Polyline = new List <KeyValuePair <string, object> >();

            Polyline.Add(new KeyValuePair <string, object>("Number", 12345));
            Polyline.Add(new KeyValuePair <string, object>("Type", "This is polyline"));
            var travelTrip = new Graphic(travelRoute, Polyline, travelPolyline);

            GraphicsOverlays["MyGraphics"].Graphics.Add(travelTrip);
        }
Ejemplo n.º 10
0
        private void CreateGeometryAndExtentForTrackOrRoute(GeometryData data, GraphicType typeOfGraphic)
        {
            var builder = new PolylineBuilder(new SpatialReference(4326));

            foreach (var wayPoint in data.Points)
            {
                builder.AddPoint(new MapPoint((double)wayPoint.lon, (double)wayPoint.lat));
            }
            var esriGeometry = builder.ToGeometry();

            data.Extent = esriGeometry.Extent;
            var geometry = new BikeTouringGISGraphic(esriGeometry, typeOfGraphic);

            geometry.Attributes["name"]     = data.Name;
            geometry.Attributes["filename"] = data.FileName;
            data.Geometry = geometry;
        }
        private void LocationDataSourceOnLocationChanged(object sender, Location e)
        {
            // Remove the old line.
            _locationHistoryLineOverlay.Graphics.Clear();

            // Add any previous position to the history.
            if (_lastPosition != null)
            {
                _polylineBuilder.AddPoint(_lastPosition);
                _locationHistoryOverlay.Graphics.Add(new Graphic(_lastPosition));
            }

            // Store the current position.
            _lastPosition = e.Position;

            // Add the updated line.
            _locationHistoryLineOverlay.Graphics.Add(new Graphic(_polylineBuilder.ToGeometry()));
        }
        private async void QueryFeatures(Geometry buffer, MapPoint location)
        {
            //create query
            var query = new QueryParameters();

            query.Geometry           = buffer;
            query.MaxAllowableOffset = 0;
            System.Diagnostics.Debug.WriteLine(buffer.ToJson());

            var layer   = MyMapView.Map.OperationalLayers[0] as FeatureLayer;
            var table   = layer.FeatureTable;
            var results = await table.QueryFeaturesAsync(query);

            layer.ClearSelection();


            /* // ===================================================================
             * //                       Single Closest Bar
             * // -------------------------------------------------------------------
             *
             * double shortDist = -1;
             * Feature feature = null;
             *
             * //check for closest bars within buffer
             * foreach (var item in results)
             * {
             *  var calcDistance = GeometryEngine.Distance(location, item.Geometry);
             *
             *  if (shortDist == -1)
             *  {
             *      shortDist = calcDistance;
             *      feature = item;
             *      continue;
             *  }
             *
             *  if (calcDistance < shortDist)
             *  {
             *      shortDist = calcDistance;
             *      feature = item;
             *  }
             * }
             *
             * //exit if no closest bar
             * if (feature == null)
             *  return;
             *
             * if (!(GeometryEngine.Intersects(buffer, feature.Geometry)))
             *  return;
             *
             * //highlight closest bar
             * layer.SelectFeature(feature);
             * layer.SelectionColor = Colors.DarkRed;
             *
             * //draw line to closest bar
             * var linePoints = new PolylineBuilder(SpatialReferences.WebMercator);
             * linePoints.AddPoint(location);
             * linePoints.AddPoint(feature.Geometry as MapPoint);
             * var line = linePoints.ToGeometry();
             *
             * var lineSymbol = new SimpleLineSymbol(SimpleLineSymbolStyle.DashDotDot, Colors.Maroon, 2);
             * var lineGraphic = new Graphic(line, lineSymbol);
             * MyOverlay.Graphics.Add(lineGraphic);
             *
             *
             * //create text symbol for distance at midpoint of line
             * var x = (line.Extent.XMin + line.Extent.XMax) / 2;
             * var y = (line.Extent.YMin + line.Extent.YMax) / 2;
             * var textPoint = new MapPoint(x, y);
             * var text = String.Format("{0:0.00}", shortDist / 1609.34) + " miles";
             * var textSymbol = new TextSymbol(text, Colors.Black, 15, Esri.ArcGISRuntime.Symbology.HorizontalAlignment.Center, Esri.ArcGISRuntime.Symbology.VerticalAlignment.Baseline);
             * textSymbol.FontWeight = Esri.ArcGISRuntime.Symbology.FontWeight.Bold;
             * //textSymbol.BackgroundColor = Colors.Maroon;
             * //textSymbol.Angle = Math.Atan2(line.Extent.YMax - line.Extent.YMin, line.Extent.XMax - line.Extent.XMin) * 180.0 / Math.PI;
             * var textGraphic = new Graphic(textPoint, textSymbol);
             * MyOverlay.Graphics.Add(textGraphic);
             *
             * //===================================================================*/



            //==================================================================
            //                    Two Closest Bars
            //------------------------------------------------------------------

            double[]  shortDist = { -1, -1 };
            Feature[] feature   = new Feature[2];
            System.Diagnostics.Debug.WriteLine("#1: shortdist is at: " + shortDist[0].ToString() + " " + shortDist[1].ToString());

            //check for closest bars within buffer
            foreach (var item in results)
            {
                var calcDistance = GeometryEngine.Distance(location, item.Geometry);
                System.Diagnostics.Debug.WriteLine("feature distance: " + (calcDistance / 1609.34).ToString() + " meters; shordist = " + shortDist[0].ToString() + " " + shortDist[1].ToString());
                if (shortDist[0] == -1)
                {
                    shortDist[0] = calcDistance;
                    System.Diagnostics.Debug.WriteLine("setting first");
                    feature[0] = item;
                    continue;
                }
                if (shortDist[1] == -1)
                {
                    System.Diagnostics.Debug.WriteLine("setting second");
                    shortDist[1] = calcDistance;
                    feature[1]   = item;
                    continue;
                }

                if (calcDistance < shortDist[0])
                {
                    System.Diagnostics.Debug.WriteLine("less than first");
                    shortDist[1] = shortDist[0];
                    feature[1]   = feature[0];
                    shortDist[0] = calcDistance;
                    feature[0]   = item;
                }
                else if (calcDistance < shortDist[1])
                {
                    System.Diagnostics.Debug.WriteLine("less than second");
                    shortDist[1] = calcDistance;
                    feature[1]   = item;
                }
            }

            //exit if no closest bar
            if (feature[0] == null || feature[1] == null)
            {
                return;
            }

            if (!(GeometryEngine.Intersects(buffer, feature[0].Geometry)))
            {
                return;
            }

            //highlight closest bar
            for (int i = 0; i < 2; i++)
            {
                layer.SelectFeature(feature[i]);
                layer.SelectionColor = Colors.DarkRed;

                //draw line to closest bar
                var linePoints = new PolylineBuilder(SpatialReferences.WebMercator);
                linePoints.AddPoint(location);
                linePoints.AddPoint(feature[i].Geometry as MapPoint);
                var line = linePoints.ToGeometry();

                var lineSymbol  = new SimpleLineSymbol(SimpleLineSymbolStyle.DashDotDot, Colors.Maroon, 2);
                var lineGraphic = new Graphic(line, lineSymbol);
                MyOverlay.Graphics.Add(lineGraphic);

                //create text symbol for distance at midpoint of line
                var x          = (line.Extent.XMin + line.Extent.XMax) / 2;
                var y          = (line.Extent.YMin + line.Extent.YMax) / 2;
                var textPoint  = new MapPoint(x, y);
                var text       = String.Format("{0:0.00}", shortDist[i] / 1609.34) + " miles";
                var textSymbol = new TextSymbol(text, Colors.Black, 15, Esri.ArcGISRuntime.Symbology.HorizontalAlignment.Center, Esri.ArcGISRuntime.Symbology.VerticalAlignment.Baseline);
                textSymbol.FontWeight = Esri.ArcGISRuntime.Symbology.FontWeight.Bold;
                //textSymbol.BackgroundColor = Colors.Maroon;
                //textSymbol.Angle = Math.Atan2(line.Extent.YMax - line.Extent.YMin, line.Extent.XMax - line.Extent.XMin) * 180.0 / Math.PI;
                var textGraphic = new Graphic(textPoint, textSymbol);
                MyOverlay.Graphics.Add(textGraphic);
            }
        }
Ejemplo n.º 13
0
        public static async Task <Geometry> DrawFreeHandAsync(SceneView sceneView, System.Threading.CancellationToken cancellationToken)
        {
            bool            isDrawing       = false;
            var             tcs             = new TaskCompletionSource <Polyline>();
            PolylineBuilder polylineBuilder = new PolylineBuilder(sceneView.SpatialReference);
            var             sketchlayer     = CreateSketchLayer(sceneView);
            Graphic         lineGraphic     = new Graphic()
            {
                Symbol = DefaultLineSymbol
            };
            Graphic lineMoveGraphic = new Graphic()
            {
                Symbol = DefaultLineMoveSymbol
            };

            sketchlayer.Graphics.AddRange(new Graphic[] { lineGraphic, lineMoveGraphic });
            PointerEventHandler onPointerPressed = ((s, e) =>
            {
                isDrawing = true;
                sceneView.ManipulationMode = ManipulationModes.None;
            });

            sceneView.PointerPressed += onPointerPressed;
            PointerEventHandler onPointerMoved = ((s, e) =>
            {
                if (isDrawing && e != null)
                {
                    var position = sceneView.ScreenToLocation(e.GetCurrentPoint(sceneView).Position);
                    if (position != null)
                    {
                        polylineBuilder.AddPoint(position);
                        if (polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count >= 1)
                        {
                            lineGraphic.Geometry = polylineBuilder.ToGeometry();
                        }
                    }
                }
            });

            sceneView.PointerMoved += onPointerMoved;
            PointerEventHandler onPointerReleased = ((s, e) =>
            {
                if (isDrawing && polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count >= 1)
                {
                    tcs.SetResult(polylineBuilder.ToGeometry());
                }
                isDrawing = false;
            });

            sceneView.PointerReleased += onPointerReleased;
            Action cleanup = () =>
            {
                sceneView.GraphicsOverlays.Remove(sketchlayer);
                sceneView.ManipulationMode = Windows.UI.Xaml.Input.ManipulationModes.All;
                sceneView.PointerPressed  -= onPointerPressed;
                sceneView.PointerMoved    -= onPointerMoved;
                sceneView.PointerReleased -= onPointerReleased;
            };

            cancellationToken.Register(() => tcs.SetCanceled());

            Polyline result = null;

            try
            {
                result = await tcs.Task;
            }
            catch (TaskCanceledException e)
            {
                throw new DrawCanceledExeption("Draw operation was canceled", e, polylineBuilder.ToGeometry());
            }
            finally
            {
                cleanup();
            }
            return(result);
        }
		public static async Task<Polyline> DrawPolylineAsync(SceneView sceneView, System.Threading.CancellationToken cancellationToken)
		{
			var tcs = new TaskCompletionSource<Polyline>();
			PolylineBuilder polylineBuilder = new PolylineBuilder(sceneView.SpatialReference);
			var sketchlayer = CreateSketchLayer(sceneView);
			Graphic lineGraphic = new Graphic() { Symbol = DefaultLineSymbol };
			Graphic lineMoveGraphic = new Graphic() { Symbol = DefaultLineMoveSymbol };
			sketchlayer.Graphics.AddRange(new Graphic[] { lineGraphic, lineMoveGraphic });
			Action cleanupEvents = SetUpHandlers(sceneView,
				(p) => //On mouse move, move completion line around
				{
					if (p != null && polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count > 0)
					{
						lineMoveGraphic.Geometry = new Polyline(new MapPoint[] { polylineBuilder.Parts[0].Last().EndPoint, p });
					}
				},
				(p) => //On tap add a vertex
				{
					if (p != null)
					{
						polylineBuilder.AddPoint(p);
						if (polylineBuilder.Parts.Count > 0 && polylineBuilder.Parts[0].Count >= 1)
							lineGraphic.Geometry = polylineBuilder.ToGeometry();
					}
				},
				(p) => //View tapped - completes task and returns point
				{
					tcs.SetResult(polylineBuilder.ToGeometry());
				});
			Action cleanup = () =>
			{
				cleanupEvents();
				sceneView.GraphicsOverlays.Remove(sketchlayer);
			};
			cancellationToken.Register(() => tcs.SetCanceled());

			Polyline result = null;
			try
			{
				result = await tcs.Task;
			}
			finally
			{
				cleanup();
			}
			return result;
		}