private async Task DownloadMapAreaAsync(PreplannedMapArea mapArea) { // Close the current mobile package. _mobileMapPackage?.Close(); // Set up UI for downloading. ProgressView.Progress = 0; BusyText.Text = "Downloading map area..."; BusyIndicator.IsVisible = true; // Create folder path where the map package will be downloaded. string path = Path.Combine(_offlineDataFolder, mapArea.PortalItem.Title); // If the area is already downloaded, open it. if (Directory.Exists(path)) { try { // Open the offline map package. _mobileMapPackage = await MobileMapPackage.OpenAsync(path); // Open the first map in the package. MyMapView.Map = _mobileMapPackage.Maps.First(); // Update the UI. BusyText.Text = string.Empty; BusyIndicator.IsVisible = false; MessageLabel.Text = "Opened offline area."; return; } catch (Exception e) { Debug.WriteLine(e); await Application.Current.MainPage.DisplayAlert("Couldn't open offline area. Proceeding to take area offline.", e.Message, "OK"); } } // Create download parameters. DownloadPreplannedOfflineMapParameters parameters = await _offlineMapTask.CreateDefaultDownloadPreplannedOfflineMapParametersAsync(mapArea); // Set the update mode to not receive updates. parameters.UpdateMode = PreplannedUpdateMode.NoUpdates; // Create the job. DownloadPreplannedOfflineMapJob job = _offlineMapTask.DownloadPreplannedOfflineMap(parameters, path); // Set up event to update the progress bar while the job is in progress. job.ProgressChanged += OnJobProgressChanged; try { // Download the area. DownloadPreplannedOfflineMapResult results = await job.GetResultAsync(); // Set the current mobile map package. _mobileMapPackage = results.MobileMapPackage; // Handle possible errors and show them to the user. if (results.HasErrors) { // Accumulate all layer and table errors into a single message. string errors = ""; foreach (KeyValuePair <Layer, Exception> layerError in results.LayerErrors) { errors = $"{errors}\n{layerError.Key.Name} {layerError.Value.Message}"; } foreach (KeyValuePair <FeatureTable, Exception> tableError in results.TableErrors) { errors = $"{errors}\n{tableError.Key.TableName} {tableError.Value.Message}"; } // Show the message. await Application.Current.MainPage.DisplayAlert("Warning!", errors, "OK"); } // Show the downloaded map. MyMapView.Map = results.OfflineMap; // Update the UI. ShowOnlineButton.IsEnabled = true; MessageLabel.Text = "Downloaded preplanned area."; DownloadButton.Text = "Display"; } catch (Exception ex) { // Report any errors. Debug.WriteLine(ex); await Application.Current.MainPage.DisplayAlert("Downloading map area failed.", ex.Message, "OK"); } finally { BusyText.Text = string.Empty; BusyIndicator.IsVisible = false; } }
private async Task DownloadMapAreaAsync(PreplannedMapArea mapArea) { // Set up UI for downloading. ProgressBar.IsIndeterminate = false; ProgressBar.Value = 0; BusyText.Text = "Downloading map area..."; BusyIndicator.Visibility = Visibility.Visible; // Create folder path where the map package will be downloaded. string path = Path.Combine(_offlineDataFolder, mapArea.PortalItem.Title); // If the area is already downloaded, open it. if (Directory.Exists(path)) { try { // Open the offline map package. MobileMapPackage localMapArea = await MobileMapPackage.OpenAsync(path); // Display the first map. MyMapView.Map = localMapArea.Maps.First(); // Update the UI. BusyText.Text = string.Empty; BusyIndicator.Visibility = Visibility.Collapsed; MessageLabel.Text = "Opened offline area."; return; } catch (Exception e) { Debug.WriteLine(e); await new MessageDialog(e.Message, "Couldn't open offline area. Proceeding to take area offline.").ShowAsync(); } } // Create download parameters. DownloadPreplannedOfflineMapParameters parameters = await _offlineMapTask.CreateDefaultDownloadPreplannedOfflineMapParametersAsync(mapArea); // Create the job. DownloadPreplannedOfflineMapJob job = _offlineMapTask.DownloadPreplannedOfflineMap(parameters, path); // Set up event to update the progress bar while the job is in progress. job.ProgressChanged += OnJobProgressChanged; try { // Download the area. DownloadPreplannedOfflineMapResult results = await job.GetResultAsync(); // Handle possible errors and show them to the user. if (results.HasErrors) { // Accumulate all layer and table errors into a single message. string errors = ""; foreach (KeyValuePair <Layer, Exception> layerError in results.LayerErrors) { errors = $"{errors}\n{layerError.Key.Name} {layerError.Value.Message}"; } foreach (KeyValuePair <FeatureTable, Exception> tableError in results.TableErrors) { errors = $"{errors}\n{tableError.Key.TableName} {tableError.Value.Message}"; } // Show the message. await new MessageDialog(errors, "Warning!").ShowAsync(); } // Show the downloaded map. MyMapView.Map = results.OfflineMap; // Update the UI. MessageLabel.Text = "Downloaded preplanned area."; } catch (Exception ex) { // Report any errors. Debug.WriteLine(ex); await new MessageDialog(ex.Message, "Downloading map area failed.").ShowAsync(); } finally { BusyText.Text = string.Empty; BusyIndicator.Visibility = Visibility.Collapsed; } }
private async void DownloadMapAreaAsync(PreplannedMapArea mapArea) { // Close the current mobile package. _mobileMapPackage?.Close(); // Set up UI for downloading. _activityIndicator.StartAnimating(); _helpLabel.Text = "Downloading map area..."; // Create folder path where the map package will be downloaded. string path = Path.Combine(_offlineDataFolder, mapArea.PortalItem.Title); // If the area is already downloaded, open it. if (Directory.Exists(path)) { try { _mobileMapPackage = await MobileMapPackage.OpenAsync(path); _myMapView.Map = _mobileMapPackage.Maps.First(); _helpLabel.Text = "Opened offline area."; _showOnlineButton.Enabled = true; _activityIndicator.StopAnimating(); return; } catch (Exception e) { Debug.WriteLine(e); new UIAlertView("Couldn't open offline map area. Proceeding to take area offline.", e.ToString(), (IUIAlertViewDelegate)null, "OK", null).Show(); } } // Create download parameters. DownloadPreplannedOfflineMapParameters parameters = await _offlineMapTask.CreateDefaultDownloadPreplannedOfflineMapParametersAsync(mapArea); // Set the update mode to not receive updates. parameters.UpdateMode = PreplannedUpdateMode.NoUpdates; // Create the job. DownloadPreplannedOfflineMapJob job = _offlineMapTask.DownloadPreplannedOfflineMap(parameters, path); // Set up event to update the progress bar while the job is in progress. job.ProgressChanged += Job_ProgressChanged; try { // Download the area. DownloadPreplannedOfflineMapResult results = await job.GetResultAsync(); // Set the current mobile map package. _mobileMapPackage = results.MobileMapPackage; // Handle possible errors and show them to the user. if (results.HasErrors) { // Accumulate all layer and table errors into a single message. string errors = ""; foreach (KeyValuePair <Layer, Exception> layerError in results.LayerErrors) { errors = $"{errors}\n{layerError.Key.Name} {layerError.Value.Message}"; } foreach (KeyValuePair <FeatureTable, Exception> tableError in results.TableErrors) { errors = $"{errors}\n{tableError.Key.TableName} {tableError.Value.Message}"; } // Show the message. new UIAlertView("Warning!", errors, (IUIAlertViewDelegate)null, "OK", null).Show(); } // Show the downloaded map. _myMapView.Map = results.OfflineMap; } catch (Exception ex) { // Report any errors. Debug.WriteLine(ex); new UIAlertView("Downloading map area failed", ex.ToString(), (IUIAlertViewDelegate)null, "OK", null).Show(); } finally { _activityIndicator.StopAnimating(); _helpLabel.Text = "Map area offline."; _showOnlineButton.Enabled = true; } }