Ejemplo n.º 1
0
        public void TestInitialise()
        {
            _Snapshot = Factory.TakeSnapshot();

            _ProgramConfiguration = new global::VirtualRadar.Interface.Settings.Configuration();
            _SharedConfiguration  = TestUtilities.CreateMockSingleton <ISharedConfiguration>();
            _SharedConfiguration.Setup(r => r.Get()).Returns(_ProgramConfiguration);

            _FileSystem = new MockFileSystemProvider();
            Factory.Singleton.RegisterInstance <IFileSystemProvider>(_FileSystem);

            _FileSystemServerConfiguration = TestUtilities.CreateMockSingleton <IFileSystemServerConfiguration>();
            _FileSystemServerConfiguration.Setup(r => r.GetSiteRootFolders()).Returns(() => new List <string>()
            {
                @"c:\web\",
            });
            _FileSystemServerConfiguration.Setup(r => r.IsFileUnmodified(It.IsAny <string>(), It.IsAny <string>(), It.IsAny <byte[]>())).Returns(true);

            _ImageFileManager       = TestUtilities.CreateMockImplementation <IImageFileManager>();
            _AircraftPictureManager = TestUtilities.CreateMockSingleton <IAircraftPictureManager>();
            _AircraftPictureManager.Setup(r => r.FindPicture(It.IsAny <IDirectoryCache>(), It.IsAny <string>(), It.IsAny <string>())).Returns((PictureDetail)null);
            _AircraftPictureManager.Setup(r => r.LoadPicture(It.IsAny <IDirectoryCache>(), It.IsAny <string>(), It.IsAny <string>())).Returns((Image)null);
            _AircraftPictureCache      = TestUtilities.CreateMockImplementation <IDirectoryCache>();
            _AutoConfigurePictureCache = TestUtilities.CreateMockSingleton <IAutoConfigPictureFolderCache>();
            _AutoConfigurePictureCache.SetupGet(r => r.DirectoryCache).Returns(_AircraftPictureCache.Object);
            _ServerConfiguration = TestUtilities.CreateMockSingleton <IImageServerConfiguration>();
            _ServerConfiguration.SetupGet(r => r.ImageFileManager).Returns(_ImageFileManager.Object);

            _Server = Factory.Singleton.Resolve <IImageServer>();

            _Environment = new MockOwinEnvironment();
            _Environment.Request.RemoteIpAddress = "127.0.0.1";
            _Pipeline = new MockOwinPipeline();
        }
