public void fillDictionary() { FeatureDictionary = new Dictionary <string, IFeatureClass>(); TableDictionary = new Dictionary <string, ITable>(); FunctionRasterDictionary = new Dictionary <string, IFunctionRasterDataset>(); if (TheMap != null) { for (int i = 0; i < TheMap.LayerCount; i++) { try { ILayer lyr = TheMap.Layer[i]; if (lyr is FeatureLayer) { IFeatureLayer ftrLyr = (IFeatureLayer)lyr; FeatureDictionary[lyr.Name] = ftrLyr.FeatureClass; } else if (lyr is RasterLayer) { IRasterLayer rsLyr = (IRasterLayer)lyr; FunctionRasterDictionary[lyr.Name] = RasterUtility.createIdentityRaster(((IRaster2)rsLyr.Raster).RasterDataset); } else if (lyr is MosaicLayer) { IMosaicLayer msLyr = (IMosaicLayer)lyr; IFeatureLayer ftrLyr = msLyr.BoundaryLayer; FeatureDictionary[ftrLyr.Name] = ftrLyr.FeatureClass; ftrLyr = msLyr.FootprintLayer; FeatureDictionary[ftrLyr.Name] = ftrLyr.FeatureClass; FunctionRasterDictionary[lyr.Name] = (IFunctionRasterDataset)msLyr.MosaicDataset; } } catch { } } IStandaloneTableCollection tblCol = (IStandaloneTableCollection)TheMap; for (int i = 0; i < tblCol.StandaloneTableCount; i++) { try { IStandaloneTable StTbl = tblCol.StandaloneTable[i]; TableDictionary[StTbl.Name] = StTbl.Table; } catch { } } } }
/// <summary> /// Return the layer file path of the provided layer /// </summary> /// <param name="layer">ILayer</param> /// <returns>file path of layer</returns> private static string GetLayerPath(ILayer layer) { if (layer is IRasterLayer) { IRasterLayer rlayer = layer as IRasterLayer; return(rlayer.FilePath); } else if (layer is IMosaicLayer) { IMosaicLayer mlayer = layer as IMosaicLayer; return(mlayer.FilePath); } return(null); }
public void Execute() { try { // Create new spatial reference ISpatialReference spatialReference = null; if (this.SRef.ToLowerInvariant().Contains("projcs")) { spatialReference = new ProjectedCoordinateSystemClass(); } else { spatialReference = new GeographicCoordinateSystemClass(); } // Import SpatialReference Definition int bytes2; IESRISpatialReferenceGEN2 gen = (IESRISpatialReferenceGEN2)spatialReference; gen.ImportFromESRISpatialReference(this.SRef, out bytes2); // Create Search Extent IEnvelope extent = new EnvelopeClass(); extent.PutCoords(this.XMin, this.YMin, this.XMax, this.YMax); extent.SpatialReference = spatialReference; // Open Saved Layer File ILayerFile layerFile = new LayerFileClass(); layerFile.Open(this.Path); ILayer layer = layerFile.Layer; layerFile.Close(); // Where clause and list of selected OIDs string where = string.Empty; List <int> ids = new List <int>(); IImageServerLayer imageLayer = null; if (layer is IImageServerLayer) { imageLayer = (IImageServerLayer)layer; // Get Selection Set IFeatureLayerDefinition definition = layer as IFeatureLayerDefinition; if (definition != null) { // Find Selected OIDs if (definition.DefinitionSelectionSet != null) { if (definition.DefinitionSelectionSet.Count > 0) { IEnumIDs emumids = definition.DefinitionSelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } // Update Where Clause if (!string.IsNullOrEmpty(definition.DefinitionExpression)) { where = definition.DefinitionExpression; } } } else if (layer is IMosaicLayer) { IMosaicLayer mosaicLayer = (IMosaicLayer)layer; imageLayer = mosaicLayer.PreviewLayer; ITableDefinition tableDefinition = mosaicLayer as ITableDefinition; if (tableDefinition != null) { // Find Selected OIDs if (tableDefinition.DefinitionSelectionSet != null) { if (tableDefinition.DefinitionSelectionSet.Count > 0) { IEnumIDs emumids = tableDefinition.DefinitionSelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } // Update Where Clause if (!string.IsNullOrEmpty(tableDefinition.DefinitionExpression)) { where = tableDefinition.DefinitionExpression; } } } // Use FeatureSelected (if any) IFeatureSelection featureSelection = imageLayer as IFeatureSelection; if (featureSelection != null) { if (featureSelection.SelectionSet != null) { if (featureSelection.SelectionSet.Count > 0) { IEnumIDs emumids = featureSelection.SelectionSet.IDs; int id = emumids.Next(); while (id != -1) { ids.Add(id); id = emumids.Next(); } } } } // Get Bands ILongArray bands = new LongArrayClass(); IRasterRenderer rasterRenderer = imageLayer.Renderer; if (rasterRenderer != null) { IRasterRGBRenderer2 rasterRGBRenderer = rasterRenderer as IRasterRGBRenderer2; if (rasterRGBRenderer != null) { bands.Add(rasterRGBRenderer.UseRedBand ? rasterRGBRenderer.RedBandIndex : -1); bands.Add(rasterRGBRenderer.UseGreenBand ? rasterRGBRenderer.GreenBandIndex : -1); bands.Add(rasterRGBRenderer.UseBlueBand ? rasterRGBRenderer.BlueBandIndex : -1); bands.Add(rasterRGBRenderer.UseAlphaBand ? rasterRGBRenderer.AlphaBandIndex : -1); } } // Create Spatial Filter ISpatialFilter spatialFilter = new SpatialFilterClass() { Geometry = extent, SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects, WhereClause = where }; IImageServer imageServer = imageLayer.DataSource as IImageServer; if (imageServer == null) { return; } IImageServer3 imageServer3 = imageServer as IImageServer3; if (imageServer3 == null) { return; } IRecordSet recordSet = imageServer3.GetCatalogItems(spatialFilter); ICursor cursor = recordSet.get_Cursor(false); IFeatureCursor featureCursor = (IFeatureCursor)cursor; IFeature feature = featureCursor.NextFeature(); List <IFeature> list = new List <IFeature>(); int indexCategory = featureCursor.FindField("Category"); while (feature != null) { // Exclude non-primary images (no overviews) if (indexCategory != -1) { int cat = (int)feature.get_Value(indexCategory); if (cat != 1) { feature = featureCursor.NextFeature(); continue; } } // Exclude unselected features if (ids.Count > 0) { int oid = feature.OID; if (!ids.Contains(oid)) { feature = featureCursor.NextFeature(); continue; } } list.Add(feature); feature = featureCursor.NextFeature(); } // If nothing, fire event then exit if (list.Count == 0) { this.OnThumbnailSummary(new SummaryEventArgs()); return; } // Get Full Extent of Features SummaryEventArgs summary = new SummaryEventArgs() { XMin = list.Min(f => f.Shape.Envelope.CloneProject(spatialReference).XMin), YMin = list.Min(f => f.Shape.Envelope.CloneProject(spatialReference).YMin), XMax = list.Max(f => f.Shape.Envelope.CloneProject(spatialReference).XMax), YMax = list.Max(f => f.Shape.Envelope.CloneProject(spatialReference).YMax), Count = list.Count }; // Add Fields IFields fields = featureCursor.Fields; for (int i = 0; i < fields.FieldCount; i++) { IField field = fields.get_Field(i); switch (field.Type) { case esriFieldType.esriFieldTypeBlob: case esriFieldType.esriFieldTypeGeometry: case esriFieldType.esriFieldTypeGlobalID: case esriFieldType.esriFieldTypeGUID: case esriFieldType.esriFieldTypeRaster: case esriFieldType.esriFieldTypeXML: break; case esriFieldType.esriFieldTypeOID: case esriFieldType.esriFieldTypeDate: case esriFieldType.esriFieldTypeDouble: case esriFieldType.esriFieldTypeInteger: case esriFieldType.esriFieldTypeSingle: case esriFieldType.esriFieldTypeSmallInteger: case esriFieldType.esriFieldTypeString: summary.Fields.Add( new Field() { Name = field.Name, Alias = field.AliasName, Type = field.Type } ); break; default: break; } } // Raise Summary Event this.OnThumbnailSummary(summary); // Loop for each feature foreach (IFeature feat in list) { // Project Extent to Current Map Spatial Reference IEnvelope extentMap = feat.Shape.Envelope.CloneProject(spatialReference); int width; int height; if (extentMap.Width > extentMap.Height) { width = this.MaxImageSize; height = Convert.ToInt32((double)this.MaxImageSize * (double)extentMap.Height / (double)extentMap.Width); } else { width = Convert.ToInt32((double)this.MaxImageSize * (double)extentMap.Width / (double)extentMap.Height); height = this.MaxImageSize; } IMosaicRule mosaicRule = new MosaicRuleClass() { MosaicMethod = esriMosaicMethod.esriMosaicLockRaster, LockRasterID = feat.OID.ToString() }; IGeoImageDescription geoImageDescription = new GeoImageDescriptionClass() { BandSelection = bands.Count > 0 ? bands : null, MosaicRule = mosaicRule, Compression = "PNG", Width = width, Height = height, SpatialReference = spatialReference, Extent = extentMap, Interpolation = rstResamplingTypes.RSP_BilinearInterpolation, }; // Assembly MosaicRequest (will be executed in background thread) MosaicRequest mosaicRequest = new MosaicRequest() { MosaicExtractor = this, ImageServer = imageServer3, GeoImageDescription = geoImageDescription, XMin = extentMap.XMin, YMin = extentMap.YMin, XMax = extentMap.XMax, YMax = extentMap.YMax, }; // Add Attributes Names and Values foreach (Field field in summary.Fields) { int index = feat.Fields.FindField(field.Name); if (index < 0) { continue; } mosaicRequest.Attributes.Add(field.Name, feat.get_Value(index)); } // Start Mosaic Request in Background Thread Thread thread = new Thread(new ThreadStart(mosaicRequest.Execute)); MosaicEnvironment.Default.Threads.Add(thread); thread.Start(); } } catch { } }
private void btnChangeY_Click(object sender, EventArgs e) { maploaded = true; System.Windows.Forms.Cursor.Current = Cursors.WaitCursor; if ((cboBotYear.Text != "") && (cboTopYear.Text != "")) { label3.Text = cboTopYear.Text; label4.Text = cboBotYear.Text; if (!(topPublicMosaicLayer == null)) { //Delete old top layer, ??check still the same top to save time? m_MapControl.ActiveView.FocusMap.DeleteLayer((ILayer)topPublicMosaicLayer); m_MapControltop.ActiveView.FocusMap.DeleteLayer((ILayer)topPublicMosaicLayer); } if (!(botPublicMosaicLayer == null)) { //Delete old bot layer, ??check still the same bot to save time? m_MapControl.ActiveView.FocusMap.DeleteLayer((ILayer)botPublicMosaicLayer); m_MapControlbase.ActiveView.FocusMap.DeleteLayer((ILayer)botPublicMosaicLayer); } //This version, we will use mosaicdataset======================== IMosaicWorkspaceExtensionHelper MosaicWsHelper = new MosaicWorkspaceExtensionHelperClass(); IWorkspaceFactory2 workspaceFactory = new FileGDBWorkspaceFactoryClass(); string mosaicdatabase = ConfigurationManager.AppSettings["MosaicDatabase"]; IWorkspace ws = workspaceFactory.OpenFromFile(mosaicdatabase, 0); IMosaicWorkspaceExtension mosaicWsExtension = MosaicWsHelper.FindExtension(ws); //BOT strBaseYr = "AmherstOrthoMosaic" + cboBotYear.Text; IMosaicDataset pMosaicDatasetBot = mosaicWsExtension.OpenMosaicDataset(strBaseYr); botPublicMosaicLayer = new MosaicLayerClass(); botPublicMosaicLayer.CreateFromMosaicDataset(pMosaicDatasetBot); if (!(botPublicMosaicLayer == null)) { IFeatureLayer footprint = (IFeatureLayer)botPublicMosaicLayer.FootprintLayer; ((ILayer)footprint).Visible = false; ILayer botLayer = (ILayer)botPublicMosaicLayer; botLayer.MinimumScale = 6000; m_MapControl.ActiveView.FocusMap.AddLayer(botLayer); m_MapControlbase.ActiveView.FocusMap.AddLayer(botLayer); } //TOP strTopYr = "AmherstOrthoMosaic" + cboTopYear.Text; IMosaicDataset pMosaicDatasetTop = mosaicWsExtension.OpenMosaicDataset(strTopYr); topPublicMosaicLayer = new MosaicLayerClass(); topPublicMosaicLayer.CreateFromMosaicDataset(pMosaicDatasetTop); if (!(topPublicMosaicLayer == null)) { IFeatureLayer footprint = (IFeatureLayer)topPublicMosaicLayer.FootprintLayer; ((ILayer)footprint).Visible = false; ILayer topLayer = (ILayer)topPublicMosaicLayer; topLayer.MinimumScale = 6000; m_MapControl.ActiveView.FocusMap.AddLayer(topLayer); m_MapControltop.ActiveView.FocusMap.AddLayer(topLayer); ILayerEffectProperties lepSwip = m_CommandsEnvironment as ILayerEffectProperties; lepSwip.SwipeLayer = topLayer; //===possible problem toplayer is not public variable any more } IFeatureLayer featurelayerParcel = new FeatureLayerClass(); featurelayerParcel.FeatureClass = featureClassParcels; featurelayerParcel.Name = "parcels"; featurelayerParcel.MinimumScale = 6000; featurelayerParcel.Visible = false; IRgbColor pLColor = new RgbColorClass(); pLColor.Red = 255; pLColor.Green = 255; pLColor.Blue = 255; ISimpleFillSymbol pSFS = new SimpleFillSymbolClass(); ICartographicLineSymbol pCLineS = new CartographicLineSymbolClass(); pCLineS.Color = pLColor; ILineProperties lineProperties = pCLineS as ILineProperties; lineProperties.Offset = 0; System.Double[] hpe = new System.Double[4]; hpe[0] = 7; hpe[1] = 2; hpe[2] = 1; hpe[3] = 2; ITemplate template = new TemplateClass(); template.Interval = 3; for (int i = 0; i < hpe.Length; i = i + 2) { template.AddPatternElement(hpe[i], hpe[i + 1]); } lineProperties.Template = template; pCLineS.Width = 1; pCLineS.Cap = esriLineCapStyle.esriLCSButt; pCLineS.Join = esriLineJoinStyle.esriLJSBevel; pCLineS.Color = pLColor; pSFS.Outline = pCLineS; pSFS.Style = esriSimpleFillStyle.esriSFSHollow; IGeoFeatureLayer pGFL = (IGeoFeatureLayer)featurelayerParcel; ISimpleRenderer pRend = pGFL.Renderer as ISimpleRenderer; pRend.Symbol = pSFS as ISymbol; if ((Helper.FindMyFeatureLayer(m_MapControl.ActiveView.FocusMap, "parcels") == null)) { if (!(featurelayerParcel == null)) { m_MapControl.ActiveView.FocusMap.AddLayer(featurelayerParcel); m_MapControltop.ActiveView.FocusMap.AddLayer(featurelayerParcel); m_MapControlbase.ActiveView.FocusMap.AddLayer(featurelayerParcel); } } else { //is this temp necessary??????? IFeatureLayer parcellayertemp = Helper.FindMyFeatureLayer(m_MapControl.ActiveView.FocusMap, "parcels"); m_MapControl.ActiveView.FocusMap.MoveLayer(parcellayertemp, 0); m_MapControltop.ActiveView.FocusMap.MoveLayer(parcellayertemp, 0); m_MapControlbase.ActiveView.FocusMap.MoveLayer(parcellayertemp, 0); } //MessageBox.Show("Top aerophoto is taken on: " + cboTopYear.Text + ".\r\nBottom areophoto is taken on: " + cboBotYear.Text + "."); } else { MessageBox.Show("Please select two years to compare"); } GeneratePageLayout(); System.Windows.Forms.Cursor.Current = Cursors.Default; }