Esempio n. 1
0
        private void AddAoiToVectorHost(ISimpleVectorObjectHost host, PrjEnvelopeItem prjItem)
        {
            PrjEnvelope prjEnv = prjItem.PrjEnvelope;

            Core.DrawEngine.CoordEnvelope env = new Core.DrawEngine.CoordEnvelope(prjEnv.MinX, prjEnv.MaxX, prjEnv.MinY, prjEnv.MaxY);
            host.Add(new SimpleVectorObject(prjItem.Name, env));
        }
Esempio n. 2
0
            public static OverViewObject CreateOverViewObject(ProjectionInfo pInfo)
            {
                OverViewObject ov = new monitoringPage.OverViewObject();

                ov.ProjectionInfo = pInfo;
                string          pngfilename = Path.ChangeExtension(Path.Combine(DataPathHelper.ProjectionRootPath + pInfo.datapath), ".overview.png");
                PrjEnvelopeItem prjEnv      = new PrjEnvelopeItem("", new PrjEnvelope(pInfo.minx, pInfo.maxx, pInfo.miny, pInfo.maxy));

                if (!File.Exists(pngfilename))
                {
                    return(null);
                }
                Core.DrawEngine.CoordEnvelope env = CoordEnvelopeFromPrj(prjEnv);
                Bitmap bmp = LoadImage(pngfilename);

                if (bmp == null || bmp.Height * bmp.Width > 1000000)
                {
                    return(null);
                }
                if (env.Height <= 0 || env.Width <= 0 || env.Height * env.Width > 1600)
                {
                    return(null);
                }
                ov.OverviewName   = Path.GetFileNameWithoutExtension(pngfilename);
                ov.ProjectionInfo = pInfo;
                ov.Envelope       = env;
                ov.Overview       = bmp;
                return(ov);
            }
Esempio n. 3
0
        private void MagicWandResult2ExtractReulst(ScanLineSegment[] segs, IRasterDrawing drawing)
        {
            //获取判识结果对象
            string            name   = GetName(_currentProduct, _currentSubProduct);
            IPixelIndexMapper mapper = _resultObjects[name].BinaryValues;
            //计算当前视窗分辨率和缩放比
            double resX   = drawing.Envelope.Width / drawing.Bitmap.Width;
            double resY   = drawing.Envelope.Height / drawing.Bitmap.Height;
            float  scaleX = (float)(resX / drawing.OriginalResolutionX);
            float  scaleY = (float)(resY / (drawing.OriginalEnvelope.Height / drawing.DataProvider.Height));

            //计算当前视窗位图和原始栅格坐标交集
            Core.DrawEngine.CoordEnvelope evp = drawing.Envelope.Intersect(drawing.OriginalEnvelope);

            /*
             * 计算当前视窗位图中有效影像区域
             */
            int bRow = (int)((drawing.Envelope.MaxY - evp.MaxY) / resY);
            int bCol = (int)((evp.MinX - drawing.Envelope.MinX) / resX);
            int eRow = (int)(bRow + evp.Height / resY);
            int eCol = (int)(bCol + evp.Width / resX);

            /*
             * 因为瓦片为中心对齐方式,因此有无效黑边
             * row0,col0为实际数据行相对于全栅格图像的偏移
             */
            int row0 = (int)((1 / scaleY) * (drawing.OriginalEnvelope.MaxY - evp.MaxY) / drawing.OriginalResolutionX);
            int col0 = (int)((1 / scaleX) * (evp.MinX - drawing.OriginalEnvelope.MinX) / drawing.OriginalResolutionX);

            /*
             * 将扫面线转换到原始图像区域
             */
            List <ScanLineSegment> retSegs = new List <ScanLineSegment>();

            for (int i = 0; i < segs.Length; i++)
            {
                //无效黑边行
                if (segs[i].Row < bRow || segs[i].Row >= eRow)
                {
                    continue;
                }
                segs[i].Row = segs[i].Row - bRow + row0;
                //Math.Max,Max.Min去除无效黑边列
                segs[i].BeginCol = Math.Max(segs[i].BeginCol, bCol) - bCol + col0;
                segs[i].EndCol   = Math.Min(segs[i].EndCol, eCol) - bCol + col0;
                retSegs.Add(segs[i]);
            }
            if (retSegs.Count == 0)
            {
                return;
            }
            // by chennan 应用感兴趣区域
            int[] aoi = GetAOI();
            //将扫描线重采样为原始分辨率(1:1)并生成二值图
            IBinaryResampler resampler = new BinaryResampler();

            resampler.Resample(retSegs.ToArray(), scaleX, scaleY, mapper, aoi);
            //更新图层
            UpdateLayer(_resultObjects[name]);
        }
