Exemplo n.º 1
0
        private static IFeatureLayer OpenLayerPackage(string pathToLPK)
        {
            ILayerFile layerFile = new LayerFileClass();

            layerFile.Open(pathToLPK);
            return(layerFile.Layer as IFeatureLayer);
        }
Exemplo n.º 2
0
        public static ILayer CreateLayer(string pathLayerFile)
        {
            try
            {
                if (System.IO.File.Exists(pathLayerFile) == true)
                {
                    ILayer     layer;
                    ILayerFile layerFile = new LayerFileClass();
                    layerFile.Open(pathLayerFile);
                    layer = layerFile.Layer;

                    // System.Runtime.InteropServices.Marshal.ReleaseComObject(layerFile);

                    return(layer);
                }
                else
                {
                    return(null);
                }
            }
            catch (Exception ex)
            {
                Trace.WriteLine("Umbriel.ArcGIS.Layer.Util.LayerHelper.CreateLayer  Exception: " + ex.Message + "\n\nStackTrace: " + ex.StackTrace);
                throw;
            }
        }
 private void btnLoadlpk_Click(object sender, EventArgs e)
 {
   try
   {
     ILayerFile layerFile = new LayerFileClass();
     // Test to see if we can connect to ArcGIS.com
     if (IsConnected())
     {
       // If so, open the Layer Package from ArcGIS.com, this will get the most recent data.
       // for the package.  If there is no change, the data will not get re-downloaded, 
       // just use what is stored on disk.
       layerFile.Open(txtLayerPackage.Text.ToString());
     }
     else
     {
       // If we cannot connect to ArcGIS.com use what was previously downloaded.
       if (DoesPackageExist(PackageType.LayerPackage))
       {
         foreach (FileInfo layerpackage in layerFiles)
         {
           // Layer packages can have multiple layers included in them.  However,
           // the LayerFile and MapDocument classes will only get the first one.
           // Here the sample is using an array so we can get all the layer files
           // and not worry about the name.
           layerFile.Open(layerpackage.FullName);
         }
       }
     }
     ILayer layer = layerFile.Layer;
     axMapControl1.AddLayer(layer);
   }
   catch (Exception ex)
   {
     MessageBox.Show("Failed to open Layer Package!", ex.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
   }
 }
 private void btnLoadlpk_Click(object sender, EventArgs e)
 {
     try
     {
         ILayerFile layerFile = new LayerFileClass();
         // Test to see if we can connect to ArcGIS.com
         if (IsConnected())
         {
             // If so, open the Layer Package from ArcGIS.com, this will get the most recent data.
             // for the package.  If there is no change, the data will not get re-downloaded,
             // just use what is stored on disk.
             layerFile.Open(txtLayerPackage.Text.ToString());
         }
         else
         {
             // If we cannot connect to ArcGIS.com use what was previously downloaded.
             if (DoesPackageExist(PackageType.LayerPackage))
             {
                 foreach (FileInfo layerpackage in layerFiles)
                 {
                     // Layer packages can have multiple layers included in them.  However,
                     // the LayerFile and MapDocument classes will only get the first one.
                     // Here the sample is using an array so we can get all the layer files
                     // and not worry about the name.
                     layerFile.Open(layerpackage.FullName);
                 }
             }
         }
         ILayer layer = layerFile.Layer;
         axMapControl1.AddLayer(layer);
     }
     catch (Exception ex)
     {
         MessageBox.Show("Failed to open Layer Package!", ex.ToString(), MessageBoxButtons.OK, MessageBoxIcon.Error);
     }
 }
Exemplo n.º 5
0
        private static async Task <ILayer> InitLayerFileAsync(string file)
        {
            await EsriLicense.GetLicenseAsync();

            var layerFile = new LayerFileClass();
            var layer     = await Task.Run(() =>
            {
                layerFile.Open(file);
                var l = layerFile.Layer;
                layerFile.Close();
                return(l);
            });

            return(layer);
        }
        private static INAContext GetContextFromLayer(string layerFileName)
        {
            ILayerFile layerFile = new LayerFileClass();

            try
            {
                layerFile.Open(layerFileName);
            }
            catch (Exception e)
            {
                throw new InvalidOdLayerException($"Unable to open layer file: {layerFileName}. Make sure it exists and is valid.  Try opening it in ArcMap.{Environment.NewLine}" +
                                                  $"Error type: {e.GetType()}{Environment.NewLine}" +
                                                  $"Error message: {e.Message}");
            }

            var naLayer = layerFile.Layer as INALayer;

            if (naLayer == null)
            {
                throw new InvalidOdLayerException($"Unable to get INALayer from layer file: {layerFileName}. Is your layer a Network Analysis layer?");
            }

            var context = naLayer.Context;

            if (context == null)
            {
                throw new InvalidOdLayerException($"Null context on layer file: {layerFileName}. Is your layer a valid Network Analysis layer?");
            }

            var odSolver = context.Solver as INAODCostMatrixSolver2;

            if (odSolver == null)
            {
                throw new InvalidOdLayerException($"Input layer '{layerFileName}' must be an Origin-Destination Cost Matrix layer.");
            }

            return(context);
        }
        private static void doSymbolizeLayer(IActiveView activeView, int i, string fieldName, bool doRemove, string filenamePrefix, string filenameSuffix, string filename)
        {
            if (filename == "") filename = fieldName;

            try
            {
                if (ArcMap.Document.SelectedLayer == null)
                {
                    System.Windows.Forms.MessageBox.Show("Select a layer before continuing.");
                    return;
                }

                IFeatureLayer ifl = (IFeatureLayer)ArcMap.Document.SelectedLayer;

                if (fieldName == "Chemistry1" && ifl.FeatureClass.FindField(fieldName) < 0)
                {
                    //try Chem if Chemistry1 not found
                    fieldName = "Chem";
                }

                if (ifl.FeatureClass.FindField(fieldName) < 0)
                {
                    System.Windows.Forms.MessageBox.Show("Selected layer does not contain the " + fieldName + " field and can't be symbolized " +
                        "with this tool. Select another layer to continue.");
                    return;
                }

                string geomTypeName = "Polygon";

                if (ifl.FeatureClass.ShapeType == esriGeometryType.esriGeometryPolyline)
                    geomTypeName = "Polyline";

                var asmPath = GetAssemblyPath();

                ILayerFile layerFile = new LayerFileClass();

                if (filenamePrefix == "NWIPlus")
                {
                    layerFile.Open(asmPath + "/Symbology/" + filenamePrefix + filename + ".lyr");
                }
                else
                {
                    if (fieldName == "Chem")
                    {
                        layerFile.Open(asmPath + "/Symbology/" + filenamePrefix + "Chemistry1" + filenameSuffix + ".lyr");
                    }
                    else
                    {
                        layerFile.Open(asmPath + "/Symbology/" + filenamePrefix + filename +filenameSuffix + ".lyr");
                    }
                }

                IGeoFeatureLayer igfl = (IGeoFeatureLayer)layerFile.Layer;
                IUniqueValueRenderer iuvr = (IUniqueValueRenderer)igfl.Renderer;
                IUniqueValueRenderer iuvr_new = iuvr;

            #if false
                if( filenameSuffix == "Rated") {
                    iuvr_new = new UniqueValueRendererClass();
                    iuvr_new.FieldCount = 1;
                    iuvr_new.Field[0] = fieldName;
                    iuvr_new.DefaultSymbol = iuvr.DefaultSymbol;
                    iuvr_new.UseDefaultSymbol = false;

            //                    iuvr.UseDefaultSymbol = false;
            //                    iuvr.Field[0] = symbType;

                    for (int l = 0; l < iuvr.ValueCount; l++)
                    {
                        //iuvr.Heading[iuvr.Value[l]] = symbType;
                        iuvr_new.AddValue(iuvr.Value[l], fieldName, iuvr.Symbol[iuvr.Value[l]]);
                    }
                }
            #endif

                /*ILegendInfo li = (ILegendInfo)iuvr;
                ILegendGroup gp = (ILegendGroup)li.LegendGroup[0];
                gp.Heading = symbType;*/

                IFeatureWorkspace iw = (IFeatureWorkspace)((IDataset)ifl.FeatureClass).Workspace;
                ISQLSyntax sql = (ISQLSyntax)iw;

                string prefix = sql.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierPrefix);
                string suffix = sql.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierSuffix);

                IQueryFilter f = new QueryFilterClass();
                int vCount = iuvr_new.ValueCount;

                List<string> values = new List<string>();

            #if false
                for (int k0 = 0; k0 < iuvr_new.ValueCount; k0++)
                {
                    try
                    {
                        IFillSymbol ifs = (IFillSymbol) iuvr_new.Symbol[iuvr.Value[k0]];
                        ifs.Outline = null;
                        //ifs.Outline.Width = 0;
                    }
                    catch(Exception abcd) {
                    }
                }
            #endif

                if (doRemove)
                {
                    char[] delimiter = { iuvr_new.FieldDelimiter[0] };

                    for (int j = 0; j < vCount; j++)
                    {
                        f.WhereClause = "";
                        string[] currValues = iuvr_new.Value[j].Split(delimiter);

                        for (int k = 0; k < currValues.Length; k++)
                        {
                            if (k > 0)
                                f.WhereClause += " AND ";

                            f.WhereClause += prefix + iuvr_new.Field[k] + suffix + " = '" + currValues[k].Trim() + "'";
                        }

                        ICursor fc = null;
                        bool bFound = false;

                        try
                        {
                            fc = ((ITable)ifl).Search(f, true);
                            bFound = (fc.NextRow() == null) ? false : true;
                        }
                        catch (Exception v)
                        {
                            //fc = null;
                        }

                        if (!bFound)
                            values.Add(iuvr_new.Value[j]);
                    }
                }

                foreach (string v in values)
                {
                    iuvr_new.RemoveValue(v);
                }

                if (iuvr_new.ValueCount > 0)
                {
                    IGeoFeatureLayer igd_dest = (IGeoFeatureLayer)ifl;
                    igd_dest.Renderer = (IFeatureRenderer)iuvr_new;

                    ArcMap.Document.ActiveView.ContentsChanged();
                    ArcMap.Document.UpdateContents();

                    ArcMap.Document.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
                }
                else
                {
                    System.Windows.Forms.MessageBox.Show("No values found. No changes will be made to the symbology");
                    return;
                }
                //ArcMap.Document.CurrentContentsView.Deactivate();
                //ArcMap.Document.ContentsView[0].Activate(ArcMap.Application.hWnd, ArcMap.Document);
            }
            catch (Exception e)
            {
            }
            finally
            {
            }
        }
