Пример #1
0
        public async void Example3()
        {
            Map map = MapView.Active.Map;
            await QueuedTask.Run(() =>
            {
                #region Create a stream layer with a simple renderer
                var url = @"https://geoeventsample1.esri.com:6443/arcgis/rest/services/LABus/StreamServer";
                var uri = new Uri(url, UriKind.Absolute);
                //Must be on QueuedTask!
                var createParams = new FeatureLayerCreationParams(uri)
                {
                    RendererDefinition = new SimpleRendererDefinition()
                    {
                        SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(
                            ColorFactory.Instance.BlueRGB,
                            12,
                            SimpleMarkerStyle.Pushpin).MakeSymbolReference()
                    }
                };
                var streamLayer = LayerFactory.Instance.CreateLayer <StreamLayer>(
                    createParams, map);


                #endregion
            });
        }
Пример #2
0
        private Task addFeatureLayer()
        {
            Debug.WriteLine("addFeatureLayer enter");

            return(ArcGIS.Desktop.Framework.Threading.Tasks.QueuedTask.Run(() =>
            {
                ArcGIS.Core.Data.DatabaseConnectionProperties connectionProperties = new DatabaseConnectionProperties(EnterpriseDatabaseType.PostgreSQL)
                {
                    AuthenticationMode = AuthenticationMode.DBMS,
                    Instance = @"127.0.0.1",
                    Database = "geomapmaker2",
                    User = "******",
                    Password = "******",
                    //Version = "dbo.DEFAULT"
                };

                using (Geodatabase geodatabase = new Geodatabase(connectionProperties))
                {
                    using (FeatureClass featureClass = geodatabase.OpenDataset <FeatureClass>("geomapmaker2.geomapmaker2.line_features"))
                    {
                        var layerParamsQueryDefn = new FeatureLayerCreationParams(featureClass)
                        {
                            IsVisible = true,
                            DefinitionFilter = new CIMDefinitionFilter()
                            {
                                Name = "User",
                                DefinitionExpression = "user_id = " + DataHelper.userID
                            }
                        };
                        featureLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(layerParamsQueryDefn, MapView.Active.Map);
                    }
                }
            }));
        }
Пример #3
0
        public static async Task <BA_ReturnCode> AddPointMarkersAsync(Uri aoiUri, string displayName, CIMColor markerColor,
                                                                      SimpleMarkerStyle markerStyle, double markerSize)
        {
            // parse the uri for the folder and file
            string strFileName   = null;
            string strFolderPath = null;

            if (aoiUri.IsFile)
            {
                strFileName   = System.IO.Path.GetFileName(aoiUri.LocalPath);
                strFolderPath = System.IO.Path.GetDirectoryName(aoiUri.LocalPath);
            }
            BA_ReturnCode success = BA_ReturnCode.UnknownError;
            await QueuedTask.Run(() =>
            {
                FeatureClass fClass = null;
                // Opens a file geodatabase. This will open the geodatabase if the folder exists and contains a valid geodatabase.
                using (Geodatabase geodatabase =
                           new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(strFolderPath))))
                {
                    // Use the geodatabase.
                    try
                    {
                        fClass = geodatabase.OpenDataset <FeatureClass>(strFileName);
                    }
                    catch (GeodatabaseTableException e)
                    {
                        Debug.WriteLine("DisplayPointMarkersAsync: Unable to open feature class " + strFileName);
                        Debug.WriteLine("DisplayPointMarkersAsync: " + e.Message);
                        success = BA_ReturnCode.ReadError;
                        return;
                    }
                }
                // Create symbology for feature layer
                var flyrCreatnParam = new FeatureLayerCreationParams(fClass)
                {
                    Name               = displayName,
                    IsVisible          = true,
                    RendererDefinition = new SimpleRendererDefinition()
                    {
                        SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(markerColor, markerSize, markerStyle)
                                         .MakeSymbolReference()
                    }
                };

                FeatureLayer fLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(flyrCreatnParam, MapView.Active.Map);
            });

            success = BA_ReturnCode.Success;
            return(success);
        }