Esempio n. 4
0
 void ucPrjEnvelopes1_OnEnvelopeChanged(object sender, EventArgs e)
 {
     if (_mapAoiChanging)
     {
         return;
     }
     if (rbCenter.Checked)
     {
         if (_simpleMapControl != null)
         {
             PrjEnvelope env = ucPrjEnvelopes1.PrjEnvelopes[0].PrjEnvelope;
             if (_simpleMapControl.DrawedAOI != null)
             {
                 _simpleMapControl.DrawedAOI = null;
             }
             if (_dstSpatialRef.ProjectionCoordSystem != null)
             {
                 Core.DrawEngine.CoordEnvelope           geoEnv = new Core.DrawEngine.CoordEnvelope(env.MinX, env.MaxX, env.MinY, env.MaxY);
                 GeoDo.RSS.Core.DrawEngine.CoordEnvelope prjEnv = GeoToPrjEnv(geoEnv, _dstSpatialRef);
                 _simpleMapControl.DrawedAOI = geoEnv;
             }
             else
             {
                 _simpleMapControl.DrawedAOI = new Core.DrawEngine.CoordEnvelope(env.MinX, env.MaxX, env.MinY, env.MaxY);
             }
         }
     }
     UpdateDrawAOI();
     UpdateOutputFileName();
 }
Esempio n. 5
0
        private string TryCheckArgsEnvironment(out GeoDo.RSS.Core.DrawEngine.CoordEnvelope[] envelopes)
        {
            ICanvasViewer canViewer = _smartSession.SmartWindowManager.ActiveCanvasViewer;

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

            if (aoiProvider == null)
            {
                throw new Exception("未从激活的数据窗口中获取感兴趣区域");
            }
            Core.DrawEngine.CoordEnvelope geoEnvelope = aoiProvider.GetGeoRect();
            if (geoEnvelope == null)
            {
                throw new Exception("未从激活的数据窗口中获取感兴趣区域");
            }
            envelopes = new Core.DrawEngine.CoordEnvelope[] { geoEnvelope };

            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);
        }
Esempio n. 6
0
        private GeoDo.RSS.Core.DrawEngine.CoordEnvelope GeoToPrjEnv(Core.DrawEngine.CoordEnvelope geoAoi, ISpatialReference dstSpatialRef)
        {
            IProjectionTransform transform = ProjectionTransformFactory.GetProjectionTransform(SpatialReference.GetDefault(), dstSpatialRef);

            double[] xs = new double[] { geoAoi.MinX, geoAoi.MaxX };
            double[] ys = new double[] { geoAoi.MinY, geoAoi.MaxY };
            transform.Transform(xs, ys);
            return(new GeoDo.RSS.Core.DrawEngine.CoordEnvelope(Math.Min(xs[0], xs[1]), Math.Max(xs[0], xs[1]), Math.Min(ys[0], ys[1]), Math.Max(ys[0], ys[1])));
        }
Esempio n. 7
0
 private Core.DrawEngine.CoordEnvelope GetCoordEnvelope(IRasterDataProvider dataProvider)
 {
     Core.DrawEngine.CoordEnvelope evp = new Core.DrawEngine.CoordEnvelope(
         dataProvider.CoordEnvelope.MinX,
         dataProvider.CoordEnvelope.MaxX,
         dataProvider.CoordEnvelope.MinY,
         dataProvider.CoordEnvelope.MaxY);
     return(evp);
 }
Esempio n. 8
0
        private static GeoDo.RSS.Core.DF.CoordEnvelope PrjToGeoCoordEvp(Core.DrawEngine.CoordEnvelope viewPrjEvp, ICoordinateTransform tans)
        {
            double minX = 0;
            double minY = 0;
            double maxX = 0;
            double maxY = 0;

            tans.Prj2Geo(viewPrjEvp.MinX, viewPrjEvp.MinY, out minX, out minY);
            tans.Prj2Geo(viewPrjEvp.MaxX, viewPrjEvp.MaxY, out maxX, out maxY);
            return(new GeoDo.RSS.Core.DF.CoordEnvelope(minX, maxX, minY, maxY));
        }