Ejemplo n.º 2
0
        public bool UploadImage(byte[] data, string fmt, ImageItemViewModel item)
        {
            try
            {
                if (string.IsNullOrEmpty(DefaultServer))
                {
                    DefaultServer = "SMMS";
                    GlobalConfig.Instance.SaveSettings();
                }
                string AssemblyName = "ImageHosting.Module.ImageServer." + DefaultServer;

                IImageServer server = (IImageServer)Assembly.Load(AssemblyName).CreateInstance(AssemblyName + ".ImageServer");
                var          config = GlobalConfig.Instance.GetImageServerConfig(DefaultServer);
                bool         bRes   = server.SetConfig(config);

                if (!bRes)
                {
                    var result = MessageBox.Show("确定?", "此图床服务需要必要的设置,是否跳转到设置界面?", MessageBoxButton.YesNo);
                    if (result == MessageBoxResult.Yes)
                    {
                        IRegionManager regionManager = ServiceLocator.Current.GetInstance <IRegionManager>();
                        regionManager.RequestNavigate(RegionToken.NavigationBarRegionName, AssemblyName + ".Views." + DefaultServer);
                    }
                    return(false);
                }

                item.Info.DisplayName = "Clipboard_" + Guid.NewGuid().ToString() + fmt;
                item.Info.Extname     = fmt;
                string ImageURL = string.Empty;

                bRes = server.UploadImage(data, item.Info.DisplayName, out ImageURL);

                if (bRes && !string.IsNullOrEmpty(ImageURL))
                {
                    item.Info.GUID        = Guid.NewGuid().ToString();
                    item.Info.UploadTime  = DateTime.Now.ToFileTimeUtc();
                    item.Info.ImageServer = server.ServerName();
                    item.Info.ImageUrl    = ImageURL;
                    item.Info.Filename    = item.Info.GUID + item.Info.Extname;

                    string dst = GlobalUtil.GetCacheDirectory() + "\\" + item.Info.Filename;
                    // File.Copy(path, dst, true);
                    using (var file = new  FileStream(dst, FileMode.Create, FileAccess.Write))
                    {
                        file.Write(data, 0, data.Length);
                        file.Flush();
                    }
                    return(true);
                }
                else
                {
                    return(false);
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return(false);
            }
        }
        public static string GetAndApplyColormap(IImageServer imageServer)
        {
            //Get the color map.
            IImageServiceInfo3 isInfo = imageServer.ServiceInfo as IImageServiceInfo3;
            IRasterColormap colormap = isInfo.Colormap;
            //Create the color map function using the color map.
            IRenderingRule rule = new RenderingRuleClass();
            ColormapFunction colormapfunction = new ColormapFunctionClass();
            IColormapFunctionArguments colormapargs = new ColormapFunctionArgumentsClass();
            colormapargs.Colormap = colormap;
            rule.Function = colormapfunction;
            rule.Arguments = (IRasterFunctionArguments)colormapargs;
            rule.VariableName = "Raster";    //Define export image request.
            IGeoImageDescription2 geoImageDesc = new GeoImageDescriptionClass();
            geoImageDesc.Width = 800;
            geoImageDesc.Height = 600;
            geoImageDesc.Extent = isInfo.Extent;
            geoImageDesc.RenderingRule = rule;

            //Export an image using service's color map.
            IImageType imageType = new ImageTypeClass();
            imageType.Format = esriImageFormat.esriImageJPGPNG;
            imageType.ReturnType = esriImageReturnType.esriImageReturnURL;
            IMapImage mapImage = ((IImageServer2)imageServer).ExportMapImage(geoImageDesc, imageType);
            return mapImage.URL;
        }
Ejemplo n.º 4
0
        public void ImageServer_Can_Dynamically_Add_Text()
        {
            var textLines       = new List <string>();
            var webSiteGraphics = ReplaceWebSiteGraphics();

            webSiteGraphics.Setup(r => r.AddTextLines(It.IsAny <Image>(), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>(), It.IsAny <bool>()))
            .Returns((Image image, IEnumerable <string> lines, bool unused2, bool unused3) => {
                textLines.AddRange(lines);
                return((Image)image.Clone());
            });
            _Server = Factory.Singleton.Resolve <IImageServer>();

            _Environment.RequestPath = "/Images/PL1-Hello/PL2-There/TestSquare.png";
            _Pipeline.CallMiddleware(_Server.HandleRequest, _Environment.Environment);

            webSiteGraphics.Verify(r => r.AddTextLines(It.IsAny <Image>(), It.IsAny <IEnumerable <string> >(), It.IsAny <bool>(), It.IsAny <bool>()), Times.Once());
            Assert.AreEqual(2, textLines.Count);
            Assert.AreEqual("Hello", textLines[0]);
            Assert.AreEqual("There", textLines[1]);

            using (var stream = new MemoryStream(_Environment.ResponseBodyBytes)) {
                using (var siteImage = (Bitmap)Bitmap.FromStream(stream)) {
                    // Note that in real life IWebSiteGraphics would have done something with the image, but here all
                    // we can reasonably do is make sure that something that looks like an image was returned...
                }
            }
        }
Ejemplo n.º 5
0
        public static string ApplyMLClassifyFunction(IImageServer imageServer, IRaster pRaster, string signaturfile)
        {
            //Define a  function.
            IRasterFunction hillshadeFunction = new MLClassifyFunctionClass();

            IRasterFunctionArguments functionArgument = new MLClassifyFunctionArgumentsClass();
            functionArgument.PutValue("Raster", pRaster);
            functionArgument.PutValue("SignatureFile", signaturfile);

            //Attach the function to a rendering rule.
            IRenderingRule renderRule = new RenderingRuleClass();
            renderRule.Function = hillshadeFunction;
            renderRule.Arguments = functionArgument;
            renderRule.VariableName = "DEM";

            //Define the image description.
            IGeoImageDescription geoImageDesc = new GeoImageDescriptionClass();
            geoImageDesc.Compression = "LZ77";
            geoImageDesc.Extent = imageServer.ServiceInfo.Extent;
            geoImageDesc.Width = 800;
            geoImageDesc.Height = 600;
            geoImageDesc.Interpolation = rstResamplingTypes.RSP_BilinearInterpolation;
            IGeoImageDescription2 geoImageDesc2 = (IGeoImageDescription2)geoImageDesc;

            geoImageDesc2.RenderingRule = renderRule;

            //Define the return image type.
            IImageType imgType = new ImageTypeClass();
            imgType.Format = esriImageFormat.esriImagePNG;
            imgType.ReturnType = esriImageReturnType.esriImageReturnURL;

            //Export the image.
            IImageResult imgResult = imageServer.ExportImage(geoImageDesc2, imgType);
            return imgResult.URL;
        }
Ejemplo n.º 6
0
        public virtual void SendToServer(IImageServer server)
        {
            _log.DebugFormat("Transmitting image: {0}", FullPath);

            var req = _requestProvider.ProvideNewAddImageRequest(server, FileName, LoadImageBytes());

            UploadSuccessful = req.Post();
        }
Ejemplo n.º 7
0
 public IAddImageRequest ProvideNewAddImageRequest(IImageServer server, string fileName, byte[] imageBytes)
 {
     return(new AddImageRequest(_webRequestFactory, _logProvider, _credentialRepository)
     {
         RequestUrl = server.ServerUrl,
         FileBytes = imageBytes,
         FileName = fileName
     });
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ImageController"/> class.
        /// </summary>
        /// <param name="modal">The modal.</param>
        public ImageController(IImageServiceModal modal, AppConfig appConfig, IImageServer imageServer)

        {
            m_imageServer = imageServer;
            m_appConfig   = appConfig;
            m_modal       = modal;              // Storing the Modal Of The System
            commands      = new Dictionary <int, ICommand>()
            {
                // For Now will contain NEW_FILE_COMMAND
                { (int)CommandEnum.NewFileCommand, new NewFileCommand(m_modal) },
                { (int)CommandEnum.GetConfigCommand, new GetConfigCommand(m_appConfig) },
                { (int)CommandEnum.LogCommand, new LogCommand() },
                { (int)CommandEnum.RemoveHandler, new RemoveHandlerCommand(m_appConfig, m_imageServer) },
            };
        }
Ejemplo n.º 9
0
        //Here You will use app config
        /// <summary>
        /// When implemented in a derived class,
        /// executes when a Start command is sent
        /// to the service by the Service Control Manager (SCM)
        /// or when the operating system starts
        /// (for a service that starts automatically).
        /// Specifies actions to take when the service starts.
        /// </summary>
        /// <param name="args">Data passed by the start command.</param>
        protected override void OnStart(string[] args)
        {
            try
            {
                Console.WriteLine("OnStart");

                // Update the service state to Start Pending.
                ServiceStatus serviceStatus = new ServiceStatus();
                serviceStatus.dwCurrentState = ServiceState.SERVICE_START_PENDING;
                serviceStatus.dwWaitHint     = 100000;
                SetServiceStatus(this.ServiceHandle, ref serviceStatus);
                eventLog1.WriteEntry("In OnStart");
                // Set up a timer to trigger every minute.
                System.Timers.Timer timer = new System.Timers.Timer();
                timer.Interval = 60000; // 60 seconds  //
                timer.Elapsed += new System.Timers.ElapsedEventHandler(this.OnTimer);
                timer.Start();

                // Update the service state to Running.
                serviceStatus.dwCurrentState = ServiceState.SERVICE_RUNNING;
                SetServiceStatus(this.ServiceHandle, ref serviceStatus);

                //read from app config
                AppConfig appConfig = new AppConfig();

                //create the LoggingService
                logging = new LoggingService();
                logging.MessageReceivedEvent += onMsg;
                logging.MessageReceivedEvent += LogCommand.onReceiveCommandLog;

                modal = new ImageServiceModal(appConfig.OutPutDir, appConfig.ThumbnailSize, logging);
                //controller = new ImageController(modal, appConfig);
                m_imageServer = new ImageServer(logging, appConfig.ArrHandlers);
                controller    = new ImageController(modal, appConfig, m_imageServer);
                m_imageServer.initImageServer(controller);

                ClientHandler clientHandler = new ClientHandler(controller, logging);
                server = new TCPServerChannel(8000, clientHandler);
                logging.MessageReceivedEvent += server.SendLog;
                server.Start();
            }
            catch (Exception ex)
            {
                eventLog1.WriteEntry(ex.Message);
            }
        }
        public ImageService()
        {
            InitializeComponent();
            string eventSourceName = ConfigurationManager.AppSettings["SourceName"];
            string logName         = ConfigurationManager.AppSettings["LogName"];

            eventLogger = new EventLog
            {
                Source = eventSourceName,
                Log    = logName
            };

            ILoggingService imageLogger = new LoggingService();

            imageLogger.MessageRecieved += OnMsg;
            IImageController imageController = new ImageController(new ImageServiceModel(imageLogger));

            imageServer = new ImageServer(imageController);
        }
Ejemplo n.º 11
0
        private void loadLayers()
        {
            chbLayers.Items.Clear();
            Dictionary <string, bool> lyrDic = msUtil.getLayerDic(cmbCon.Text, cmbSrv.Text);

            if (lyrDic.Count < 1)
            {
                this.UseWaitCursor = true;
                IAGSServerConnection2    sConn    = msUtil.getServiceConnection(cmbCon.Text);
                Dictionary <string, int> lyrIdDic = new Dictionary <string, int>();
                string sType = msUtil.getServiceType(cmbCon.Text, cmbSrv.Text);
                IAGSServerObjectName3 sObj = msUtil.getServiceObject(sConn, cmbSrv.Text, sType);
                if (sType.ToLower() == "mapserver")
                {
                    IMapServer2 ms2 = msUtil.getMapService(sObj);
                    lyrIdDic = msUtil.getLayers(ms2);
                }
                else if (sType.ToLower() == "imageserver")
                {
                    IImageServer ims = msUtil.getIMageService(sObj);
                    lyrIdDic = msUtil.getImages(ims);
                }
                msUtil.updateLayerTable(lyrIdDic, cmbCon.Text, cmbSrv.Text);
                lyrDic             = msUtil.getLayerDic(cmbCon.Text, cmbSrv.Text);
                this.UseWaitCursor = false;
            }
            if (lyrDic.Count < 1)
            {
                MessageBox.Show("Can't find any layers that will allow users to download information. Setting server name to blank.");
                cmbSrv.Text = "";
            }
            else
            {
                foreach (KeyValuePair <string, bool> kvp in lyrDic)
                {
                    chbLayers.Items.Add(kvp.Key, kvp.Value);
                }
            }
        }
Ejemplo n.º 12
0
 public static void AddRastersToImageService(IImageServer imageServer, List<string> fileNames, List<string> fileUrls, IPropertySet attributes)
 {
     //Construct an item description.
     IRasterItemDescription itemDescription = new RasterItemDescriptionClass();
     //Define source raster names, locations, and type.
     IStringArray dataFileNames = new StrArrayClass();
     //File names example: Image32.tif, Image32.tfw, Image32.aux.
     foreach (string fileName in fileNames) dataFileNames.Add(fileName);
     itemDescription.DataFileNames = dataFileNames;
     IStringArray dataFileURLs = new StrArrayClass();
     //File URL examples: c:\temp\Image32.tif, c:\temp\Image32.tfw, http:\\host\Image32.aux.
     foreach (string fileurl in fileUrls) dataFileURLs.Add(fileurl);
     itemDescription.DataFileURLs = dataFileURLs;
     itemDescription.Type = "Raster Dataset";
     //Raster pyramids,statistics,thumbnail.
     itemDescription.BuildPyramids = false;
     itemDescription.BuildThumbnail = false;
     itemDescription.ComputeStatistics = false;
     //If you need to overwrite default raster properties/metadata, provide here.
     itemDescription.Properties = attributes;    //Construct item descriptions.
     IRasterItemDescriptions itemDescriptions = new RasterItemDescriptionsClass();
     itemDescriptions.Add(itemDescription);    //Add.
     IImageServerEditResults isEditResults = ((IImageServer4)imageServer).Add(itemDescriptions);
 }
        public void ProcessAvailableImages(IWatchedFileRepository watchedFileRepository, IImageServer server)
        {
            if (_mode.Equals(OperationMode.UploadAndClear)) throw new NotImplementedException();

            var images = _directoryScanner.GetAvailableImages(watchedFileRepository, _watchPath, _acceptableExtensions, _includeSubDirectories, _sortStrategy);

            foreach (var image in images.Where(image => image != null))
            {
                try
                {
                    if (!image.UploadSuccessful
                        && (_mode.Equals(OperationMode.UploadAndClear) || _mode.Equals(OperationMode.UploadOnly) || _mode.Equals(OperationMode.UploadAndSort)))
                    {
                        image.SendToServer(server);
                        watchedFileRepository.Save(image);
                    }

                    if (image.IsInBaseDirectory(_watchPath)
                        && (_mode.Equals(OperationMode.SortOnly) || _mode.Equals(OperationMode.UploadAndSort)))
                    {
                        _log.Debug(string.Format("Beginning sort of file: {0}", image.FullPath));
                        image.SortFile();
                    }

                }
                catch (IOException ex)
                {
                    image.UploadSuccessful = false;
                    watchedFileRepository.Save(image);
                    _log.Error("Failed: " + image, ex);
                }
            }
        }
 /// <summary>
 /// returns the images from an IImageServer server
 /// </summary>
 /// <param name="ims">IImageServer object</param>
 /// <returns>the a dictionary of service name and its corresponding id</returns>
 public Dictionary<string, int> getImages(IImageServer ims)
 {
     Dictionary<string, int> imsDic = new Dictionary<string, int>();
     IImageServiceInfo  imsInfo = ims.ServiceInfo;
     string iNm = imsInfo.Name;
     int bCnt = imsInfo.BandCount;
     imsDic.Add(iNm, bCnt);
     return imsDic;
 }
 /// <summary>
 /// return the number of bands for a given image server
 /// </summary>
 /// <param name="is2">image server</param>
 /// <returns></returns>
 public int getBandCount(IImageServer is2)
 {
     IImageServiceInfo pSet = is2.ServiceInfo;
     return pSet.BandCount;
 }
Ejemplo n.º 16
0
 public RemoveHandlerCommand(AppConfig appConfig, IImageServer imageServer)
 {
     m_imageServer = imageServer;
     m_appConfig   = appConfig;
 }
Ejemplo n.º 17
0
        public virtual void SendToServer(IImageServer server)
        {
            _log.DebugFormat("Transmitting image: {0}", FullPath);

            var req = _requestProvider.ProvideNewAddImageRequest(server, FileName, LoadImageBytes());

            UploadSuccessful = req.Post();
        }
Ejemplo n.º 18
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 { }
        }
Ejemplo n.º 19
0
        public void ProcessAvailableImages(IWatchedFileRepository watchedFileRepository, IImageServer server)
        {
            if (_mode.Equals(OperationMode.UploadAndClear))
            {
                throw new NotImplementedException();
            }

            var images = _directoryScanner.GetAvailableImages(watchedFileRepository, _watchPath, _acceptableExtensions, _includeSubDirectories, _sortStrategy);

            foreach (var image in images.Where(image => image != null))
            {
                try
                {
                    if (!image.UploadSuccessful &&
                        (_mode.Equals(OperationMode.UploadAndClear) || _mode.Equals(OperationMode.UploadOnly) || _mode.Equals(OperationMode.UploadAndSort)))
                    {
                        image.SendToServer(server);
                        watchedFileRepository.Save(image);
                    }

                    if (image.IsInBaseDirectory(_watchPath) &&
                        (_mode.Equals(OperationMode.SortOnly) || _mode.Equals(OperationMode.UploadAndSort)))
                    {
                        _log.Debug(string.Format("Beginning sort of file: {0}", image.FullPath));
                        image.SortFile();
                    }
                }
                catch (IOException ex)
                {
                    image.UploadSuccessful = false;
                    watchedFileRepository.Save(image);
                    _log.Error("Failed: " + image, ex);
                }
            }
        }