Пример #1
0
        protected virtual void ApplyOffset(ICanvas canvas, double offsetX, double offsetY)
        {
            IRasterDrawing drawing = _canvas.PrimaryDrawObject as IRasterDrawing;

            if (drawing == null)
            {
                return;
            }
            IGeoPanAdjust adjust = drawing as IGeoPanAdjust;

            if (adjust == null)
            {
                return;
            }
            adjust.ApplyAdjust(offsetX, offsetY);
            _canvas.Refresh(enumRefreshType.All);
        }
Пример #2
0
        void RasterPropertyWindow_OnApplyClicked(object sender, EventArgs e)
        {
            ICanvasViewer viewer = _session.SmartWindowManager.ActiveViewer as ICanvasViewer;

            if (viewer == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null)
            {
                return;
            }
            drawing.SelectedBandNos = (_content as RasterPropertyWndContent).SelectedBandNos;
            viewer.Canvas.Refresh(Core.DrawEngine.enumRefreshType.All);
        }
Пример #3
0
        private static int[] GetDefaultBands(IRasterDrawing drawing)
        {
            IRasterDataProvider prd = drawing.DataProvider;

            if (prd == null)
            {
                return(null);
            }
            int[] defaultBands = prd.GetDefaultBands();
            //if (defaultBands == null || IsImage(prd.fileName))
            if (defaultBands == null)
            {
                defaultBands = new int[] { 1, 2, 3 }
            }
            ;
            return(defaultBands);
        }
Пример #4
0
        private string CheckActiverFile()
        {
            ICanvasViewer canViewer = _session.SmartWindowManager.ActiveCanvasViewer;

            if (canViewer == null)
            {
                throw new Exception("未获得激活的数据窗口");
            }
            IAOIProvider aoiProvider = canViewer.AOIProvider;

            if (aoiProvider == null)
            {
                throw new Exception("未从激活的数据窗口中获取感兴趣区域");
            }
            GeoDo.RSS.Core.DrawEngine.CoordEnvelope geoEnvelope = aoiProvider.GetGeoRect();
            if (geoEnvelope == null)
            {
                _hasAOI = false;
            }
            else
            {
                _hasAOI = true;
            }
            AOIItem[] aoiItems = aoiProvider.GetAOIItems();
            if (aoiItems == null || aoiItems.Length == 0)
            {
                _hasBlock = false;
            }
            else
            {
                _hasBlock = true;
            }
            IRasterDrawing rd = canViewer.ActiveObject as IRasterDrawing;

            if (rd == null)
            {
                throw new Exception("未从激活的数据窗口中获取数据提供者");
            }
            IRasterDataProvider rdp = rd.DataProvider;

            if (rdp == null)
            {
                throw new Exception("未从激活的数据窗口中获取数据提供者");
            }
            return(rdp.fileName);
        }
Пример #5
0
        /// <summary>
        /// 生成视窗图片
        /// </summary>
        /// <param name="rd"></param>
        /// <param name="filename"></param>
        /// <returns></returns>
        private string CreateViewBitmap(IRasterDrawing drawing, ISmartSession session, out int width, out int height)
        {
            string      bmpFilename = GetTempBmpFilename(drawing.FileName, session);
            string      ext         = Path.GetExtension(bmpFilename);
            ImageFormat imageFormat = GetImageFormat(ext);
            Size        imgSize;

            using (Bitmap img = CreateRasterBitmap(drawing))
            {
                img.Save(bmpFilename, imageFormat);
                imgSize = img.Size;
            }
            width  = imgSize.Width;
            height = imgSize.Height;
            WriteWorldFile(drawing.DataProvider.CoordEnvelope, imgSize, drawing.DataProvider.SpatialRef, bmpFilename);
            return(bmpFilename);
        }
Пример #6
0
        public override void Execute()
        {
            ICanvasViewer viewer = _smartSession.SmartWindowManager.ActiveViewer as ICanvasViewer;

            if (viewer == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null)
            {
                return;
            }
            drawing.RgbProcessorStack.UnProcess();
            viewer.Canvas.Refresh(Core.DrawEngine.enumRefreshType.RasterLayer);
        }
