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");; } } } }
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()); }
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")); }
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); }
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(); }
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); }
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()); }
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()); }
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); }
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); } }
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; }