/// <summary> /// This is an alternate method of implementing a Query. /// It uses the GetUserContentAsync method to return the items in the current user's content. /// </summary> /// <returns></returns> private async Task <string> QueryUserContentImpl() { var portal = ArcGISPortalManager.Current.GetActivePortal(); string userName = ArcGISPortalManager.Current.GetActivePortal().GetSignOnUsername(); //Get the content for the signed on user. //Users executing this query must be signed on or an exception will be thrown. var results = await ArcGISPortalExtensions.GetUserContentAsync(portal, userName); //Check if a specific item exits var itemExists = results.PortalItems.Any(p => p.Tags.Contains("UploadVtpkToAgol Demo")); if (!itemExists) { return($@"Unable to find uploaded item with query: {portal.ToString()}sharing/rest/content/users/{userName}"); } // Create an item from the search results var myItem = results.PortalItems.FirstOrDefault(i => i.Tags.Contains("UploadVtpkToAgol Demo")); var currentItem = ItemFactory.Instance.Create(myItem.ID, ItemFactory.ItemType.PortalItem); var lyrParams = new LayerCreationParams(currentItem); // Finally add the Vextor tile package to the map // if we have an item that can be turned into a layer // add it to the map if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, MapView.Active.Map); } return($@"Downloaded this item: {myItem.Name} [Type: {myItem.Type}] to ArcGIS Online and added the item to the Map"); }
public async void Examples() { #region Create a Scene Layer var sceneLayerUrl = @"https://myportal.com/server/rest/services/Hosted/SceneLayerServiceName/SceneServer"; //portal items also ok as long as the portal is the current active portal... //var sceneLayerUrl = @"https://myportal.com/home/item.html?id=123456789abcdef1234567890abcdef0"; await QueuedTask.Run(() => { //Create with initial visibility set to false. Add to current scene var createparams = new LayerCreationParams(new Uri(sceneLayerUrl, UriKind.Absolute)) { IsVisible = false }; //cast to specific type of scene layer being created - in this case FeatureSceneLayer var sceneLayer = LayerFactory.Instance.CreateLayer <Layer>(createparams, MapView.Active.Map) as FeatureSceneLayer; //or...specify the cast directly var sceneLayer2 = LayerFactory.Instance.CreateLayer <FeatureSceneLayer>(createparams, MapView.Active.Map); //ditto for BuildingSceneLayer, PointCloudSceneLayer, IntegratedMeshSceneLayer //... }); #endregion }
private async Task <string> QueryImpl() { var portal = ArcGISPortalManager.Current.GetActivePortal(); string userName = ArcGISPortalManager.Current.GetActivePortal().GetSignOnUsername(); //Searching for Vector tile packages in the current user's content var pqp = PortalQueryParameters.CreateForItemsOfTypeWithOwner(PortalItemType.VectorTilePackage, userName, "tags: UploadVtpkToAgol Demo"); //Execute to return a result set PortalQueryResultSet <PortalItem> results = await ArcGISPortalExtensions.SearchForContentAsync(portal, pqp); if (results.Results.Count == 0) { return($@"Unable to find uploaded item with query: {pqp.Query}"); } // Create an item from the search results string itemId = results.Results[0].ID; var currentItem = ItemFactory.Instance.Create(itemId, ItemFactory.ItemType.PortalItem); var lyrParams = new LayerCreationParams(currentItem); // Finally add the feature service to the map // if we have an item that can be turned into a layer // add it to the map if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, MapView.Active.Map); } return($@"Downloaded this item: {results.Results[0].Name} [Type: {results.Results[0].Type}] to ArcGIS Online and added the item to the Map"); }
protected async override void OnClick() { //Get the Hydrology layer from the TOC var hydrologyLyr = MapView.Active.Map.GetLayersAsFlattenedList().OfType <FeatureLayer>().FirstOrDefault(f => f.Name == "Hydrology"); if (hydrologyLyr == null) { MessageBox.Show("This renderer works with the Hydrology feature layer available with the ArcGIS Pro SDK Sample data", "Data missing"); return; } await QueuedTask.Run(() => { //Get the Layer Document from the hydrology layer var lyrDocFromFeatureLayer = new LayerDocument(hydrologyLyr); //Get the CIM Document var cimLyrDefn = lyrDocFromFeatureLayer.GetCIMLayerDocument(); var layerDefns = cimLyrDefn.LayerDefinitions; var oneLyrDef = cimLyrDefn.LayerDefinitions[0] as CIMFeatureLayer; //Create a list of Display Filters var arrayDisplayFilters = new List <CIMDisplayFilter>() { new CIMDisplayFilter { Name = "StreamOrder > 6", WhereClause = "StreamOrder > 6", MinScale = 0, MaxScale = 50000000 }, new CIMDisplayFilter { Name = "StreamOrder > 5", WhereClause = "StreamOrder > 5", MinScale = 50000000, MaxScale = 20000000 }, new CIMDisplayFilter { Name = "StreamOrder > 4", WhereClause = "StreamOrder > 4", MinScale = 20000000, MaxScale = 5000000 }, new CIMDisplayFilter { Name = "StreamOrder > 3", WhereClause = "StreamOrder > 3", MinScale = 5000000, MaxScale = 1000000 }, new CIMDisplayFilter { Name = "StreamOrder > 2", WhereClause = "StreamOrder > 2", MinScale = 1000000, MaxScale = 100000 }, new CIMDisplayFilter { Name = "StreamOrder > 1", WhereClause = "StreamOrder > 1", MinScale = 100000, MaxScale = 24000 }, }; //Add the Display Filters to the CIM Layer Doc ((CIMFeatureLayer)cimLyrDefn.LayerDefinitions[0]).DisplayFilters = arrayDisplayFilters.ToArray(); //Enable the Display filters. ((CIMFeatureLayer)cimLyrDefn.LayerDefinitions[0]).EnableDisplayFilters = true; //Add a new layer to the map using the configured LayerDocument in memory. var featureLayerParams = new LayerCreationParams(cimLyrDefn); featureLayerParams.MapMemberPosition = MapMemberPosition.AddToTop; var configuredLyr = LayerFactory.Instance.CreateLayer <FeatureLayer>(featureLayerParams, MapView.Active.Map); #region Turn off the original layer visibility hydrologyLyr.SetVisibility(false); hydrologyLyr.SetExpanded(false); hydrologyLyr?.SetLabelVisibility(false); #endregion }); }
/// <summary> /// Create a raster layer and add it to a map. /// </summary> /// <returns>Task that contains a layer.</returns> private async Task AddRasterLayerToMap() { try { // Get the first map called "Map" from the current project. Map myMap = null; myMap = await GetMapFromProject(Project.Current, "Map"); if (myMap == null) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to get map."); return; } // Create a url pointing to the source. In this case it is a url to an image service // which will result in an image service layer being created. string dataSoureUrl = @"https://environment.data.gov.uk/image/services/SURVEY/VegetationObjectModel/ImageServer"; // Note: A url can also point to // 1.) An image on disk or an in a file geodatabase. e.g. string dataSoureUrl = @"C:\temp\a.tif"; This results in a raster layer. // 2.) A mosaic dataset in a file gdb e.g. string dataSoureUrl = @"c:\temp\mygdb.gdb\MyMosaicDataset"; This results in a mosaic layer. // 3.) A raster or mosaic dataset in an enterprise geodatabase. // Create an ImageServiceLayer object to hold the new layer. ImageServiceLayer rasterLayer = null; // The layer has to be created on the Main CIM Thread (MCT). await QueuedTask.Run(() => { // Create a layer based on the url. In this case the layer we are creating is an image service layer. var layerParams = new LayerCreationParams(new Uri(dataSoureUrl)); rasterLayer = LayerFactory.Instance.CreateLayer <ImageServiceLayer>(layerParams, myMap); // Check if it is created. if (rasterLayer == null) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Failed to create layer for url:" + dataSoureUrl); return; } // Validate the colorizer to see if the layer is colorized correctly. if (!(rasterLayer.GetColorizer() is CIMRasterRGBColorizer)) { ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Colorizer does not match for layer created from url: " + dataSoureUrl); } }); } catch (Exception exc) { // Catch any exception found and display a message box. ArcGIS.Desktop.Framework.Dialogs.MessageBox.Show("Exception caught: " + exc.Message); return; } }
private async Task <string> UploadImpl() { // Create EsriHttpClient object var httpClient = new EsriHttpClient(); // Upload vtpk file to the currently active portal var itemToUpload = ItemFactory.Instance.Create(FilePath); var tags = new string[] { "ArcGIS Pro", "SDK", "UploadVtpkToAgol Demo" }; var portalUrl = ArcGISPortalManager.Current.GetActivePortal().PortalUri.ToString(); var uploadDefn = new UploadDefinition(portalUrl, itemToUpload, tags); var result = httpClient.Upload(uploadDefn); if (result.Item1 == false) { return($@"Unable to upload this item: {FilePath} to ArcGIS Online"); } // Once uploaded make another REST call to search for the uploaded data var portal = ArcGISPortalManager.Current.GetActivePortal(); string userName = ArcGISPortalManager.Current.GetActivePortal().GetSignOnUsername(); //Searching for Vector tile packages in the current user's content var pqp = PortalQueryParameters.CreateForItemsOfTypeWithOwner(PortalItemType.VectorTilePackage, userName, "tags: UploadVtpkToAgol Demo"); //Execute to return a result set PortalQueryResultSet <PortalItem> results = await ArcGISPortalExtensions.SearchForContentAsync(portal, pqp); if (results.Results.Count == 0) { return($@"Unable to find uploaded item with query: {pqp.Query}"); } // Create an item from the search results string itemId = results.Results[0].ID; var currentItem = ItemFactory.Instance.Create(itemId, ItemFactory.ItemType.PortalItem); var lyrParams = new LayerCreationParams(currentItem); // Finally add the feature service to the map // if we have an item that can be turned into a layer // add it to the map if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, MapView.Active.Map); } return($@"Uploaded this item: {results.Results[0].Name} [Type: {results.Results[0].Type}] to ArcGIS Online and added the item to the Map"); }
private Task AddToMap() { return(QueuedTask.Run(() => { try { // first we create an 'Item' using itemfactory Item currentItem = ItemFactory.Instance.Create(FilePath); var lyrParams = new LayerCreationParams(currentItem); // Finally add the feature service to the map // if we have an item that can be turned into a layer // add it to the map if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, MapView.Active.Map); } } catch (Exception ex) { MessageBox.Show(ex.Message, "Error while adding vector tile to map"); } })); }
private static void RepairWithLayerFile(Map map, Layer layer, string newLayerFile, bool keepBrokenLayer) { // Create Layer from *.lyrx file: https://github.com/esri/arcgis-pro-sdk/wiki/ProSnippets-MapAuthoring#create-layer-from-a-lyrx-file // Pro Addin SDK can only open *.lyrx, not *.lyr: // Assume Data Manager manually created a shadow *.lyrx file for the *.lyr file in the moves database // TODO: If *.lyrx file does not exist, create *.lyrx from *.lyr file; must be done with an external python process if (newLayerFile.EndsWith(".lyr", StringComparison.OrdinalIgnoreCase)) { newLayerFile += "x"; } Layer newLayer = null; try { var layerDocument = new LayerDocument(newLayerFile); var layerParameters = new LayerCreationParams(layerDocument.GetCIMLayerDocument()); newLayer = LayerFactory.Instance.CreateLayer <Layer>(layerParameters, map, LayerPosition.AutoArrange); } catch (Exception) {} if (newLayer != null) { if (!keepBrokenLayer) { map.RemoveLayer(layer); } } else { // Notify the user that the LayerFile could not be opened (missing, corrupt, ...) var title = @"Map Fixer Error"; var msg = $"The layer file '{newLayerFile}' could not be opened."; MessageBox.Show(msg, title, System.Windows.MessageBoxButton.OK, System.Windows.MessageBoxImage.Error); } }
protected internal async virtual void ExecuteItemAction(string id) { _selectedResult = _results.FirstOrDefault(ri => ri.Id == id); if (_selectedResult == null) { return; } //Either we open a project and then create the item or //we download the item and then create a project from it. //MapPackage is a special case. We download it, create //a project and then add the map package to it. VisibleList = Visibility.Collapsed; VisibleText = Visibility.Visible; StatusTitle = $@"{_selectedResult.LinkText}: {_selectedResult.Title}"; switch (_selectedResult.PortalItemType) { case PortalItemType.WebMap: { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); var currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (MapFactory.Instance.CanCreateMapFrom(currentItem)) { await QueuedTask.Run(() => { var newMap = MapFactory.Instance.CreateMapFromItem(currentItem); FrameworkApplication.Panes.CreateMapPaneAsync(newMap); }); } } break; case PortalItemType.Layer: { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplateType = TemplateType.GlobalScene }; _eventToken = ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Subscribe((args) => { Item currentItem = ItemFactory.Instance.Create(_selectedResult.Id, ItemFactory.ItemType.PortalItem); if (LayerFactory.Instance.CanCreateLayerFrom(currentItem)) { var lyrParams = new LayerCreationParams(currentItem); QueuedTask.Run(() => LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, args.MapView.Map)); } ArcGIS.Desktop.Mapping.Events.MapViewInitializedEvent.Unsubscribe(_eventToken); _eventToken = null; }); try { await Project.CreateAsync(ps); } catch (Exception ex) { Status = $@"Error occurred: {ex.ToString()}"; System.Diagnostics.Debug.WriteLine(ex.ToString()); } } break; default: var query = new OnlineQuery(_activePortalUri); query.ConfigureData("", _selectedResult.Id, _selectedResult.Name); Status = "Downloading"; await new SubmitQuery().DownloadFileAsync(query); Status = "Opening"; //Project package if (_selectedResult.PortalItemType == PortalItemType.ProjectPackage) { await Project.OpenAsync(query.DownloadFileName); } //Project Template else if (_selectedResult.PortalItemType == PortalItemType.MapTemplate) { var ps = new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name), LocationPath = ConfigWithStartWizardModule.DefaultFolder(), TemplatePath = query.DownloadFileName }; try { await Project.CreateAsync(ps); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } //Map Package else if (_selectedResult.PortalItemType == PortalItemType.MapPackage) { await Project.CreateAsync(new CreateProjectSettings() { Name = System.IO.Path.GetFileNameWithoutExtension(_selectedResult.Name) }); try { var mapPackage = ItemFactory.Instance.Create(query.DownloadFileName); MapFactory.Instance.CreateMapFromItem(mapPackage); } catch (Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); Status = $@"Error occurred: {ex.ToString()}"; } } break; } }