Пример #4
0
        public static async Task <BA_ReturnCode> AddPolygonLayerAsync(Uri uri, CIMColor fillColor, bool isVisible, string displayName = "")
        {
            // parse the uri for the folder and file
            string strFileName   = null;
            string strFolderPath = null;

            if (uri.IsFile)
            {
                strFileName   = System.IO.Path.GetFileName(uri.LocalPath);
                strFolderPath = System.IO.Path.GetDirectoryName(uri.LocalPath);
            }
            BA_ReturnCode success = BA_ReturnCode.UnknownError;
            await QueuedTask.Run(() =>
            {
                FeatureClass fClass = null;
                // Opens a file geodatabase. This will open the geodatabase if the folder exists and contains a valid geodatabase.
                using (Geodatabase geodatabase =
                           new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(strFolderPath))))
                {
                    // Use the geodatabase.
                    fClass = geodatabase.OpenDataset <FeatureClass>(strFileName);
                }
                if (String.IsNullOrEmpty(displayName))
                {
                    displayName = fClass.GetDefinition().GetAliasName();
                }
                // Create symbology for feature layer
                var flyrCreatnParam = new FeatureLayerCreationParams(fClass)
                {
                    Name               = displayName,
                    IsVisible          = true,
                    RendererDefinition = new SimpleRendererDefinition()
                    {
                        //SymbolTemplate = SymbolFactory.Instance.ConstructPolygonSymbol(fillColor).MakeSymbolReference()
                        SymbolTemplate = SymbolFactory.Instance.ConstructPolygonSymbol(
                            fillColor, SimpleFillStyle.Solid,
                            SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, 0))
                                         .MakeSymbolReference()
                    }
                };

                FeatureLayer fLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(flyrCreatnParam, MapView.Active.Map);
                fLayer.SetVisibility(isVisible);
                success = BA_ReturnCode.Success;
            });

            return(success);
        }
Пример #5
0
        public static FeatureLayerCreationParams CreateLayerParams([NotNull] FeatureClass featureClass)
        {
            var layerParams = new FeatureLayerCreationParams(featureClass);

            // todo daro: apply renderer here from template

            // LayerDocument is null!
            //LayerDocument template
            //CIMDefinition layerDefinition = layerParams.LayerDocument.LayerDefinitions[0];

            //var uniqueValueRenderer = GetRenderer<CIMUniqueValueRenderer>(template);

            //if (uniqueValueRenderer != null)
            //{
            //	((CIMFeatureLayer) layerDefinition).Renderer = uniqueValueRenderer;
            //}

            return(layerParams);
        }
Пример #6
0
        public static async Task AddAoiBoundaryToMapAsync(Uri aoiUri, string displayName = "", double lineSymbolWidth = 1.0)
        {
            // parse the uri for the folder and file
            string strFileName   = null;
            string strFolderPath = null;

            if (aoiUri.IsFile)
            {
                strFileName   = System.IO.Path.GetFileName(aoiUri.LocalPath);
                strFolderPath = System.IO.Path.GetDirectoryName(aoiUri.LocalPath);
            }
            await QueuedTask.Run(() =>
            {
                FeatureClass fClass = null;
                // Opens a file geodatabase. This will open the geodatabase if the folder exists and contains a valid geodatabase.
                using (Geodatabase geodatabase =
                           new Geodatabase(new FileGeodatabaseConnectionPath(new Uri(strFolderPath))))
                {
                    // Use the geodatabase.
                    fClass = geodatabase.OpenDataset <FeatureClass>(strFileName);
                }
                if (String.IsNullOrEmpty(displayName))
                {
                    displayName = fClass.GetDefinition().GetAliasName();
                }
                // Create symbology for feature layer
                var flyrCreatnParam = new FeatureLayerCreationParams(fClass)
                {
                    Name               = displayName,
                    IsVisible          = true,
                    RendererDefinition = new SimpleRendererDefinition()
                    {
                        SymbolTemplate = SymbolFactory.Instance.ConstructPolygonSymbol(
                            ColorFactory.Instance.BlackRGB, SimpleFillStyle.Null,
                            SymbolFactory.Instance.ConstructStroke(ColorFactory.Instance.BlackRGB, lineSymbolWidth, SimpleLineStyle.Solid))
                                         .MakeSymbolReference()
                    }
                };

                FeatureLayer fLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(flyrCreatnParam, MapView.Active.Map);
            });
        }
Пример #7
0
        public async void Example1()
        {
            Map map = MapView.Active.Map;
            await QueuedTask.Run(() =>
            {
                #region Create Stream Layer with URI
                //Must be on the QueuedTask
                var url         = "https://geoeventsample1.esri.com:6443/arcgis/rest/services/AirportTraffics/StreamServer";
                var createParam = new FeatureLayerCreationParams(new Uri(url))
                {
                    IsVisible = false //turned off by default
                };
                var streamLayer = LayerFactory.Instance.CreateLayer <StreamLayer>(createParam, map);

                //or use "original" create layer (will be visible by default)
                Uri uri     = new Uri(url);
                streamLayer = LayerFactory.Instance.CreateLayer(uri, map) as StreamLayer;
                streamLayer.SetVisibility(false);//turn off
                #endregion
            });
        }
