コード例 #1
0
        /// <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");
        }
コード例 #2
0
        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
        }
コード例 #3
0
        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
            });
        }
コード例 #5
0
        /// <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;
            }
        }
コード例 #6
0
        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");
        }
コード例 #7
0
 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");
         }
     }));
 }
コード例 #8
0
ファイル: MapFixer.cs プロジェクト: AKROGIS/MapFixer
        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);
            }
        }
コード例 #9
0
        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;
            }
        }