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))); } }
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; } } } }
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; } } } }
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); } }
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); } } } }
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; } }
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(); }