// Handle selection events in the transformation picker. private void TransformationsPicker_TransformationSelected(object sender, TransformationSelectionEventArgs e) { // Get the selected transform from the event arguments. Return if none is selected. DatumTransformation selectedTransform = e.Transformation; if (selectedTransform == null) { return; } try { // Project the original point using the selected transform. MapPoint projectedPoint = (MapPoint)GeometryEngine.Project(_originalPoint, _myMapView.SpatialReference, selectedTransform); // Update the projected graphic (if it already exists), create it otherwise. if (_projectedPointGraphic != null) { _projectedPointGraphic.Geometry = projectedPoint; } else { // Create a symbol to represent the projected point (a cross to ensure both markers are visible). SimpleMarkerSymbol projectedPointMarker = new SimpleMarkerSymbol(SimpleMarkerSymbolStyle.Cross, Color.Red, 15); // Create the point graphic and add it to the overlay. _projectedPointGraphic = new Graphic(projectedPoint, projectedPointMarker); _pointsOverlay.Graphics.Add(_projectedPointGraphic); } _messagesTextView.Text = "Projected point using transform: " + selectedTransform.Name; } catch (ArcGISRuntimeException ex) { // Exception if a transformation is missing grid files. _messagesTextView.Text = "Error using selected transformation: " + ex.Message; // Remove the projected point graphic (if it exists). if (_projectedPointGraphic != null && _pointsOverlay.Graphics.Contains(_projectedPointGraphic)) { _pointsOverlay.Graphics.Remove(_projectedPointGraphic); _projectedPointGraphic = null; } } }
/// <summary> /// Will calculate a /// </summary> /// <param name="inX"></param> /// <param name="inY"></param> /// <returns></returns> public MapPoint CalculateGeographicCoordinate(int easting, int northing, SpatialReference inSR, SpatialReference outSR) { //Variables MapPoint geoPoint = new MapPoint(0, 0, outSR); //Transform if (easting != 0.0 && northing != 0.0) { if (outSR != null) { DatumTransformation datumTransfo = null; if ((outSR.Wkid > 26900 && outSR.Wkid < 27000)) { outSR = new Esri.ArcGISRuntime.Geometry.SpatialReference(4617); } else { datumTransfo = TransformationCatalog.GetTransformation(inSR, outSR); } MapPoint proPoint = new MapPoint(easting, northing, inSR); //Validate if transformation is needed. if (datumTransfo != null) { geoPoint = (MapPoint)Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(proPoint, outSR, datumTransfo); } else { geoPoint = (MapPoint)Esri.ArcGISRuntime.Geometry.GeometryEngine.Project(proPoint, outSR); } } } return(geoPoint); }
// Function to get suitable datum transformations for the specified input and output spatial references. private void GetSuitableTransformations(SpatialReference inSpatialRef, SpatialReference outSpatialRef, bool considerExtent) { // Get suitable transformations. Use the current extent to evaluate suitability, if requested. IReadOnlyList <DatumTransformation> transformations; if (considerExtent) { Envelope currentExtent = MyMapView.GetCurrentViewpoint(ViewpointType.BoundingGeometry).TargetGeometry as Envelope; transformations = TransformationCatalog.GetTransformationsBySuitability(inSpatialRef, outSpatialRef, currentExtent); } else { transformations = TransformationCatalog.GetTransformationsBySuitability(inSpatialRef, outSpatialRef); } // Get the default transformation for the specified input and output spatial reference. DatumTransformation defaultTransform = TransformationCatalog.GetTransformation(inSpatialRef, outSpatialRef); List <DatumTransformationListBoxItem> transformationItems = new List <DatumTransformationListBoxItem>(); // Wrap the transformations in a class that includes a boolean to indicate if it's the default transformation. foreach (DatumTransformation transform in transformations) { DatumTransformationListBoxItem item = new DatumTransformationListBoxItem(transform) { IsDefault = (transform.Name == defaultTransform.Name) }; transformationItems.Add(item); } // Set the transformation list property that the list box binds to. SuitableTransformationsList = transformationItems; }
// Constructor that takes the DatumTransformation object to wrap. public DatumTransformationListBoxItem(DatumTransformation transformation) { TransformationObject = transformation; }
public TransformationSelectionEventArgs(DatumTransformation transformation) { Transformation = transformation; }
// Constructor that takes the datum transformations list to display. public TransformationsPickerModel(IReadOnlyList <DatumTransformation> transformationList, DatumTransformation defaultTransform) { _datumTransformations = transformationList; _defaultTransformation = defaultTransform; }