Пример #7
0
        public override void Execute(string argument)
        {
            ICanvasViewer canViewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (canViewer == null)
            {
                return;
            }
            IRasterDrawing rd = canViewer.ActiveObject as IRasterDrawing;

            if (rd == null)
            {
                return;
            }
            string filename = rd.FileName;

            try
            {
                string theme = SelectLayoutTheme();
                if (string.IsNullOrWhiteSpace(theme))
                {
                    return;
                }
                string bmpFilename = CreateViewBitmap(rd.DataProvider.CoordEnvelope, rd.DataProvider.SpatialRef, filename);
                string gxdFilename = SaveGxdFilename(rd);
                if (string.IsNullOrWhiteSpace(gxdFilename))
                {
                    return;
                }
                ThematicGraphHelper thematic = new ThematicGraphHelper(_smartSession, Path.GetFileNameWithoutExtension(theme));
                //thematic.AOI = MasicAOI(aoi, ref extInfos);
                //thematic.SetOrbitTimes(obtTimes);
                //thematic.DateString = dateString;
                string resultFilename = thematic.CreateThematicGraphic(bmpFilename, theme, gxdFilename, null, null);
                //return new FileExtractResult(outFileIdentify, resultFilename);
                if (!string.IsNullOrWhiteSpace(resultFilename))
                {
                    OpenFileFactory.Open(resultFilename);
                }
            }
            catch (Exception ex)
            {
                MsgBox.ShowInfo(ex.Message);
            }
        }
Пример #8
0
        private IRasterDataProvider GetCurrentDataProvider(out int bandNo)
        {
            bandNo = 0;
            ICanvasViewer viewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null)
            {
                return(null);
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing != null)
            {
                bandNo = drawing.SelectedBandNos[0];
                return(drawing.DataProviderCopy);
            }
            return(null);
        }
Пример #9
0
        public override void Execute()
        {
            ISmartViewer viewer = _smartSession.SmartWindowManager.ActiveViewer;

            if (viewer == null)
            {
                return;
            }
            ICanvasViewer  canViewer = viewer as ICanvasViewer;
            IRasterDrawing rd        = canViewer.ActiveObject as IRasterDrawing;

            (rd as IGeoPanAdjust).Start();
            IRasterDataProvider rdp = rd.DataProvider;

            canViewer.Canvas.CurrentViewControl = new PanAdjustControlLayer();
            (canViewer.Canvas.CurrentViewControl as PanAdjustControlLayer).AdjustFinishedHandler += _finishedHandler;
            canViewer.Canvas.Refresh(enumRefreshType.All);
        }
Пример #10
0
        void OverviewContent_Paint(object sender, PaintEventArgs e)
        {
            ICanvasViewer viewer = _session.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null || viewer.ActiveObject == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null || drawing.DataProvider == null)
            {
                return;
            }
            HandleBoxMoving(drawing, viewer);
            DrawOverview(e);
            DrawViewportBox(viewer, drawing, e);
        }
Пример #11
0
        private unsafe double GetPixelTemperature(ICanvas canvas, float x, float y)
        {
            IRasterDrawing drawing = canvas.PrimaryDrawObject as IRasterDrawing;

            if (drawing == null || x < 0 || x > drawing.Size.Width || y < 0 || y > drawing.Size.Height)
            {
                return(0);
            }
            double[] buffer = new double[drawing.BandCount];
            fixed(double *ptr0 = buffer)
            {
                double *ptr = ptr0;

                drawing.ReadPixelValues((int)x, (int)y, ptr);
            }

            return(buffer[_selectedBand] / 10 - 273);
        }
Пример #12
0
        private GeoDo.RSS.Core.DF.CoordEnvelope TryGetActiveViewerEnv()
        {
            ICanvasViewer v = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (v == null)
            {
                return(null);
            }
            IRasterDrawing drawing = v.ActiveObject as IRasterDrawing;

            if (drawing == null)
            {
                return(null);
            }
            IRasterDataProvider raster = drawing.DataProvider;

            return(raster.CoordEnvelope);
        }
