// Logic that is called when a template is needed for a list view item. protected override DataTemplate OnSelectTemplate(object item, BindableObject container) { DataTemplate selectedTemplate = null; // Get the current list item being created. Return if the item is null. DatumTransformationListBoxItem transformationItem = item as DatumTransformationListBoxItem; if (transformationItem == null) { return(null); } // Read the IsMissingProjectionEngineFiles property to select the available or unavailable data template. if (transformationItem.TransformationObject.IsMissingProjectionEngineFiles) { selectedTemplate = _unavailableTransformTemplate; } else if (!transformationItem.TransformationObject.IsMissingProjectionEngineFiles) { selectedTemplate = _availableTransformTemplate; } // See if this is the default transformation. if (transformationItem.IsDefault) { selectedTemplate = _defaultTransformTemplate; } // Return the selected template. return(selectedTemplate); }
// 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); // Reset list. SuitableTransformationsList.Clear(); // 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) }; SuitableTransformationsList.Add(item); } }
private void TransformationsListBox_ItemSelected(object sender, SelectedItemChangedEventArgs e) { // Get the selected transform from the list box. Return if there isn't a selected item. DatumTransformationListBoxItem selectedListBoxItem = TransformationsListBox.SelectedItem as DatumTransformationListBoxItem; if (selectedListBoxItem == null) { return; } // Get the datum transformation object from the list box item. DatumTransformation selectedTransform = selectedListBoxItem.TransformationObject; 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, Colors.Red, 15); // Create the point graphic and add it to the overlay. _projectedPointGraphic = new Graphic(projectedPoint, projectedPointMarker); _pointsOverlay.Graphics.Add(_projectedPointGraphic); } MessagesTextBox.Text = "Projected point using transform: " + selectedTransform.Name; } catch (ArcGISRuntimeException ex) { // Exception if a transformation is missing grid files. MessagesTextBox.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; } } }