Exemplo n.º 8
0
        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 { }
        }
Exemplo n.º 9
0
        static void Main(string[] args)
        {
            //arg 0 = source layer string file gdb string with feature class name
            //arg 1 = target layer path for fabric layer
            //arg 2 = control point tolerance (in projection units) to match with existing fabric points, -1 means don't do it
            //arg 3 = merge tolerance. Merge with existing control points if within tolerance, -1 means turn off merging
            //arg 4 = control merging choices for attributes [KeepExistingAttributes | UpdateExistingAttributes]
            //arg 5 = must have same name to merge if within the tolerance? [NamesMustMatchToMerge | IgnoreNames]
            //arg 6 = if control is merged keep existing names or update with incoming names? [KeepExistingNames | UpdateExistingNames]
            //.....(arg 6 is ignored if arg 5 = NamesMustMatchToMerge)
            //arg 7 = control merging choices for coordinates [UpdateXY | UpdateXYZ | UpdateZ | KeepExistingXYZ]
            //arg 8 = create a log file at the same location as the executable? [LoggingOn | LoggingOff]
            //.....(a log file is always generated unless LoggingOff is explcitly used)

            //ESRI License Initializer generated code.
            m_AOLicenseInitializer.InitializeApplication(new esriLicenseProductCode[] { esriLicenseProductCode.esriLicenseProductCodeStandard, esriLicenseProductCode.esriLicenseProductCodeAdvanced },
                                                         new esriLicenseExtensionCode[] { });
            //ESRI License Initializer generated code.
            //Do not make any call to ArcObjects after ShutDownApplication()
            int iLen = args.Length;

            if (iLen < 2)
            {
                UsageMessage();
                m_AOLicenseInitializer.ShutdownApplication();
                return;
            }

            ITrackCancel pTrkCan = new CancelTrackerClass();
            // Create and display the Progress Dialog
            IProgressDialogFactory pProDlgFact = new ProgressDialogFactoryClass();
            IProgressDialog2       pProDlg     = pProDlgFact.Create(pTrkCan, 0) as IProgressDialog2;

            try
            {
                ICadastralControlImporter pControlPointCadastralImp = new CadastralControlImporterClass();

                // args[0] ============================================
                string PathToFileGDBandFeatureClass = args[0];

                if (args[0].Contains(":") && args[0].Contains("\\"))
                {
                    PathToFileGDBandFeatureClass = args[0];
                }
                else
                {
                    string[] sExecPathArr = System.Reflection.Assembly.GetEntryAssembly().Location.Split('\\');
                    string   x            = "";
                    for (int i = 0; i < (sExecPathArr.Length - 1); i++)
                    {
                        x += sExecPathArr[i] + "\\";
                    }

                    PathToFileGDBandFeatureClass = x + PathToFileGDBandFeatureClass;
                }

                string[] PathToFileGDBArray       = PathToFileGDBandFeatureClass.Split('\\');
                string   NameOfSourceFeatureClass = PathToFileGDBArray[PathToFileGDBArray.Length - 1];
                string   PathToFileGDB            = "";

                for (int i = 0; i < (PathToFileGDBArray.Length - 1); i++)
                {
                    PathToFileGDB += PathToFileGDBArray[i] + "\\";
                }

                PathToFileGDB = PathToFileGDB.TrimEnd('\\');

                if (!System.IO.Directory.Exists(PathToFileGDB))
                {
                    throw new Exception("File does not exist. [" + PathToFileGDB + "]");
                }


                // args[1] ============================================

                string layerFilePathToFabric = args[1];

                if (!(layerFilePathToFabric.Contains(":") && layerFilePathToFabric.Contains("\\")))
                {
                    string[] sExecPathArr = System.Reflection.Assembly.GetEntryAssembly().Location.Split('\\');
                    string   x            = "";
                    for (int i = 0; i < (sExecPathArr.Length - 1); i++)
                    {
                        x += sExecPathArr[i] + "\\";
                    }

                    layerFilePathToFabric = x + layerFilePathToFabric;
                }

                if (!System.IO.File.Exists(layerFilePathToFabric))
                {
                    throw new Exception("File does not exist. [" + layerFilePathToFabric + "]");
                }

                ILayerFile layerFileToTargetFabric = new LayerFileClass();
                layerFileToTargetFabric.Open(layerFilePathToFabric);
                ILayer pLayer = layerFileToTargetFabric.Layer;
                ICadastralFabricLayer pParcelFabLyr       = pLayer as ICadastralFabricLayer;
                ICadastralFabric      pParcelFabric       = pParcelFabLyr.CadastralFabric;
                IDataset             pDS                  = pParcelFabric as IDataset;
                IName                pDSName              = pDS.FullName;
                ICadastralFabricName pCadastralFabricName = pDSName as ICadastralFabricName;

                IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactory();
                IFeatureWorkspace pFWS             = (IFeatureWorkspace)workspaceFactory.OpenFromFile(PathToFileGDB, 0);
                pDS = (IDataset)pFWS.OpenFeatureClass(NameOfSourceFeatureClass);
                IName pSourceFeatClassName = pDS.FullName;

                //  args[2] ============================================
                bool   bHasControlTolerance = iLen > 2;
                double dControlToFabricPointMatchTolerance = -1;
                if (bHasControlTolerance)
                {
                    if (!Double.TryParse(args[2], out dControlToFabricPointMatchTolerance))
                    {
                        throw new Exception("The third parameter should be a numeric value. [" + args[2] + "]");
                    }
                }
                pControlPointCadastralImp.ControlPointTolerance = dControlToFabricPointMatchTolerance;
                //'***** performance, -1 means that matching to existing fabric points is turned off
                pControlPointCadastralImp.UseShapeField = true;

                //============= Arguments for merging control points ===============
                // args[3] [4] [5] [6] [7] ============================================
                bool bIsMergingControlPoints = (iLen == 7);
                if (bIsMergingControlPoints)
                {
                    //arg 3 = merge tolerance. Merge with existing control points if within tolerance, -1 means turn off merging
                    //arg 4 = control merging choices for attributes [KeepExistingAttributes | UpdateExistingAttributes]
                    //arg 5 = must have same name to merge if within the tolerance? [NamesMustMatchToMerge | IgnoreNames]
                    //arg 6 = if control is merged keep existing names or update with incoming names? [KeepExistingNames | UpdateExistingNames]
                    //.....(arg 6 is ignored if arg 5 = NamesMustMatchToMerge)
                    //arg 7 = control merging choices for coordinates [UpdateXY | UpdateXYZ | UpdateZ | KeepExistingXYZ]

                    double dControlPointMergingTolerance = -1;
                    if (!Double.TryParse(args[3], out dControlPointMergingTolerance))
                    {
                        { throw new Exception("The fourth parameter should be a numeric value. [" + args[3] + "]"); }
                    }
                    ICadastralControlImporterMerging pImpMerge = pControlPointCadastralImp as ICadastralControlImporterMerging;
                    pImpMerge.MergeCloseControl     = dControlPointMergingTolerance > 0;
                    pImpMerge.CloseControlTolerance = dControlPointMergingTolerance;
                    if (args[4].ToLower().Contains("updateexistingattributes"))
                    {
                        pImpMerge.MergeAttributesOption = esriCFControlMergingAttributes.esriCFControlMergingUpdateAttributes;
                    }
                    else
                    {
                        pImpMerge.MergeAttributesOption = esriCFControlMergingAttributes.esriCFControlMergingKeepAttributes;
                    }

                    pImpMerge.MergeControlNameCaseSensitive = false;

                    pImpMerge.MergeControlSameName = args[5].ToLower().Contains("namesmustmatchtomerge");

                    if (args[6].ToLower().Contains("updateexistingnames") && !args[5].ToLower().Contains("namesmustmatchtomerge"))
                    {
                        pImpMerge.MergeNameOption = esriCFControlMergingName.esriCFControlMergingUpdateExistingNames;
                    }
                    else
                    {
                        pImpMerge.MergeNameOption = esriCFControlMergingName.esriCFControlMergingKeepExistingNames;
                    }

                    if (args[7].ToLower() == "updatexy")
                    {
                        pImpMerge.MergeCoordinateOption = esriCFControlMergingCoordinate.esriCFControlMergingUpdateXY;
                    }
                    else if (args[7].ToLower() == "updatexyz")
                    {
                        pImpMerge.MergeCoordinateOption = esriCFControlMergingCoordinate.esriCFControlMergingUpdateXYZ;
                    }
                    else if (args[7].ToLower() == "updatez")
                    {
                        pImpMerge.MergeCoordinateOption = esriCFControlMergingCoordinate.esriCFControlMergingUpdateZ;
                    }
                    else if (args[7].ToLower() == "keepexistingxyz")
                    {
                        pImpMerge.MergeCoordinateOption = esriCFControlMergingCoordinate.esriCFControlMergingKeepExistingCoordinates;
                    }
                }

                ICadastralImporter pControlImporter = (ICadastralImporter)pControlPointCadastralImp;

                bool bHasExplicitLogFileParameter = (iLen > 8);
                bool bExplicitTurnLoggingOff      = false;
                /// Argument for logging importer results
                //arg 8 = create a log file at the same location as the executable? [LoggingOn | LoggingOff | <path to logfile>]
                //.....(a log file is always generated unless LoggingOff is explcitly used)

                string sLogFilePath = "LogControlImport";
                if (bHasExplicitLogFileParameter)
                {
                    if (args[8].ToLower() == "loggingoff")
                    {
                        bExplicitTurnLoggingOff = true;
                    }
                    if (args[8].ToLower() != "loggingon" && !bExplicitTurnLoggingOff)
                    {
                        if (args[8].Contains(":") && args[8].Contains("\\")) //if (args[8].ToLower() != "loggingon")
                        {
                            sLogFilePath = args[8];
                        }
                        else
                        {
                            string[] sExecPathArr = System.Reflection.Assembly.GetEntryAssembly().Location.Split('\\');
                            string   x            = "";
                            for (int i = 0; i < (sExecPathArr.Length - 1); i++)
                            {
                                x += sExecPathArr[i] + "\\";
                            }
                            sLogFilePath = x + args[8];
                        }
                    }
                }
                else
                {
                    string[] sExecPathArr = System.Reflection.Assembly.GetEntryAssembly().Location.Split('\\');
                    string   x            = "";
                    for (int i = 0; i < (sExecPathArr.Length - 1); i++)
                    {
                        x += sExecPathArr[i] + "\\";
                    }
                    sLogFilePath = x + sLogFilePath;
                }
                sLogFilePath += ".log";

                if (!bExplicitTurnLoggingOff)
                {
                    pControlImporter.OutputLogfile = sLogFilePath; //default location is same as executable
                }
                //Set the properties of the Progress Dialog
                pProDlg.CancelEnabled = false;
                pProDlg.Description   = "Importing Control Point data ...";
                pProDlg.Title         = "Importing Control Points";
                pProDlg.Animation     = esriProgressAnimationTypes.esriProgressGlobe;

                Console.WriteLine("Starting data load...");
                pControlImporter.Import(pSourceFeatClassName, pCadastralFabricName, pTrkCan); //BUG fails if the TrackCancel is null
                Console.WriteLine("Finished data load...");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                //UsageMessage();
            }
            finally
            {
                if (pProDlg != null)
                {
                    pProDlg.HideDialog();
                }
                m_AOLicenseInitializer.ShutdownApplication();
            }
        }