Пример #13
0
        /// <summary>
        /// 矢量数据取AOI,
        /// 矢量与栅格坐标不一致时候,转矢量。
        /// </summary>
        /// <param name="feature"></param>
        /// <returns></returns>
        private int[] GetIndexes(Feature feature)
        {
            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = _canvas.CoordTransform;
            IRasterDrawing rasterDrawing = _canvas.PrimaryDrawObject as IRasterDrawing;

            GeoDo.RSS.Core.DF.CoordEnvelope coordEvp = rasterDrawing.DataProvider.CoordEnvelope.Clone();
            Size     rasterSize = rasterDrawing.Size;
            Envelope rasterEnv  = new Envelope(coordEvp.MinX, coordEvp.MinY, coordEvp.MaxX, coordEvp.MaxY);

            if (feature.Projected && rasterDrawing.DataProvider.CoordType == enumCoordType.GeoCoord)
            {
                using (ShapePolygon spPrj = ShapePolygonPrjToGeo(feature.Geometry as ShapePolygon))
                {
                    if (spPrj != null)
                    {
                        using (IVectorAOIGenerator gen = new VectorAOIGenerator())
                        {
                            return(gen.GetAOI(new ShapePolygon[] { spPrj }, rasterEnv, rasterSize));
                        }
                    }
                }
            }
            else if (!feature.Projected && rasterDrawing.DataProvider.CoordType == enumCoordType.PrjCoord)
            {
                using (ShapePolygon spPrj = ShapePolygonGeoToPrj(feature.Geometry as ShapePolygon))
                {
                    if (spPrj != null)
                    {
                        using (IVectorAOIGenerator gen = new VectorAOIGenerator())
                        {
                            return(gen.GetAOI(new ShapePolygon[] { spPrj }, rasterEnv, rasterSize));
                        }
                    }
                }
            }
            else
            {
                using (IVectorAOIGenerator gen = new VectorAOIGenerator())
                {
                    return(gen.GetAOI(new ShapePolygon[] { feature.Geometry as ShapePolygon }, rasterEnv, rasterSize));
                }
            }
            return(null);
        }
Пример #14
0
        static void FileOpened(object sender, string fname)
        {
            ICanvasViewer viewer = Session.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null)
            {
                return;
            }
            if (drawing.FileName == fname)
            {
                ApplyImageEnhancor();
            }
        }
Пример #15
0
        private Bitmap CreateRasterBitmap(IRasterDrawing drawing)
        {
            if (drawing == null)
            {
                return(null);
            }
            Bitmap img = drawing.GetBitmapUseOriginResolution();

            if (IsPixelFormatIndexed(img.PixelFormat))
            {
                Bitmap newimg = img.Clone(new System.Drawing.Rectangle(0, 0, img.Width, img.Height), PixelFormat.Format24bppRgb);
                img.Dispose();
                return(newimg);
            }
            else
            {
                return(img);
            }
        }
Пример #16
0
 void _radDock_DockWindowClosing(object sender, DockWindowCancelEventArgs e)
 {
     _linkableViewerManager.Unlink(e.NewWindow as ILinkableViewer);
     if (e.NewWindow is IStatResultDisplayWindow)
     {
         (e.NewWindow as Telerik.WinControls.IGeoDoFree).Free();
     }
     else if (e.NewWindow is ICanvasViewer)
     {
         ICanvasViewer  canViewer = e.NewWindow as ICanvasViewer;
         IRasterDrawing rd        = canViewer.ActiveObject as IRasterDrawing;
         IGeoPanAdjust  adjust    = rd as IGeoPanAdjust;
         if (adjust != null && adjust.IsHasUnsavedGeoAdjusted)
         {
             DialogResult ret = MsgBox.ShowQuestionYesNoCancel("当前影像的平移校正结果未保存,请确认是否保存?\n按【是】保存。\n按【否】不保存。\n按【取消】返回。");
             if (ret == DialogResult.Cancel)
             {
                 e.Cancel = true;
                 return;
             }
             else if (ret == DialogResult.Yes)
             {
                 adjust.Save();
             }
             else
             {
                 adjust.Cancel();
             }
         }
         //退出平移校正状态
         ICommand cmd = _session.CommandEnvironment.Get(30006);
         if (cmd != null)
         {
             cmd.Execute();
         }
         //退出平移校正2状态
         ICommand cmd2 = _session.CommandEnvironment.Get(30106);
         if (cmd2 != null)
         {
             cmd2.Execute();
         }
     }
 }
