コード例 #1
0
ファイル: MapFixer.cs プロジェクト: AKROGIS/MapFixer
        private void RepairWithLayerFile(int mapIndex, IDataLayer2 dataLayer, string newLayerFile, bool keepBrokenLayer, AlertForm alert)
        {
            // Add Layer File to ActiveView Snippet: (http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#//004900000050000000)
            IGxLayer gxLayer = new GxLayer();
            IGxFile  gxFile  = (IGxFile)gxLayer;

            gxFile.Path = newLayerFile;
            if (gxLayer.Layer != null)
            {
                // AddLayer will add the new layer at the most appropriate point in the TOC.
                //   This is much easier and potentially less confusing than adding at the old data location.
                ArcMap.Document.Maps.Item[mapIndex].AddLayer(gxLayer.Layer);
                if (!keepBrokenLayer)
                {
                    ArcMap.Document.Maps.Item[mapIndex].DeleteLayer((ILayer)dataLayer);
                }
            }
            else
            {
                // Notify the user that the LayerFile could not be opened (missing, corrupt, ...)
                alert.Text        = @"Error";
                alert.msgBox.Text = $"The layer file '{newLayerFile}' could not be opened.";
                alert.ShowDialog(new WindowWrapper(new IntPtr(ArcMap.Application.hWnd)));
            }
        }
コード例 #2
0
        private static void ApplySymbology(ILayer layer, FileInfo symbology)
        {
            if (symbology == null || !symbology.Exists)
            {
                return;
            }

            IGxLayer pGXLayer = new GxLayer();
            IGxFile  pGXFile  = (IGxFile)pGXLayer;

            pGXFile.Path = symbology.FullName;


            if (layer is IRasterLayer)
            {
                if (pGXLayer.Layer is IRasterLayer)
                {
                    IRasterLayer prlayer = (IRasterLayer)pGXLayer.Layer;
                    ((IRasterLayer)layer).Renderer = prlayer.Renderer;
                }
                else
                {
                    throw new Exception(string.Format("Cannot apply symbology file to raster layer {0}. file: {1}", layer.Name, symbology.FullName));
                }
            }
            else if (layer is IGeoFeatureLayer)
            {
                if (pGXLayer.Layer is IGeoFeatureLayer)
                {
                    IGeoFeatureLayer pGFLayer = (IGeoFeatureLayer)pGXLayer.Layer;
                    ((IGeoFeatureLayer)layer).Renderer = pGFLayer.Renderer;

                    // Copy labels
                    if (pGFLayer.DisplayAnnotation)
                    {
                        try
                        {
                            ((IGeoFeatureLayer)layer).DisplayAnnotation    = true;
                            ((IGeoFeatureLayer)layer).AnnotationProperties = pGFLayer.AnnotationProperties;
                        }
                        catch (Exception ex)
                        {
                            System.Diagnostics.Debug.Print(ex.Message);
                            System.Diagnostics.Debug.Assert(false, "Error applying labels from layer file.");
                        }
                    }

                    // Make sure the correct layer properties dialog appears
                    IRendererPropertyPage pRendererPropPage = GetVectorPropertyPage(pGFLayer.Renderer);
                    if (pRendererPropPage != null)
                    {
                        ((IGeoFeatureLayer)layer).RendererPropertyPageClassID = pRendererPropPage.ClassID;
                    }
                }
            }
        }
コード例 #3
0
ファイル: ArcMapUtilities.cs プロジェクト: Cashe93/RaveAddIn
        private static void ApplySymbology(ILayer layer, FileInfo symbology)
        {
            if (symbology == null || !symbology.Exists)
            {
                return;
            }

            IGxLayer pGXLayer = new GxLayer();
            IGxFile  pGXFile  = (IGxFile)pGXLayer;

            pGXFile.Path = symbology.FullName;


            if (layer is IRasterLayer)
            {
                if (pGXLayer.Layer is IRasterLayer)
                {
                    IRasterLayer prlayer = (IRasterLayer)pGXLayer.Layer;
                    ((IRasterLayer)layer).Renderer = prlayer.Renderer;
                }
                else
                {
                    throw new Exception(string.Format("Cannot apply symbology file to raster layer {0}. file: {1}", layer.Name, symbology.FullName));
                }
            }
            else if (layer is IGeoFeatureLayer)
            {
                if (pGXLayer.Layer is IGeoFeatureLayer)
                {
                    IGeoFeatureLayer pGFLayer = (IGeoFeatureLayer)pGXLayer.Layer;
                    ((IGeoFeatureLayer)layer).Renderer = pGFLayer.Renderer;

                    IRendererPropertyPage pRendererPropPage = GetVectorPropertyPage(pGFLayer.Renderer);
                    if (pRendererPropPage != null)
                    {
                        ((IGeoFeatureLayer)layer).RendererPropertyPageClassID = pRendererPropPage.ClassID;
                    }
                }
            }
        }
