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)); }
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); }
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]); }
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(); }
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); }
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]))); }
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); }
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)); }
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(); }
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(); }
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); } }
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); }
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))); } }
private void AddAoi(ISimpleVectorObjectHost host, string name, Core.DrawEngine.CoordEnvelope env) { host.Add(new SimpleVectorObject(name, env)); }
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)); }
public void To(Core.DrawEngine.CoordEnvelope viewport) { }
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)); }