// Request geometry and new message to the layer
		private async void AddSymbolAsync(SymbolViewModel symbolViewModel)
		{
			try
			{
				Dictionary<string, string> values = (Dictionary<string, string>)symbolViewModel.Model.Values;
				string geometryControlType = values["GeometryType"];
				DrawShape requestedShape = DrawShape.Point;

				switch (geometryControlType)
				{
					case "Point":
						requestedShape = DrawShape.Point;
						break;
					case "Line":
						requestedShape = DrawShape.Polyline;
						break;
					case "Polygon":
						requestedShape = DrawShape.Polygon;
						break;
					case "Circle":
						requestedShape = DrawShape.Circle;
						break;
					case "Rectangular":
						requestedShape = DrawShape.Rectangle;
						break;
					default:
						await new MessageDialog("Selected symbol is not supported in this sample", "Symbol Dictionary Search Sample").ShowAsync();
						return;
				}
				while (true)
				{
					Esri.ArcGISRuntime.Geometry.Geometry geometry = null;

					try
					{
						geometry = await MyMapView.Editor.RequestShapeAsync(requestedShape, null, null);
					}
					catch { }

					if (geometry == null)
						return;

					// Create a new message
					Message msg = new Message();

					// Set the ID and other parts of the message
					msg.Id = Guid.NewGuid().ToString();
					msg.Add("_type", "position_report");
					msg.Add("_action", "update");
					msg.Add("_wkid", MyMapView.SpatialReference.Wkid.ToString());
					msg.Add("sic", _selectedSymbol.SymbolID);
					msg.Add("uniquedesignation", "1");

					// Construct the Control Points based on the geometry type of the drawn geometry.
					switch (requestedShape)
					{
						case DrawShape.Point:
							MapPoint point = geometry as MapPoint;
							msg.Add("_control_points", point.X.ToString(CultureInfo.InvariantCulture) + "," + point.Y.ToString(CultureInfo.InvariantCulture));
							break;
						case DrawShape.Polygon:
							Polygon polygon = geometry as Polygon;
							string cpts = string.Empty;
							foreach (var pt in polygon.Parts[0].GetPoints())
								cpts += ";" + pt.X.ToString(CultureInfo.InvariantCulture) + "," + pt.Y.ToString(CultureInfo.InvariantCulture);
							msg.Add("_control_points", cpts);
							break;
						case DrawShape.Polyline:
							Polyline polyline = geometry as Polyline;
							cpts = string.Empty;
							foreach (var pt in polyline.Parts[0].GetPoints())
								cpts += ";" + pt.X.ToString(CultureInfo.InvariantCulture) + "," + pt.Y.ToString(CultureInfo.InvariantCulture);
							msg.Add("_control_points", cpts);
							break;
					}

					// Process the message
					if (!_messageLayer.ProcessMessage(msg))
						await new MessageDialog("Failed to process message.", "Symbol Dictionary Search Sample").ShowAsync();

					btnClearMap.IsEnabled = true;
				}
			}
			catch (Exception ex)
			{
				var _x = new MessageDialog(ex.Message, "Symbol Dictionary Search Sample").ShowAsync();
			}
		}
Exemplo n.º 2
0
        // Request geometry and new message to the layer
        private async void AddSymbolAsync(SymbolViewModel symbolViewModel)
        {
            try
            {
                Dictionary <string, string> values = (Dictionary <string, string>)symbolViewModel.Model.Values;
                string    geometryControlType      = values["GeometryType"];
                DrawShape requestedShape           = DrawShape.Point;

                switch (geometryControlType)
                {
                case "Point":
                    requestedShape = DrawShape.Point;
                    break;

                case "Line":
                    requestedShape = DrawShape.Polyline;
                    break;

                case "Polygon":
                    requestedShape = DrawShape.Polygon;
                    break;

                case "Circle":
                    requestedShape = DrawShape.Circle;
                    break;

                case "Rectangular":
                    requestedShape = DrawShape.Rectangle;
                    break;

                default:
                    await new MessageDialog("Selected symbol is not supported in this sample", "Symbol Dictionary Search Sample").ShowAsync();
                    return;
                }
                while (true)
                {
                    Esri.ArcGISRuntime.Geometry.Geometry geometry = null;

                    try
                    {
                        geometry = await MyMapView.Editor.RequestShapeAsync(requestedShape, null, null);
                    }
                    catch { }

                    if (geometry == null)
                    {
                        return;
                    }

                    // Create a new message
                    Message msg = new Message();

                    // Set the ID and other parts of the message
                    msg.Id = Guid.NewGuid().ToString();
                    msg.Add("_type", "position_report");
                    msg.Add("_action", "update");
                    msg.Add("_wkid", MyMapView.SpatialReference.Wkid.ToString());
                    msg.Add("sic", _selectedSymbol.SymbolID);
                    msg.Add("uniquedesignation", "1");

                    // Construct the Control Points based on the geometry type of the drawn geometry.
                    switch (requestedShape)
                    {
                    case DrawShape.Point:
                        MapPoint point = geometry as MapPoint;
                        msg.Add("_control_points", point.X.ToString(CultureInfo.InvariantCulture) + "," + point.Y.ToString(CultureInfo.InvariantCulture));
                        break;

                    case DrawShape.Polygon:
                        Polygon polygon = geometry as Polygon;
                        string  cpts    = string.Empty;
                        foreach (var pt in polygon.Parts[0].GetPoints())
                        {
                            cpts += ";" + pt.X.ToString(CultureInfo.InvariantCulture) + "," + pt.Y.ToString(CultureInfo.InvariantCulture);
                        }
                        msg.Add("_control_points", cpts);
                        break;

                    case DrawShape.Polyline:
                        Polyline polyline = geometry as Polyline;
                        cpts = string.Empty;
                        foreach (var pt in polyline.Parts[0].GetPoints())
                        {
                            cpts += ";" + pt.X.ToString(CultureInfo.InvariantCulture) + "," + pt.Y.ToString(CultureInfo.InvariantCulture);
                        }
                        msg.Add("_control_points", cpts);
                        break;
                    }

                    // Process the message
                    if (!_messageLayer.ProcessMessage(msg))
                    {
                        await new MessageDialog("Failed to process message.", "Symbol Dictionary Search Sample").ShowAsync();
                    }

                    btnClearMap.IsEnabled = true;
                }
            }
            catch (Exception ex)
            {
                var _x = new MessageDialog(ex.Message, "Symbol Dictionary Search Sample").ShowAsync();
            }
        }