Пример #17
0
        private double StatArea(int[] aoi)
        {
            IRasterDrawing drawing = _activeViewer.Canvas.PrimaryDrawObject as IRasterDrawing;

            if (drawing == null)
            {
                return(0);
            }
            IRasterDataProvider prd = drawing.DataProvider;

            if (prd == null)
            {
                return(0);
            }

            double retArea = 0;

            if (prd.CoordType == enumCoordType.GeoCoord)
            {
                Size   size   = new Size(prd.Width, prd.Height);
                int    row    = 0;
                double resX   = prd.ResolutionX;
                double maxLat = prd.CoordEnvelope.MaxY;
                for (int i = 0; i < aoi.Length; i++)
                {
                    row      = aoi[i] / size.Width;
                    retArea += RasterOperator <int> .ComputePixelArea(row, maxLat, resX);
                }
            }
            else if (prd.CoordType == enumCoordType.PrjCoord)
            {
                double pixelArea = prd.ResolutionX * prd.ResolutionY / 1000000;//平方公里
                for (int i = 0; i < aoi.Length; i++)
                {
                    retArea += pixelArea;
                }
            }
            else//raster pixelcount
            {
                retArea = aoi.Length;
            }
            return(retArea);
        }
Пример #18
0
        private void GetCurrentBandNos(out int[] bandNos, out int bandCount)
        {
            bandNos   = null;
            bandCount = 0;
            ICanvasViewer viewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            bandNos   = new int[drawing.BandCount];
            bandCount = drawing.BandCount;
            for (int i = 1; i <= bandCount; i++)
            {
                bandNos[i - 1] = i;
            }
        }
Пример #19
0
        private void btnAddVector_Click(object sender, EventArgs e)
        {
            if (_vectorHostLayer != null)
            {
                return;
            }
            string spaRef = null;

            if (_rasterLayer != null)
            {
                IRasterDrawing drawing = _rasterLayer.Drawing as IRasterDrawing;
                //GeoDo.Project.ISpatialReference spatialRef = drawing.DataProvider.SpatialRef;
                //spaRef = spatialRef.ToWKTString();
                spaRef = drawing.SpatialRef;
            }
            _vectorHostLayer = new VectorHostLayer(spaRef);
            _canvas.LayerContainer.Layers.Add(_vectorHostLayer);
            _canvas.Refresh(enumRefreshType.All);
        }
Пример #20
0
        public override void Execute()
        {
            ICanvasViewer viewer = _smartSession.SmartWindowManager.ActiveCanvasViewer as ICanvasViewer;

            if (viewer == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null)
            {
                return;
            }
            IRgbProcessor pro = GetRgbProcessor();

            drawing.RgbProcessorStack.Process(pro);
            DisplayArgEditor(pro, drawing, viewer);
        }