Пример #8
0
        public async void Example2()
        {
            Map map = MapView.Active.Map;
            await QueuedTask.Run(() =>
            {
                #region Create a stream layer with a definition query
                //Must be on the QueuedTask
                var url            = "https://geoeventsample1.esri.com:6443/arcgis/rest/services/AirportTraffics/StreamServer";
                var lyrCreateParam = new FeatureLayerCreationParams(new Uri(url))
                {
                    IsVisible        = true,
                    DefinitionFilter = new CIMDefinitionFilter()
                    {
                        DefinitionExpression = "RWY = '29L'",
                        Name = "Runway"
                    }
                };

                var streamLayer = LayerFactory.Instance.CreateLayer <StreamLayer>(lyrCreateParam, map);
                #endregion
            });
        }
Пример #9
0
        private void CreateLayer()
        {
            Map map = MapView.Active.Map;

            #region Create layer with create-params
            var flyrCreatnParam = new FeatureLayerCreationParams(new Uri(@"c:\data\world.gdb\cities"))
            {
                Name             = "World Cities",
                IsVisible        = false,
                MinimumScale     = 1000000,
                MaximumScale     = 5000,
                DefinitionFilter = new CIMDefinitionFilter()
                {
                    DefinitionExpression = "Population > 100000",
                    Name = "More than 100k"
                },
                RendererDefinition = new SimpleRendererDefinition()
                {
                    SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(CIMColor.CreateRGBColor(255, 0, 0), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                }
            };

            var featureLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(flyrCreatnParam, map, LayerPosition.AutoArrange);
            #endregion

            #region Create a subtype group layer
            var subtypeGroupLayerCreateParam = new SubtypeGroupLayerCreationParams
                                               (
                new Uri(@"c:\data\SubtypeAndDomain.gdb\Fittings")
                                               );

            #region Define Subtype layers
            subtypeGroupLayerCreateParam.SubtypeLayers = new List <SubtypeFeatureLayerCreationParams>()
            {
                //define first subtype layer with unique value renderer
                new SubtypeFeatureLayerCreationParams()
                {
                    SubtypeId          = 1,
                    RendererDefinition = new UniqueValueRendererDefinition(new string[] { "type" })
                },

                //define second subtype layer with simple symbol renderer
                new SubtypeFeatureLayerCreationParams()
                {
                    SubtypeId          = 2,
                    RendererDefinition = new SimpleRendererDefinition()
                    {
                        SymbolTemplate = SymbolFactory.Instance.ConstructPointSymbol(CIMColor.CreateRGBColor(255, 0, 0), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                    }
                }
            };
            #endregion

            #region Define additional parameters
            subtypeGroupLayerCreateParam.DefinitionFilter = new CIMDefinitionFilter()
            {
                Name = "IsActive",
                DefinitionExpression = "Enabled = 1"
            };
            subtypeGroupLayerCreateParam.IsVisible    = true;
            subtypeGroupLayerCreateParam.MinimumScale = 50000;
            #endregion

            SubtypeGroupLayer subtypeGroupLayer =
                LayerFactory.Instance.CreateLayer <SubtypeGroupLayer>(subtypeGroupLayerCreateParam, map);
            #endregion
        }
Пример #10
0
        protected async override void OnClick()
        {
            // get the feature layer that's selected in the table of contents
            var selectedLayers = MapView.Active.GetSelectedLayers();
            var CADLayer       = selectedLayers.OfType <FeatureLayer>().FirstOrDefault() as FeatureLayer;

            if (CADLayer == null)
            {
                System.Windows.MessageBox.Show("Please select the CAD layer in the table of contents", "Layer Grid Scale");
                return;
            }
            double dMetersPerUnit = 1;
            string CadFeatClassNameForSelectedLayer = "";
            //Run on MCT
            bool isValid = await QueuedTask.Run(() =>
            {
                var CADFeatClass = CADLayer.GetFeatureClass();

                var FilePathConnX   = CADFeatClass.GetDatastore();
                string sCADFilePath = FilePathConnX.GetConnectionString();
                sCADFilePath        = sCADFilePath.Replace("DATABASE=", "");

                var FeatDS           = CADFeatClass.GetFeatureDataset();
                string CadFileName   = System.IO.Path.Combine(sCADFilePath, FeatDS.GetName());
                string fileExtension = System.IO.Path.GetExtension(CadFileName);
                fileExtension        = fileExtension.ToLower();

                string sTargetFileName = System.IO.Path.GetFileNameWithoutExtension(CadFileName);
                sTargetFile            = System.IO.Path.Combine(sCADFilePath, sTargetFileName + ".wld");

                //get name for layer
                string FCName = CADFeatClass.GetName();
                CadFeatClassNameForSelectedLayer = System.IO.Path.Combine(CadFileName, FCName);

                FeatureClassDefinition CADFeatClassDef = CADFeatClass.GetDefinition();
                var fcSR = CADFeatClassDef.GetSpatialReference();

                if (fcSR.IsProjected)
                {
                    dMetersPerUnit = fcSR.Unit.ConversionFactor; //meters per unit
                }
                bool bIsCAD = (fileExtension == ".dwg" || fileExtension == ".dgn" || fileExtension == ".dxf");

                // zoom to the layer
                MapView.Active.ZoomTo(CADLayer);     //Layer's ZoomTo extent is used to get a good reference point later

                return(bIsCAD & !fcSR.IsGeographic); //The addin requires that the CAD data is not in geographic coordinates
            });

            // if not a valid CAD file
            if (!isValid)
            {
                System.Windows.MessageBox.Show("Please select the CAD layer in the table of contents." + Environment.NewLine +
                                               "CAD data in a geographic coordinate system is not supported.", "Scale CAD Layer");
                return;
            }

            // get the scale from the user
            double dScaleFactor = 1.0000;
            var    sf           = new ScaleFactorInput();

            sf.Owner = FrameworkApplication.Current.MainWindow;
            try
            {
                if (sf.ShowDialog() == true)
                {
                    string sScaleFactor = sf.ScaleFactor.Text;
                    if (!Double.TryParse(sScaleFactor, out dScaleFactor))
                    {
                        MessageBox.Show("Please type a number", "Grid Scale");
                        return;
                    }
                }
                else
                {
                    // cancelled from dialog
                    return;
                }
            }
            finally
            {
                sf = null;
            }

            //use the layer's ZoomTo extent to get the approximate location of the CAD file for the reference point
            var dataReferencePoint = (Coordinate2D)MapView.Active.Extent.Center; //this is sufficient for the reference point
            var secondPoint        = new Coordinate2D(dataReferencePoint.X + (100 / dMetersPerUnit), dataReferencePoint.Y + (100 / dMetersPerUnit));

            var dataReferencePointScaled = new Coordinate2D(dataReferencePoint.X * dScaleFactor, dataReferencePoint.Y * dScaleFactor);
            var SecondPointScaled        = new Coordinate2D(secondPoint.X * dScaleFactor, secondPoint.Y * dScaleFactor);

            if (WriteWorldFile(sTargetFile, dataReferencePoint, secondPoint, dataReferencePointScaled, SecondPointScaled))
            {
                await QueuedTask.Run(() =>
                {
                    //Remove and then re-add layer
                    //remove layer
                    var map = MapView.Active.Map;
                    map.RemoveLayer(CADLayer.Parent as GroupLayer);

                    var featureClassUri = new Uri(CadFeatClassNameForSelectedLayer);
                    //Define the Feature Layer's parameters.
                    var layerParams = new FeatureLayerCreationParams(featureClassUri)
                    {
                        //Set visibility
                        IsVisible = true,
                    };
                    var createdCadLayer = LayerFactory.Instance.CreateLayer <FeatureLayer>(layerParams, MapView.Active.Map);
                    MapView.Active.ZoomTo(CADLayer); //ZoomTo the updated extent
                });
            }
            else
            {
                MessageBox.Show("The world file could not be created.", "Grid Scale");
                return;
            }
        }
Пример #11
0
        public async void Example4()
        {
            Map map = MapView.Active.Map;
            await QueuedTask.Run(() =>
            {
                //StreamLayer streamLayer = null;
                //

                #region Setting a unique value renderer for latest observations

                var url = @"https://geoeventsample1.esri.com:6443/arcgis/rest/services/AirportTraffics/StreamServer";
                var uri = new Uri(url, UriKind.Absolute);
                //Must be on QueuedTask!
                var createParams = new FeatureLayerCreationParams(uri)
                {
                    IsVisible = false
                };
                var streamLayer = LayerFactory.Instance.CreateLayer <StreamLayer>(
                    createParams, map);
                //Define the unique values by hand
                var uvr = new CIMUniqueValueRenderer()
                {
                    Fields           = new string[] { "ACTYPE" },
                    UseDefaultSymbol = true,
                    DefaultLabel     = "Others",
                    DefaultSymbol    = SymbolFactory.Instance.ConstructPointSymbol(
                        CIMColor.CreateRGBColor(185, 185, 185), 8, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                };

                var classes = new List <CIMUniqueValueClass>();
                //add in classes - one for ACTYPE of 727, one for DC 9
                classes.Add(
                    new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] {
                        new CIMUniqueValue()
                        {
                            FieldValues = new string[] { "B727" }
                        }
                    },
                    Visible = true,
                    Label   = "Boeing 727",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(
                        ColorFactory.Instance.RedRGB, 10, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                });
                classes.Add(
                    new CIMUniqueValueClass()
                {
                    Values = new CIMUniqueValue[] {
                        new CIMUniqueValue()
                        {
                            FieldValues = new string[] { "DC9" }
                        }
                    },
                    Visible = true,
                    Label   = "DC 9",
                    Symbol  = SymbolFactory.Instance.ConstructPointSymbol(
                        ColorFactory.Instance.GreenRGB, 10, SimpleMarkerStyle.Hexagon).MakeSymbolReference()
                });
                //add the classes to a group
                var groups = new List <CIMUniqueValueGroup>()
                {
                    new CIMUniqueValueGroup()
                    {
                        Classes = classes.ToArray()
                    }
                };
                //add the groups to the renderer
                uvr.Groups = groups.ToArray();
                //Apply the renderer (for current observations)
                streamLayer.SetRenderer(uvr);
                streamLayer.SetVisibility(true);//turn on the layer

                #endregion
            });
        }
        protected async override void OnClick()
        {
            var catalog         = Project.GetCatalogPane();
            var items           = catalog.SelectedItems;
            var ProDataSubItems = items.OfType <ProDataSubItem>();

            foreach (var item in ProDataSubItems)
            {
                try
                {
                    await QueuedTask.Run(() =>
                    {
                        switch (item.SubItemType)
                        {
                        case ProDataSubItem.EnumSubItemType.DirType:
                            break;

                        case ProDataSubItem.EnumSubItemType.GpxType:
                            var conGpx = new PluginDatasourceConnectionPath("ProGpxPluginDatasource",
                                                                            new Uri(item.Path, UriKind.Absolute));
                            var groupLayer = LayerFactory.Instance.CreateGroupLayer(MapView.Active.Map, 0, Path.GetFileNameWithoutExtension(item.Path));
                            ArcGIS.Core.Geometry.Envelope zoomToEnv = null;
                            using (var pluginGpx = new PluginDatastore(conGpx))
                            {
                                System.Diagnostics.Debug.Write($"Table: {item.Path}\r\n");
                                // because this is a GPX file we have both line and point variations
                                // we add them in a group layer
                                foreach (var tn in pluginGpx.GetTableNames())
                                {
                                    using (var table = pluginGpx.OpenTable(tn))
                                    {
                                        var lyrParams = new FeatureLayerCreationParams((FeatureClass)table);
                                        //Add as a layer to the active map or scene
                                        LayerFactory.Instance.CreateLayer <FeatureLayer>(lyrParams, groupLayer);
                                        zoomToEnv = ((FeatureClass)table).GetExtent().Clone() as ArcGIS.Core.Geometry.Envelope;
                                    }
                                }
                            }
                            if (zoomToEnv != null)
                            {
                                MapView.Active.ZoomToAsync(zoomToEnv);
                            }
                            break;

                        case ProDataSubItem.EnumSubItemType.ImgDirType:
                        case ProDataSubItem.EnumSubItemType.ImgType:
                            var conJpg = new PluginDatasourceConnectionPath("ProJpgPluginDatasource",
                                                                            new Uri(item.Path, UriKind.Absolute));
                            using (var pluginJpg = new PluginDatastore(conJpg))
                            {
                                System.Diagnostics.Debug.Write($"Table: {item.Path}\r\n");
                                //open each table....use the returned table name
                                //or just pass in the name of a csv file in the workspace folder
                                foreach (var tn in pluginJpg.GetTableNames())
                                {
                                    using (var table = pluginJpg.OpenTable(tn))
                                    {
                                        var featureLyrParams = new FeatureLayerCreationParams((FeatureClass)table);
                                        //Add as a layer to the active map or scene
                                        LayerFactory.Instance.CreateLayer <FeatureLayer>(featureLyrParams, MapView.Active.Map);
                                    }
                                }
                            }
                            break;
                        }
                    });
                }
                catch (Exception ex)
                {
                    MessageBox.Show($@"Unable to add to map: {ex.Message}");
                }
            }
        }