コード例 #4
0
        private void AddAGSService(string fileName)
        {
            try
            {
                IMxDocument mxDoc = (IMxDocument)m_application.Document;
                IMap map = (IMap)mxDoc.FocusMap;
                IActiveView activeView = (IActiveView)map;

                bool isAlreadyInMap = false;

                if (isAlreadyInMap)
                {
                    ShowErrorMessageBox(StringResources.MapServiceLayerAlreadyExistInMap);
                    return;
                }
                else
                {
                    if (fileName.ToLower().Contains("http") && !fileName.ToLower().Contains("arcgis/rest"))
                    {
                        if(fileName.EndsWith("MapServer"))
                            fileName = fileName.Remove(fileName.LastIndexOf("MapServer"));

                        String[] s = fileName.ToLower().Split(new String[]{"/services"}, StringSplitOptions.RemoveEmptyEntries);

                        IPropertySet propertySet = new PropertySetClass();
                        propertySet.SetProperty("URL", s[0] + "/services"); // fileName

                       IMapServer mapServer = null;

                        IAGSServerConnectionFactory pAGSServerConFactory =  new AGSServerConnectionFactory();
                        IAGSServerConnection agsCon = pAGSServerConFactory.Open(propertySet,0);
                        IAGSEnumServerObjectName pAGSSObjs = agsCon.ServerObjectNames;
                        IAGSServerObjectName pAGSSObj = pAGSSObjs.Next();

                       while (pAGSSObj != null) {
                        if(pAGSSObj.Type=="MapServer" && pAGSSObj.Name.ToLower() == s[1].TrimStart('/').TrimEnd('/')){
                            break;
                        }
                        pAGSSObj = pAGSSObjs.Next();
                       }

                        IName pName =  (IName) pAGSSObj;
                        IAGSServerObject pAGSO = (IAGSServerObject) pName.Open();
                        mapServer = (IMapServer) pAGSO;

                        IPropertySet prop = new PropertySetClass();
                        prop.SetProperty("URL", fileName);
                        prop.SetProperty("Name",pAGSSObj.Name);

                        IMapServerLayer layer = new MapServerLayerClass();
                        layer.ServerConnect(pAGSSObj,mapServer.get_MapName(0));

                        mxDoc.AddLayer((ILayer)layer);

                    }
                    else
                    {

                        IGxFile pGxFile;

                        if (fileName.ToLower().EndsWith(".tif"))
                        {
                            IRasterLayer pGxLayer = (IRasterLayer)new RasterLayer();
                            pGxLayer.CreateFromFilePath(fileName);
                            if (pGxLayer.Valid)
                            {
                                map.AddLayer((ILayer)pGxLayer);
                            }
                        }
                        else
                        {
                            if (fileName.ToLower().Contains("http") && fileName.ToLower().Contains("arcgis/rest"))
                            {
                                String[] s = fileName.ToLower().Split(new String[] { "/rest" }, StringSplitOptions.RemoveEmptyEntries);

                                IPropertySet propertySet = new PropertySetClass();
                                propertySet.SetProperty("URL", s[0] + "/services"); // fileName

                                IMapServer mapServer = null;

                                IAGSServerConnectionFactory pAGSServerConFactory = new AGSServerConnectionFactory();
                                IAGSServerConnection agsCon = pAGSServerConFactory.Open(propertySet, 0);
                                IAGSEnumServerObjectName pAGSSObjs = agsCon.ServerObjectNames;
                                IAGSServerObjectName pAGSSObj = pAGSSObjs.Next();

                                String[] parts = s[1].ToLower().Split(new String[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
                                while (pAGSSObj != null)
                                {
                                    if (pAGSSObj.Type == "MapServer" && pAGSSObj.Name.ToLower() == parts[1])
                                    {
                                        break;
                                    }
                                    pAGSSObj = pAGSSObjs.Next();
                                }

                                IName pName = (IName)pAGSSObj;
                                IAGSServerObject pAGSO = (IAGSServerObject)pName.Open();
                                mapServer = (IMapServer)pAGSO;

                                IPropertySet prop = new PropertySetClass();
                                prop.SetProperty("URL", fileName);
                                prop.SetProperty("Name", pAGSSObj.Name);

                                IMapServerLayer layer = new MapServerLayerClass();
                                layer.ServerConnect(pAGSSObj, mapServer.get_MapName(0));

                                mxDoc.AddLayer((ILayer)layer);
                            }
                            else
                            {
                                IGxLayer pGxLayer = new GxLayer();
                                pGxFile = (GxFile)pGxLayer;
                                pGxFile.Path = fileName;

                                if (pGxLayer.Layer != null)
                                {
                                    map.AddLayer(pGxLayer.Layer);
                                }
                            }

                        }

                    }

                }
            }
            catch (Exception ex)
            {
                ShowErrorMessageBox(StringResources.AddArcGISLayerFailed + "\r\n" + ex.Message);
            }
        }
コード例 #5
0
        private void SetClassBreaks(List<double> classBreaks, string templatePath)
        {
            ILayer selectedLayer = GetLayerByName(cmbLayers.SelectedItem.ToString());
            ICompositeLayer groupLayer = (ICompositeLayer)selectedLayer;
            int groupCount = groupLayer.Count;

            for (int i = 0; i < groupCount; i++)
            {
                IGeoFeatureLayer geoFeatureLayer = (IGeoFeatureLayer)groupLayer.Layer[i];
                IGxLayer gxLayer = new GxLayer();
                IGxFile gxFile = (IGxFile)gxLayer;

                gxFile.Path = string.Format(templatePath, i + 1);

                IGeoFeatureLayer gxFeatureLayer = (IGeoFeatureLayer)gxLayer.Layer;
                IClassBreaksRenderer gxRenderer = (IClassBreaksRenderer)gxFeatureLayer.Renderer;

                geoFeatureLayer.Renderer = (IFeatureRenderer)gxRenderer;
                IClassBreaksRenderer geoRenderer = (IClassBreaksRenderer)geoFeatureLayer.Renderer;
                geoRenderer.BreakCount = classBreaks.Count;
                // geoRenderer = gxRenderer;

                int breakCount = classBreaks.Count;

                geoRenderer.BreakCount = breakCount;

                for (int j = 0; j < breakCount; j++)
                {
                    geoRenderer.Break[j] = classBreaks[j];
                    geoRenderer.Symbol[j] = gxRenderer.Symbol[j];

                    if (j == 0)
                    {
                        int maxRange = Convert.ToInt32(geoRenderer.Break[j]);
                        geoRenderer.Label[j] = string.Format("<={0}", maxRange);
                    }
                    else
                    {
                        int minRange = Convert.ToInt32(geoRenderer.Break[j - 1]);
                        int maxRange = Convert.ToInt32(geoRenderer.Break[j]);
                        geoRenderer.Label[j] = string.Format("{0} to {1}", minRange, maxRange);
                    }
                }
            }
        }
コード例 #6
0
        public void RenderLayer(ref IFeatureLayer fLayer, esriGeometryType fesriGeometryType,
                                int intRed, int intGreen, int intBlue, double fdblWidth, int intOutlineRed, int intOutlineGreen, int intOutlineBlue,
                                esriSimpleLineStyle pesriSimpleLineStyle, esriSimpleFillStyle pesriSimpleFillStyle, string strSymbolLayerPath)
        {
            if (strSymbolLayerPath == null)
            {
                IRgbColor       pRgbColor       = CHelpFunc.GenerateIRgbColor(intRed, intGreen, intBlue);
                ISimpleRenderer pSimpleRenderer = new SimpleRendererClass();

                switch (fesriGeometryType)
                {
                case esriGeometryType.esriGeometryPoint:
                    ISimpleMarkerSymbol pSimpleMarkerSymbol = new SimpleMarkerSymbolClass();
                    pSimpleMarkerSymbol.Color = pRgbColor as IColor;
                    pSimpleMarkerSymbol.Size  = fdblWidth;
                    pSimpleRenderer.Symbol    = pSimpleMarkerSymbol as ISymbol;
                    break;

                case esriGeometryType.esriGeometryPolyline:
                    pSimpleRenderer.Symbol = GetSimpleLineSymbol(pRgbColor, fdblWidth, pesriSimpleLineStyle) as ISymbol;
                    break;

                case esriGeometryType.esriGeometryPolygon:
                    IRgbColor pRgbColorOutline = new RgbColorClass();
                    pRgbColorOutline.Red   = intOutlineRed;
                    pRgbColorOutline.Green = intOutlineGreen;
                    pRgbColorOutline.Blue  = intOutlineBlue;

                    ISimpleFillSymbol pSimpleFillSymbol = new SimpleFillSymbolClass();
                    pSimpleFillSymbol.Outline = GetSimpleLineSymbol(pRgbColorOutline, fdblWidth, pesriSimpleLineStyle);
                    pSimpleFillSymbol.Color   = pRgbColor as IColor;
                    pSimpleFillSymbol.Style   = pesriSimpleFillStyle;
                    pSimpleRenderer.Symbol    = pSimpleFillSymbol as ISymbol;
                    break;

                default:
                    return;
                }
                //fLayer.
                IGeoFeatureLayer pGeoFeaturelayer = fLayer as IGeoFeatureLayer;
                pGeoFeaturelayer.Renderer = pSimpleRenderer as IFeatureRenderer;
            }
            else
            {
                //In the shapefile properties, under the Symbology tab,
                //you have the Import button which allow you to import the symbology definition from another shapefile or layer file.
                //The code below is doing exactly the same.
                //You need to create a layer file with the desired symbology definition and then call this sub.

                IGxLayer         pGxLayer;
                IGxFile          pGxFile;
                ILayer           pSymLayer;
                IGeoFeatureLayer pLyr;
                IGeoFeatureLayer pGeoSymLyr;

                pGxLayer = new GxLayer();
                pGxFile  = pGxLayer as IGxFile;

                pGxFile.Path = strSymbolLayerPath;

                pSymLayer     = pGxLayer.Layer;
                pLyr          = fLayer as IGeoFeatureLayer;
                pGeoSymLyr    = pSymLayer as IGeoFeatureLayer;
                pLyr.Renderer = pGeoSymLyr.Renderer;
            }
        }
コード例 #7
0
        private void ChangeBreaks()
        {
            IMxDocument pMxDoc = m_application.Document as IMxDocument;
            IMap pMap = pMxDoc.FocusMap;
            IGeoFeatureLayer pFeatureLayer = pMap.Layer[0] as IGeoFeatureLayer;

            IGxLayer pGXLayer = new GxLayer();
            IGxFile pGXFile = (IGxFile)pGXLayer;

            pGXFile.Path = @"S:\Projects\TARRANT-Witchita\GIS\Layers\infreq_layers\test_Layer_2.lyr";

            IGeoFeatureLayer pLayer = pGXLayer.Layer as IGeoFeatureLayer;
            IClassBreaksRenderer pClassBreaksRenderer = (IClassBreaksRenderer)pLayer.Renderer;
            int pNumberOfClassBreaks = pClassBreaksRenderer.BreakCount;

            for (int i = 0; i < pNumberOfClassBreaks; i++)
            {
                pClassBreaksRenderer.Break[i] = i + 1;
            }

            IClassBreaksRenderer qClassBreaksRenderer = (IClassBreaksRenderer)pFeatureLayer.Renderer;
            qClassBreaksRenderer = pClassBreaksRenderer;
            int qNumberOfClassBreaks = qClassBreaksRenderer.BreakCount;

            for (int i = 0; i < qNumberOfClassBreaks; i++)
            {
                qClassBreaksRenderer.Break[i] = i + 1;
            }

            //Create a new LayerFile instance.
            ILayerFile layerFile = new LayerFileClass();
            //Create a new layer file.
            layerFile.New(@"S:\Projects\TARRANT-Witchita\GIS\Layers\test_Layer_3.lyr");

            layerFile.ReplaceContents(pLayer);
            layerFile.Save();
        }