Пример #21
0
        public override void  Execute()
        {
            ISmartViewer viewer = _smartSession.SmartWindowManager.ActiveViewer;

            if (viewer == null)
            {
                return;
            }
            ICanvasViewer  canViewer = viewer as ICanvasViewer;
            IRasterDrawing rd        = canViewer.ActiveObject as IRasterDrawing;
            IGeoPanAdjust  adjust    = rd as IGeoPanAdjust;

            if (rd == null)
            {
                return;
            }
            PanAdjustTool adjustTool = new PanAdjustTool();
            string        fileName   = null;

            try
            {
                fileName = adjustTool.SaveGeoAdjust(rd.EnvelopeBeforeAdjusting, rd.DataProviderCopy);
                adjust.Cancel();
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
            if (fileName != null && File.Exists(fileName))
            {
                string adjustTxtDir = AppDomain.CurrentDomain.BaseDirectory + "MonitoringProductArgs\\COMM\\";
                if (!Directory.Exists(adjustTxtDir))
                {
                    Directory.CreateDirectory(adjustTxtDir);
                }
                string txtFileName = Path.Combine(adjustTxtDir, "AdjustSaveFile.txt");
                using (StreamWriter sw = new StreamWriter(txtFileName, true, Encoding.Default))
                {
                    sw.WriteLine(fileName);
                }
            }
        }
Пример #22
0
 private void SetCurrentRasterArgument(IMonitoringSubProduct subProduct)
 {
     if (subProduct.Definition.IsNeedCurrentRaster)
     {
         ICanvasViewer cv = _session.SmartWindowManager.ActiveCanvasViewer;
         if (cv != null)
         {
             IRasterDrawing drawing = cv.ActiveObject as IRasterDrawing;
             subProduct.ArgumentProvider.DataProvider = drawing != null ? drawing.DataProvider : null;
         }
         else
         {
             if (subProduct.ArgumentProvider.DataProvider != null)
             {
                 subProduct.ArgumentProvider.DataProvider.Dispose();
                 subProduct.ArgumentProvider.DataProvider = null;
             }
         }
     }
 }
Пример #23
0
        private string GetWarpImgName()
        {
            ICanvasViewer canViewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (canViewer == null)
            {
                return("");
            }
            IRasterDrawing drawing = _smartSession.SmartWindowManager.ActiveCanvasViewer.Canvas.PrimaryDrawObject as IRasterDrawing;

            GeoDo.RSS.Core.DF.IRasterDataProvider rdp = drawing.DataProvider;
            if (rdp == null)
            {
                return("");
            }
            else
            {
                return(rdp.fileName);
            }
        }
Пример #24
0
        private IRasterDataProvider GetRasterDataProvider()
        {
            if (_smartSession.SmartWindowManager == null)
            {
                return(null);
            }
            ICanvasViewer viewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null)
            {
                return(null);
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null || drawing.DataProvider == null)
            {
                return(null);
            }
            return(drawing.DataProvider);
        }
Пример #25
0
 public DensitySliceForm(IRasterDrawing rd)
 {
     InitializeComponent();
     _drawing = rd;
     if (_drawing.SelectedBandNos.Length == 1)
     {
         _selectBand = _drawing.SelectedBandNos[0];
     }
     _oSelectBands = _drawing.SelectedBandNos;
     if (rd.RgbProcessorStack != null && rd.RgbProcessorStack.Processors != null)
     {
         _oRgbProcessors = new List <IRgbProcessor>();
         foreach (IRgbProcessor processor in rd.RgbProcessorStack.Processors)
         {
             _oRgbProcessors.Add(processor);
         }
         _oRgbProcessors.Reverse();
     }
     InitForm();
 }
Пример #26
0
        public static Bitmap GetBitmapUseOriginResolution(this IRasterDrawing drawing)
        {
            IOverviewGenerator gen = drawing.DataProviderCopy as IOverviewGenerator;

            if (drawing.SelectedBandNos == null)
            {
                return(null);
            }
            Bitmap bm = null;

            if (drawing.SelectedBandNos.Length == 1)
            {
                bm         = new Bitmap(drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height, PixelFormat.Format8bppIndexed);
                bm.Palette = BitmapBuilderFactory.GetDefaultGrayColorPalette();
            }
            else
            {
                try
                {
                    bm = new Bitmap(drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height, PixelFormat.Format24bppRgb);
                }
                catch (Exception ex)
                {
                    throw new Exception(string.Format("无法创建过大的Bitmap[{0}*{1}]", drawing.DataProviderCopy.Width, drawing.DataProviderCopy.Height), ex.InnerException);
                }
            }
            string ext = Path.GetExtension(drawing.FileName).ToLower();

            if (ext == ".bmp" || ext == ".png" || ext == ".jpg" || ext == ".jpeg")
            {
                bm = (Bitmap)Bitmap.FromFile(drawing.FileName);
            }
            else
            {
                gen.Generate(drawing.SelectedBandNos, ref bm);
            }
            IRgbProcessorStack stack = drawing.RgbProcessorStack;

            stack.Apply(null, bm);
            return(bm);
        }