Esempio n. 9
0
 private void RefreshOverView()
 {
     _simpleMapControl.RemoveAllImageLayers();
     for (int i = 0; i < _mosaicProjectionFileProvider.FileItems.Length; i++)
     {
         if (_mosaicProjectionFileProvider.FileItems[i] != null)
         {
             string      filename = _mosaicProjectionFileProvider.FileItems[i].MainFile.fileName;
             PrjEnvelope prjEnv   = _mosaicProjectionFileProvider.FileItems[i].Envelope;
             Bitmap      bmp      = _mosaicProjectionFileProvider.FileItems[i].OverViewBmp;
             if (bmp != null && prjEnv != null)
             {
                 Core.DrawEngine.CoordEnvelope env = new Core.DrawEngine.CoordEnvelope(prjEnv.MinX, prjEnv.MaxX, prjEnv.MinY, prjEnv.MaxY);
                 _simpleMapControl.AddImageLayer(filename, bmp, env, true);
             }
         }
     }
     _simpleMapControl.Render();
 }
Esempio n. 10
0
        private void AddOverView(string pngfilename)
        {
            if (!File.Exists(pngfilename))
            {
                return;
            }
            string hdrfilename = pngfilename.Replace(".overview.png", ".hdr");

            if (!File.Exists(hdrfilename))
            {
                return;
            }
            HdrFile hdrFile = HdrFile.LoadFrom(hdrfilename);

            Core.DrawEngine.CoordEnvelope env = CoordEnvelopeFromHdr(hdrFile);
            Bitmap bmp = LoadImage(pngfilename);

            _simpleMapControl.AddImageLayer(pngfilename, bmp, env, true);
            _simpleMapControl.Render();
        }
Esempio n. 11
0
        private static Core.DrawEngine.CoordEnvelope GetDrawingEnvelop(ICanvas canvas, IRasterDataProvider prd)
        {
            if (prd == null)
            {
                return(null);
            }
            GeoDo.RSS.Core.DF.CoordEnvelope cop  = prd.CoordEnvelope.Clone();
            ICoordinateTransform            tans = canvas.CoordTransform;

            if (prd.CoordType == enumCoordType.PrjCoord)
            {
                return(new GeoDo.RSS.Core.DrawEngine.CoordEnvelope(cop.MinX, cop.MaxX, cop.MinY, cop.MaxY));
            }
            else
            {
                GeoDo.RSS.Core.DrawEngine.CoordEnvelope prjEvp = new Core.DrawEngine.CoordEnvelope(cop.MinX, cop.MaxX, cop.MinY, cop.MaxY);
                tans.Geo2Prj(prjEvp);
                return(prjEvp);
            }
        }
Esempio n. 12
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);
        }
Esempio n. 13
0
        private static Size GetMaxDataSize(ICanvas canvas, Core.DrawEngine.CoordEnvelope viewPrjEvp, IRasterDataProvider prd,
                                           out GeoDo.RSS.Core.DF.CoordEnvelope viewGeoEvp)
        {
            viewGeoEvp = null;
            if (prd == null)
            {
                return(Size.Empty);
            }
            viewGeoEvp = null;
            ICoordinateTransform tans = canvas.CoordTransform;

            viewGeoEvp = PrjToGeoCoordEvp(viewPrjEvp, tans);
            if (prd.CoordType == enumCoordType.PrjCoord)
            {
                return(new Size((int)(viewPrjEvp.Width / prd.ResolutionX), (int)(viewPrjEvp.Height / prd.ResolutionY)));
            }
            else
            {
                double wid = 0;
                double hei = 0;
                tans.Prj2Geo(viewPrjEvp.Width, viewPrjEvp.Height, out wid, out hei);
                return(new Size((int)(wid / prd.ResolutionX), (int)(hei / prd.ResolutionY)));
            }
        }
Esempio n. 14
0
 private void AddAoi(ISimpleVectorObjectHost host, string name, Core.DrawEngine.CoordEnvelope env)
 {
     host.Add(new SimpleVectorObject(name, env));
 }
Esempio n. 15
0
 private void AddAoiToVectorHost(ISimpleVectorObjectHost host, string name, CoordEnvelope envelope)
 {
     Core.DrawEngine.CoordEnvelope env = new Core.DrawEngine.CoordEnvelope(envelope.MinX, envelope.MaxX, envelope.MinY, envelope.MaxY);
     host.Add(new SimpleVectorObject(name, env));
 }
Esempio n. 16
0
 public void To(Core.DrawEngine.CoordEnvelope viewport)
 {
 }
Esempio n. 17
0
 private void AddVector(string name, PrjEnvelope prjEnv)
 {
     Core.DrawEngine.CoordEnvelope env = new Core.DrawEngine.CoordEnvelope(prjEnv.MinX, prjEnv.MaxX, prjEnv.MinY, prjEnv.MaxY);
     _aoiHost.Add(new SimpleVectorObject(name, env));
 }