private void Initialize() { // Create a scene with elevation. var sceneSurface = new Surface(); sceneSurface.ElevationSources.Add(new ArcGISTiledElevationSource(_worldElevationService)); var myScene = new Scene(Basemap.CreateImagery()) { BaseSurface = sceneSurface }; // Create and add a building layer. var buildingsLayer = new ArcGISSceneLayer(_buildingService); myScene.OperationalLayers.Add(buildingsLayer); // Create and add an analysis overlay. var measureAnalysisOverlay = new AnalysisOverlay(); _mySceneView.AnalysisOverlays.Add(measureAnalysisOverlay); // Create an initial distance measurement and show it. var start = new MapPoint(-4.494677, 48.384472, 24.772694, SpatialReferences.Wgs84); var end = new MapPoint(-4.495646, 48.384377, 58.501115, SpatialReferences.Wgs84); _distanceMeasurement = new LocationDistanceMeasurement(start, end); measureAnalysisOverlay.Analyses.Add(_distanceMeasurement); _mySceneView.SetViewpointCamera(new Camera(start, 200, 45, 45, 0)); // Keep the UI updated. _distanceMeasurement.MeasurementChanged += (o, e) => { // This is needed because measurement change events occur on a non-UI thread and this code accesses UI object. RunOnUiThread(() => { // Update the label with new values in the format {value} {unit system}. _directLabel.Text = $"{_distanceMeasurement.DirectDistance.Value:F} {_distanceMeasurement.DirectDistance.Unit.Abbreviation}"; _verticalLabel.Text = $"{_distanceMeasurement.VerticalDistance.Value:F} {_distanceMeasurement.VerticalDistance.Unit.Abbreviation}"; _horizontalLabel.Text = $"{_distanceMeasurement.HorizontalDistance.Value:F} {_distanceMeasurement.HorizontalDistance.Unit.Abbreviation}"; }); }; // Update the unit spinner with the options. _unitSpinner.Adapter = new ArrayAdapter <string>(this, Android.Resource.Layout.SimpleSpinnerItem, Enum.GetNames(typeof(UnitSystem))); _unitSpinner.ItemSelected += (sender, args) => { UnitSystem[] values = (UnitSystem[])Enum.GetValues(typeof(UnitSystem)); _distanceMeasurement.UnitSystem = values[args.Position]; }; // Show the scene in the view. _mySceneView.Scene = myScene; // Subscribe to tap events to enable updating the measurement. _mySceneView.GeoViewTapped += MySceneView_GeoViewTapped; }
private void Initialize() { // Create a scene with elevation. Surface sceneSurface = new Surface(); sceneSurface.ElevationSources.Add(new ArcGISTiledElevationSource(_worldElevationService)); Scene myScene = new Scene(Basemap.CreateTopographic()) { BaseSurface = sceneSurface }; // Create and add a building layer. ArcGISSceneLayer buildingsLayer = new ArcGISSceneLayer(_buildingService); myScene.OperationalLayers.Add(buildingsLayer); // Create and add an analysis overlay. AnalysisOverlay measureAnalysisOverlay = new AnalysisOverlay(); _mySceneView.AnalysisOverlays.Add(measureAnalysisOverlay); // Create an initial distance measurement and show it. MapPoint start = new MapPoint(-4.494677, 48.384472, 24.772694, SpatialReferences.Wgs84); MapPoint end = new MapPoint(-4.495646, 48.384377, 58.501115, SpatialReferences.Wgs84); _distanceMeasurement = new LocationDistanceMeasurement(start, end); measureAnalysisOverlay.Analyses.Add(_distanceMeasurement); // Keep the UI updated. _distanceMeasurement.MeasurementChanged += MeasurementChanged; // Show the scene in the view. _mySceneView.Scene = myScene; _mySceneView.SetViewpointCamera(new Camera(start, 200, 45, 45, 0)); }
private void Initialize() { // Create a scene with elevation. Surface sceneSurface = new Surface(); sceneSurface.ElevationSources.Add(new ArcGISTiledElevationSource(_worldElevationService)); Scene myScene = new Scene(Basemap.CreateTopographic()) { BaseSurface = sceneSurface }; // Create and add a building layer. ArcGISSceneLayer buildingsLayer = new ArcGISSceneLayer(_buildingService); myScene.OperationalLayers.Add(buildingsLayer); // Create and add an analysis overlay. AnalysisOverlay measureAnalysisOverlay = new AnalysisOverlay(); MySceneView.AnalysisOverlays.Add(measureAnalysisOverlay); // Create an initial distance measurement and show it. MapPoint start = new MapPoint(-4.494677, 48.384472, 24.772694, SpatialReferences.Wgs84); MapPoint end = new MapPoint(-4.495646, 48.384377, 58.501115, SpatialReferences.Wgs84); _distanceMeasurement = new LocationDistanceMeasurement(start, end); measureAnalysisOverlay.Analyses.Add(_distanceMeasurement); // Keep the UI updated. _distanceMeasurement.MeasurementChanged += async(o, e) => { // This is needed because measurement change events occur on a non-UI thread and this code accesses UI object. DispatcherQueue.TryEnqueue(Microsoft.UI.Dispatching.DispatcherQueuePriority.Normal, () => { // Update the labels with new values in the format {value} {unit system}. DirectMeasureTextBlock.Text = $"{_distanceMeasurement.DirectDistance.Value:F} {_distanceMeasurement.DirectDistance.Unit.Abbreviation}"; VerticalMeasureTextBlock.Text = $"{_distanceMeasurement.VerticalDistance.Value:F} {_distanceMeasurement.VerticalDistance.Unit.Abbreviation}"; HorizontalMeasureTextBlock.Text = $"{_distanceMeasurement.HorizontalDistance.Value:F} {_distanceMeasurement.HorizontalDistance.Unit.Abbreviation}"; }); }; // Configure the unit system selection box. UnitSystemCombo.ItemsSource = Enum.GetValues(typeof(UnitSystem)).OfType <UnitSystem>().Select(e => e.ToString()); UnitSystemCombo.SelectedItem = _distanceMeasurement.UnitSystem; // Update the unit system selection. UnitSystemCombo.SelectionChanged += (sender, args) => { _distanceMeasurement.UnitSystem = Enum.Parse <UnitSystem>(UnitSystemCombo.SelectedItem as string); }; // Show the scene in the view. MySceneView.Scene = myScene; MySceneView.SetViewpointCamera(new Camera(start, 200, 0, 45, 0)); // Enable the 'New measurement' button. NewMeasureButton.IsEnabled = true; }
private void Initialize() { // Create a scene with elevation. Surface sceneSurface = new Surface(); sceneSurface.ElevationSources.Add(new ArcGISTiledElevationSource(_worldElevationService)); Scene myScene = new Scene(Basemap.CreateImagery()) { BaseSurface = sceneSurface }; // Create and add a building layer. ArcGISSceneLayer buildingsLayer = new ArcGISSceneLayer(_buildingService); myScene.OperationalLayers.Add(buildingsLayer); // Create and add an analysis overlay. AnalysisOverlay measureAnalysisOverlay = new AnalysisOverlay(); _mySceneView.AnalysisOverlays.Add(measureAnalysisOverlay); // Create an initial distance measurement and show it. MapPoint start = new MapPoint(-4.494677, 48.384472, 24.772694, SpatialReferences.Wgs84); MapPoint end = new MapPoint(-4.495646, 48.384377, 58.501115, SpatialReferences.Wgs84); _distanceMeasurement = new LocationDistanceMeasurement(start, end); measureAnalysisOverlay.Analyses.Add(_distanceMeasurement); _mySceneView.SetViewpointCamera(new Camera(start, 200, 45, 45, 0)); // Keep the UI updated. _distanceMeasurement.MeasurementChanged += (o, e) => { // This is needed because measurement change events occur on a non-UI thread and this code accesses UI object. BeginInvokeOnMainThread(() => { // Update the labels with new values in the format {value} {unit system}. string direct = $"{_distanceMeasurement.DirectDistance.Value:F} {_distanceMeasurement.DirectDistance.Unit.Abbreviation}"; string vertical = $"{_distanceMeasurement.VerticalDistance.Value:F} {_distanceMeasurement.VerticalDistance.Unit.Abbreviation}"; string horizontal = $"{_distanceMeasurement.HorizontalDistance.Value:F} {_distanceMeasurement.HorizontalDistance.Unit.Abbreviation}"; _resultLabel.Text = $"Direct: {direct}, V: {vertical}, H: {horizontal}"; }); }; // Show the scene in the view. _mySceneView.Scene = myScene; // Subscribe to tap events to enable updating the measurement. _mySceneView.GeoViewTapped += MySceneView_GeoViewTapped; }
private void Initialize() { // Create a scene with elevation. var sceneSurface = new Surface(); sceneSurface.ElevationSources.Add(new ArcGISTiledElevationSource(_worldElevationService)); var myScene = new Scene(Basemap.CreateImagery()) { BaseSurface = sceneSurface }; // Create and add a building layer. var buildingsLayer = new ArcGISSceneLayer(_buildingService); myScene.OperationalLayers.Add(buildingsLayer); // Create and add an analysis overlay. var measureAnalysisOverlay = new AnalysisOverlay(); MySceneView.AnalysisOverlays.Add(measureAnalysisOverlay); // Create an initial distance measurement and show it. var start = new MapPoint(-4.494677, 48.384472, 24.772694, SpatialReferences.Wgs84); var end = new MapPoint(-4.495646, 48.384377, 58.501115, SpatialReferences.Wgs84); _distanceMeasurement = new LocationDistanceMeasurement(start, end); measureAnalysisOverlay.Analyses.Add(_distanceMeasurement); MySceneView.SetViewpointCamera(new Camera(start, 200, 0, 45, 0)); // Keep the UI updated. _distanceMeasurement.MeasurementChanged += (o, e) => { // This is needed because measurement change events occur on a non-UI thread and this code accesses UI object. Device.BeginInvokeOnMainThread(() => { // Update the labels with new values in the format {value} {unit system}. DirectMeasureLabel.Text = $"{_distanceMeasurement.DirectDistance.Value:F} {_distanceMeasurement.DirectDistance.Unit.Abbreviation}"; VerticalMeasureLabel.Text = $"{_distanceMeasurement.VerticalDistance.Value:F} {_distanceMeasurement.VerticalDistance.Unit.Abbreviation}"; HorizontalMeasureLabel.Text = $"{_distanceMeasurement.HorizontalDistance.Value:F} {_distanceMeasurement.HorizontalDistance.Unit.Abbreviation}"; }); }; // Configure the unit system selection box. UnitSystemCombo.ItemsSource = Enum.GetValues(typeof(UnitSystem)); UnitSystemCombo.SelectedItem = _distanceMeasurement.UnitSystem; // Update the unit system selection. UnitSystemCombo.SelectedIndexChanged += (sender, args) => { _distanceMeasurement.UnitSystem = (UnitSystem)UnitSystemCombo.SelectedItem; }; // Show the scene in the view. MySceneView.Scene = myScene; // Subscribe to tap events to enable updating the measurement. MySceneView.GeoViewTapped += MySceneView_GeoViewTapped; }