Exemplo n.º 10
0
        static void RunJob(CmdArgs args)
        {
            Log.Information("Processing file {LayerFile}", args.InputFile);
            var inputFile = new FileInfo(args.InputFile);

            ILayerFile inputLayer = new LayerFileClass();

            inputLayer.Open(inputFile.FullName);

            IGeoFeatureLayer geoFeatureLayer = inputLayer.Layer as IGeoFeatureLayer;
            //var featureLayer = inputLayer.Layer as FeatureLayer;
            //IFeatureClass featureClass = featureLayer.FeatureClass;
            //var renderer = geoFeatureLayer.Renderer as ISimpleRenderer;

            var esriRgb = CreateRGBColor(args.Colour);

            ISimpleRenderer simpleRenderer = new SimpleRendererClass();

            var symbolType = args.SymbolType.ToLowerInvariant();

            if (args.GetSymbolTypeFromInputFileName)
            {
                var tempSymbolType = inputFile.Name.Replace(inputFile.Extension, "").ToLowerInvariant();
                if (string.Equals(tempSymbolType, "point", StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(tempSymbolType, "polyline", StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(tempSymbolType, "line", StringComparison.OrdinalIgnoreCase) ||
                    string.Equals(tempSymbolType, "polygon", StringComparison.OrdinalIgnoreCase))
                {
                    symbolType = tempSymbolType;
                }
            }

            switch (symbolType)
            {
            case "point":
                IMarkerSymbol pointSymbol = new SimpleMarkerSymbolClass();
                pointSymbol.Size      = args.PointSize;
                pointSymbol.Color     = esriRgb;
                simpleRenderer.Symbol = (ISymbol)pointSymbol;
                break;

            case "polyline":
            case "line":
                ILineSymbol lineSymbol = new SimpleLineSymbolClass();
                lineSymbol.Width      = args.LineWidth;
                lineSymbol.Color      = esriRgb;
                simpleRenderer.Symbol = (ISymbol)lineSymbol;
                break;

            case "polygon":
                ILineSymbol outlineSymbol = new SimpleLineSymbolClass();
                outlineSymbol.Width = args.LineWidth;
                outlineSymbol.Color = CreateRGBColor(args.OutlineColour) ?? esriRgb;
                ISimpleFillSymbol fillSymbol = new SimpleFillSymbolClass();
                fillSymbol.Outline    = outlineSymbol;
                fillSymbol.Color      = esriRgb;
                simpleRenderer.Symbol = (ISymbol)fillSymbol;
                break;

            default:
                inputLayer.Close();
                Log.Warning("Unrecognized symbol type {SymbolType}. No symbol set for the layer renderer. Valid symbol types are point, polyline, line or polygon.", args.SymbolType);
                return;
            }

            geoFeatureLayer.Renderer = (IFeatureRenderer)simpleRenderer;

            var outputFileLocation = args.SaveFileNameUnique ? GetUniqueFilename(Path.Combine(args.OutputFolder, inputFile.Name)) : Path.Combine(args.OutputFolder, inputFile.Name);
            var outputFile         = new FileInfo(outputFileLocation);

            Log.Information("Saving processed layer file to {OutputFile}", outputFile.FullName);

            SaveToLayerFile(outputFile.FullName, inputLayer.Layer);

            inputLayer.Close();
        }
        internal void BuildLayer(string plant)
        {
            //Validate must be called by the user before calling BuildLayers
            if (_layer == null)
                throw new Exception("Unable to build this layer due to invalid (or unvalidated) configuration properties.");

            //reload the layer file to create a new layer (we may get called many times)
            var layerFile = new LayerFileClass();
            layerFile.Open(LayerFileName);
            _layer = layerFile.Layer;
            layerFile.Close();

            string definitionQuery;
            if (string.IsNullOrEmpty(plant))
            {
                plant = "unspecified";
                definitionQuery = "\"" + FieldName + "\" = '' OR \"" + FieldName + "\" is null";
            }
            else
            {
                definitionQuery = "\"" + FieldName + "\" = '" + plant.Replace("'", "''") + "'";
            }
            _layer.Name = string.Format(LayerNameFormat, plant);
            ((IFeatureLayerDefinition2)_layer).DefinitionExpression = definitionQuery;
            // Call the layer fixer delegate
            var layerFixer = LayerFixer;
            if (layerFixer != null)
                layerFixer(_layer);
            ArcMap.Document.AddLayer(_layer);
        }
        public virtual string[] getQueryValueOptions(string fieldname, string filename)
        {
            ESRI.ArcGIS.Carto.ILayerFile layerFile = new LayerFileClass();
            //layerFile.Open("\\\\tornado\\Research3\\Tony\\Wetlands\\wetlands10.1\\10.0\\" + queryType + "_Poly.lyr");
            layerFile.Open(GetAssemblyPath() + "\\Symbology\\" + filename + ".lyr");

            IGeoFeatureLayer igfl_lyr = (IGeoFeatureLayer)layerFile.Layer;
            IUniqueValueRenderer iuvr = (IUniqueValueRenderer)igfl_lyr.Renderer;

            fields = new string[]{ fieldname };

            if (iuvr.FieldCount == 1)
            {
                string[] s = new string[iuvr.ValueCount];

                for (int j = 0; j < iuvr.ValueCount; j++)
                {
                    s[j] = iuvr.Label[iuvr.Value[j]] + " (" + iuvr.Value[j] + ")";
                }

                return s;
            }
            else
            {
                string[] s = new string[iuvr.ValueCount];
                string WhereClause = "";

                char[] delimiter = { iuvr.FieldDelimiter[0] };

                string prefix = ""; //sql.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierPrefix);
                string suffix = ""; //'sql.GetSpecialCharacter(esriSQLSpecialCharacters.esriSQL_DelimitedIdentifierSuffix);

                List<string> l = new List<string>();

                for (int j = 0; j < iuvr.ValueCount; j++ )
                {
                    string[] currValues = iuvr.Value[j].Split(delimiter);

                    s[j] = iuvr.Label[iuvr.Value[j]] + "( " + string.Join(";", currValues) + " )";
                }

                for (int k = 0; k < iuvr.FieldCount; k++)
                {
                    l.Add(iuvr.Field[k]);
                }

                fields = l.ToArray();
            #if false

                for (int j = 0; j < iuvr.ValueCount; j++)
                {
                    WhereClause = "";
                    string[] currValues = iuvr.Value[j].Split(delimiter);

                    for (int k = 0; k < currValues.Length; k++)
                    {
                        if (k > 0)
                            WhereClause += " AND ";

                        WhereClause += prefix + iuvr.Field[k] + suffix + " = '" + currValues[k].Trim() + "'";
                    }

                    s[j] = iuvr.Label[iuvr.Value[j]] + " (" + WhereClause + ")";
                }
            #endif
                return s;
            }
        }
Exemplo n.º 13
0
        /// <summary>
        /// Builds the index file with layers
        /// </summary>
        /// <param name="searchPaths">The search paths.</param>
        public void BuildIndex(List <string> searchPaths)
        {
            if (!File.Exists(this.IndexPath))
            {
                CreateNewIndexFile(this.IndexPath);
            }

            List <string> layerFiles = new List <string>();

            int i = 0;


            foreach (string searchPath in searchPaths)
            {
                i++;

                LayerfileIndexer indexer = new LayerfileIndexer(searchPath);
                indexer.Search();
                layerFiles.AddRange(indexer.LayerFiles);

                OnProgressUpdate(i, searchPaths.Count, "Scanning Search Path " + searchPath);
            }

            List <string> insertSQLStatements = new List <string>();

            i = 0;
            foreach (string filePath in layerFiles)
            {
                i++;

                FileInfo fileInfo = new FileInfo(filePath);


                ILayerFile layerFile = new LayerFileClass();
                layerFile.Open(filePath);
                ILayer layer = layerFile.Layer;

                ILayerGeneralProperties layerProps = (ILayerGeneralProperties)layer;
                ILayerExtensions        layerExt   = (ILayerExtensions)layer;

                string lyrGUID  = "00000000-0000-0000-0000-000000000000";
                string revision = "0";

                if (Layer.Util.LayerExtHelper.UmbrielPropertySetExists(layerExt))
                {
                    IPropertySet propertySet = Util.LayerExtHelper.GetUmbrielPropertySet(layerExt);
                    if (propertySet != null && Util.LayerExtHelper.PropertyExists(propertySet, "GUID"))
                    {
                        lyrGUID = propertySet.GetProperty("GUID").ToString();
                    }

                    if (propertySet != null && Util.LayerExtHelper.PropertyExists(propertySet, "revision"))
                    {
                        revision = propertySet.GetProperty("revision").ToString();
                    }
                }

                StringBuilder sql = new StringBuilder();
                sql.AppendLine("INSERT INTO layerfile ");
                sql.AppendLine("(lyrgid,lyrName,lyrDescription,lyrFileName,lyrFullPath,lyrParentDir,lyrRevision,DateRecCreated,DateRecModified)");
                sql.AppendLine(" VALUES (");

                sql.AppendLine("'" + lyrGUID + "'");
                sql.AppendLine(",'" + layer.Name.Replace("'", "''") + "'");
                sql.AppendLine(",'" + layerProps.LayerDescription.Replace("'", "''") + "'");
                sql.AppendLine(",'" + Path.GetFileName(filePath) + "'");
                sql.AppendLine(",\"" + filePath + "\"");
                sql.AppendLine(",'" + Path.GetDirectoryName(filePath) + "'");
                sql.AppendLine("," + revision + "");

                sql.AppendLine(",'" + SqliteDateString(DateTime.Now) + "'");
                sql.AppendLine(",'" + SqliteDateString(DateTime.Now) + "'");

                sql.AppendLine(")");

                Debug.WriteLine(sql.ToString());
                insertSQLStatements.Add(sql.ToString());

                OnProgressUpdate(i, layerFiles.Count, "Building layer data file: ");

                if (layer != null)
                {
                    // System.Runtime.InteropServices.Marshal.FinalReleaseComObject(layerFile);
                }
            }

            i = 0;

            // build insert sql statement
            using (SQLiteConnection cnn = new SQLiteConnection(this.GetDBConnectionString()))
            {
                cnn.Open();

                using (DbTransaction transaction = cnn.BeginTransaction())
                {
                    using (DbCommand cmd = cnn.CreateCommand())
                    {
                        foreach (string sql in insertSQLStatements)
                        {
                            i++;

                            cmd.CommandText = sql;
                            cmd.ExecuteNonQuery();

                            OnProgressUpdate(i, insertSQLStatements.Count, "Inserting data: ");
                        }
                    }
                    transaction.Commit();
                }

                OnProgressUpdate(i, insertSQLStatements.Count, "Insert Complete!");

                cnn.Close();
            }
        }
        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 { }
        }
Exemplo n.º 15
0
        private void frmMain_Load(object sender, EventArgs e)
        {
            cboTopYear.Items.Clear();
            cboTopYear.Items.AddRange(availableYrs);
            cboBotYear.Items.Clear();
            cboBotYear.Items.AddRange(availableYrs);

            string dataPath = ConfigurationManager.AppSettings["BaseDataPath"];

            #region Load base map layers through lyr file CODE for desktop with ILayerFile with engine license
            ILayerFile layerFile = new LayerFileClass();
            string basemappath = ConfigurationManager.AppSettings["BaseMapLyrPath"];
            ////TODO////Validate BaseMap Layer file Path
            layerFile.Open(basemappath);
            if (layerFile.Layer != null)
            {
                IMap map = m_MapControl.ActiveView.FocusMap;
                map.AddLayer(layerFile.Layer);
            }
            #endregion
            //Load parcel layers
            IWorkspaceFactory2 workspaceFactory = new ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath + @"Shape", 0);
            featureClassParcels = featureWorkspace.OpenFeatureClass("parcels");

            //?????next time we will upgrade it to read fields from layer. I read from txt because I believe it will speed up my application.
            string[] lines = System.IO.File.ReadAllLines(dataPath + @"Table\ParcelTable_3F.txt");
            int i = 0;
            List<string> lststNum = new List<string>();
            List<string> lststName = new List<string>();
            foreach (string line in lines)
            {
                string[] fields = new string[3];
                fields = line.Split(new Char[] { ',' });
                arylistParcelAdd.Add(new Parcel { FID = fields[0], StNum = fields[1], StName = fields[2] });
                lststNum.Add(fields[1]);
                lststName.Add(fields[2]);
                i += 1;
            }
            distinctStNum = lststNum.Distinct().ToList();
            distinctStName = lststName.Distinct().ToList();
            var autoCompleStNum = new AutoCompleteStringCollection();
            var autoCompleStName = new AutoCompleteStringCollection();
            //why not use ToArray 4 lines ago??
            autoCompleStNum.AddRange(distinctStNum.ToArray());
            autoCompleStName.AddRange(distinctStName.ToArray());
            tbStNa.AutoCompleteMode = AutoCompleteMode.Suggest;
            tbStNa.AutoCompleteSource = AutoCompleteSource.CustomSource;
            tbStNa.AutoCompleteCustomSource = autoCompleStName;
            tbStNum.AutoCompleteMode = AutoCompleteMode.Suggest;
            tbStNum.AutoCompleteSource = AutoCompleteSource.CustomSource;
            tbStNum.AutoCompleteCustomSource = autoCompleStNum;
            //Zoom the display to the full extent of all layers in the maop
            m_MapControl.ActiveView.Extent = m_MapControl.ActiveView.FullExtent;
            m_MapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
        private string ValidateLayerFile()
        {
            if (string.IsNullOrEmpty(LayerFileName))
                return "No layer file template is defined.";

            if (!File.Exists(LayerFileName))
                return "layer file '" + LayerFileName + "' does not exist.";

            try
            {
                var layerFile = new LayerFileClass();
                layerFile.Open(LayerFileName);
                _layer = layerFile.Layer;
                layerFile.Close();
            }
            catch (Exception ex)
            {
                _layer = null;
                return "Could not load layer file '" + LayerFileName + "'\n" + ex.Message;
            }

            if (_layer == null)
                return "layer file '" + LayerFileName + "' is empty.";

            if (!(_layer is IFeatureLayerDefinition2))
            {
                _layer = null;
                return "layer file '" + LayerFileName + "' does not support definition queries.";
            }

            return null;
        }
        public string[] getQueryValueOptions_withSuffix(string queryType, string fileSuffix)
        {
            ESRI.ArcGIS.Carto.ILayerFile layerFile = new LayerFileClass();
            //layerFile.Open("\\\\tornado\\Research3\\Tony\\Wetlands\\wetlands10.1\\10.0\\" + queryType + "_Poly.lyr");
            layerFile.Open(GetAssemblyPath() + "\\Symbology\\LLWWW_" + queryType + "_Polygon" + fileSuffix + ".lyr");

            IGeoFeatureLayer igfl_lyr = (IGeoFeatureLayer)layerFile.Layer;
            iuvr = (IUniqueValueRenderer)igfl_lyr.Renderer;

            string[] s = new string[iuvr.ValueCount];

            for (int j = 0; j < iuvr.ValueCount; j++)
            {
                s[j] = iuvr.Label[iuvr.Value[j]] + " (" + iuvr.Value[j] + ")";
            }

            return s;
        }