Пример #27
0
        public string CreateMCSI(ISmartSession session)
        {
            IRasterDrawing drawing = GetRasterDrawingArugment(session);

            if (drawing == null)
            {
                return(null);
            }
            string theme = GetLayoutTheme("MCSI");

            if (string.IsNullOrWhiteSpace(theme))
            {
                return(null);
            }
            int    width, height;
            string bmpFilename = CreateViewBitmap(drawing, session, out width, out height);
            string gxdFilename = GetGxdFilename(drawing.FileName, "MCSI");

            if (string.IsNullOrWhiteSpace(gxdFilename))
            {
                return(null);
            }
            //加载模版
            ILayoutTemplate temp = GetTemplateByArg(theme);

            if (temp == null)
            {
                return(null);
            }
            ILayout layout = temp.Layout;

            FitSizeToTemplateWidth(layout, width, height);
            //生成文档,并应用变量
            IGxdDocument gxdDoc = GetDocument(bmpFilename, temp);

            TryApplyVars(gxdDoc.GxdTemplateHost.LayoutTemplate, drawing);
            TrySetAttributesOfElements(gxdDoc);
            gxdDoc.SaveAs(gxdFilename);
            //IExtractResult er = new FileExtractResult("MCSI", gxdFilename) as IExtractResult;
            return(gxdFilename);
        }
Пример #28
0
        private void UpdateCanvasEnvelope(int offsetX, int offsetY)
        {
            ICanvasViewer viewer = _session.SmartWindowManager.ActiveCanvasViewer;

            if (viewer == null || viewer.ActiveObject == null)
            {
                return;
            }
            IRasterDrawing drawing = viewer.ActiveObject as IRasterDrawing;

            if (drawing == null || drawing.DataProvider == null)
            {
                return;
            }
            GeoDo.RSS.Core.DrawEngine.CoordEnvelope evp    = viewer.Canvas.CurrentEnvelope;
            Core.DrawEngine.CoordEnvelope           newevp = new Core.DrawEngine.CoordEnvelope(
                new Core.DrawEngine.CoordPoint(evp.MinX + _offsetX * _resX, evp.MinY - _offsetY * _resY),
                evp.Width, evp.Height);
            viewer.Canvas.CurrentEnvelope = newevp;
            viewer.Canvas.Refresh(Core.DrawEngine.enumRefreshType.All);
        }
Пример #29
0
        private void SaveSelectedBands(IRasterDrawing drawing, string enhanceFileName)
        {
            if (string.IsNullOrEmpty(enhanceFileName))
            {
                return;
            }
            int[] bands = drawing.SelectedBandNos;
            if (bands == null || bands.Length == 0)
            {
                return;
            }
            string bandString = bands[0].ToString();

            for (int i = 1; i < bands.Length; i++)
            {
                bandString += "," + bands[i].ToString();
            }
            string bandsFname = Path.GetDirectoryName(enhanceFileName) + "\\" + Path.GetFileNameWithoutExtension(enhanceFileName) + ".bands";

            File.WriteAllText(bandsFname, bandString);
        }
Пример #30
0
        private int[] GetBitmapIndexes(GeometryOfDrawed geometryOfDrawed)
        {
            PointF[] pts = geometryOfDrawed.RasterPoints.Clone() as PointF[];
            double   prjX, prjY;

            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = _canvas.CoordTransform;
            for (int i = 0; i < pts.Length; i++)
            {
                tran.Raster2Prj((int)pts[i].Y, (int)pts[i].X, out prjX, out prjY);
                pts[i].X = (float)prjX;
                pts[i].Y = (float)prjY;
            }
            IRasterDrawing rst  = _canvas.PrimaryDrawObject as IRasterDrawing;
            Size           size = rst.Bitmap.Size;

            using (IVectorAOIGenerator gen = new VectorAOIGenerator())
            {
                Envelope evp = new Envelope(rst.Envelope.MinX, rst.Envelope.MinY, rst.Envelope.MaxX, rst.Envelope.MaxY);
                return(gen.GetAOI(pts, geometryOfDrawed.Types, evp, size));
            }
        }