Пример #1
0
 public override void Dispose()
 {
     if (_landBrush != null)
     {
         _landBrush.Dispose();
         _landBrush = null;
     }
     if (_seaBrush != null)
     {
         _seaBrush.Dispose();
         _seaBrush = null;
     }
     if (_graphicsPath != null)
     {
         _graphicsPath.Dispose();
         _graphicsPath = null;
     }
     if (_features != null && _features.Count != 0)
     {
         _features.Clear();
         _features = null;
     }
     _coordTransform = null;
     _waterBodyFeatures.Clear();
     base.Dispose();
 }
Пример #2
0
        public int[] GetBitmapIndexes(Feature feature)
        {
            IRasterDrawing rst = _canvas.PrimaryDrawObject as IRasterDrawing;

            GeoDo.RSS.Core.DrawEngine.CoordEnvelope coordEvp = rst.Envelope;
            Envelope evp = null;

            if (feature.Projected)
            {
                evp = new Envelope(coordEvp.MinX, coordEvp.MinY, coordEvp.MaxX, coordEvp.MaxY);
            }
            else
            {
                if (rst.DataProvider.DataIdentify != null && rst.DataProvider.DataIdentify.IsOrbit)
                {
                    rst.DataProvider.OrbitProjectionTransformControl.Build();
                }
                GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = _canvas.CoordTransform;
                double geoX1, geoY1, geoX2, geoY2;
                tran.Prj2Geo(coordEvp.MinX, coordEvp.MaxY, out geoX1, out geoY1);
                tran.Prj2Geo(coordEvp.MaxX, coordEvp.MinY, out geoX2, out geoY2);
                evp = new Envelope(geoX1, geoY2, geoX2, geoY1);
            }
            Size size = rst.Bitmap.Size;

            using (IVectorAOIGenerator gen = new VectorAOIGenerator())
            {
                return(gen.GetAOI(new ShapePolygon[] { feature.Geometry as ShapePolygon }, evp, size));
            }
        }
Пример #3
0
        private GraphicsPath ToGraphicsPath(CodeCell.AgileMap.Core.Feature feature, ICanvas canvas)
        {
            CodeCell.AgileMap.Core.ShapePolyline           ply = feature.Geometry as CodeCell.AgileMap.Core.ShapePolyline;
            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = canvas.CoordTransform;
            double       prjX, prjY;
            int          screenX, screenY;
            GraphicsPath path = new GraphicsPath();

            foreach (CodeCell.AgileMap.Core.ShapeLineString line in ply.Parts)
            {
                PointF[] pts = new PointF[line.Points.Length];
                for (int i = 0; i < pts.Length; i++)
                {
                    if (!feature.Projected)
                    {
                        tran.Geo2Prj(line.Points[i].X, line.Points[i].Y, out prjX, out prjY);
                    }
                    else
                    {
                        prjX = line.Points[i].X;
                        prjY = line.Points[i].Y;
                    }
                    tran.Prj2Screen(prjX, prjY, out screenX, out screenY);
                    pts[i].X = screenX;
                    pts[i].Y = screenY;
                }
                path.AddCurve(pts.ToArray());
                //path.AddLines();
                path.StartFigure();
            }
            return(path);
        }
Пример #4
0
        private ShapePolygon ShapePolygonGeoToPrj(ShapePolygon shapePolygon)
        {
            if (shapePolygon == null || shapePolygon.IsProjected)
            {
                return(null);
            }
            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = _canvas.CoordTransform;
            double prjX;
            double prjY;
            int    ringLength = shapePolygon.Rings.Length;

            ShapeRing[] ring       = new ShapeRing[ringLength];
            int         potsLength = 0;

            for (int i = 0; i < ringLength; i++)
            {
                if (shapePolygon.Rings[i].Points == null)
                {
                    continue;
                }
                potsLength = shapePolygon.Rings[i].Points.Length;
                ShapePoint[] shpPoint = new ShapePoint[potsLength];
                for (int j = 0; j < shapePolygon.Rings[i].Points.Length; j++)
                {
                    tran.Geo2Prj(shapePolygon.Rings[i].Points[j].X, shapePolygon.Rings[i].Points[j].Y, out prjX, out prjY);
                    ShapePoint point = new ShapePoint(prjX, prjY);
                    shpPoint[j] = point;
                }
                ring[i] = new ShapeRing(shpPoint);
            }
            ShapePolygon prjSp = new ShapePolygon(ring);

            return(prjSp);
        }
Пример #5
0
        public GeoDo.RSS.Core.DrawEngine.CoordEnvelope GetMinGeoRect()
        {
            IRasterDrawing rst = _canvas.PrimaryDrawObject as IRasterDrawing;

            if (rst == null)
            {
                return(null);
            }
            GeoDo.RSS.Core.DrawEngine.CoordEnvelope retRect = GetGeoRect();
            if (retRect == null)
            {
                return(null);
            }
            GeoDo.RSS.Core.DrawEngine.CoordEnvelope        envelope = null;
            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran     = _canvas.CoordTransform;
            if (rst.DataProvider.CoordType == enumCoordType.GeoCoord)
            {
                envelope = new GeoDo.RSS.Core.DrawEngine.CoordEnvelope(rst.DataProvider.CoordEnvelope.MinX, rst.DataProvider.CoordEnvelope.MaxX,
                                                                       rst.DataProvider.CoordEnvelope.MinY, rst.DataProvider.CoordEnvelope.MaxY);
            }
            else if (rst.DataProvider.CoordType == enumCoordType.PrjCoord)
            {
                double geoX1, geoY1, geoX2, geoY2;
                tran.Prj2Geo(rst.DataProvider.CoordEnvelope.MinX, rst.DataProvider.CoordEnvelope.MaxY, out geoX1, out geoY1);
                tran.Prj2Geo(rst.DataProvider.CoordEnvelope.MaxX, rst.DataProvider.CoordEnvelope.MinY, out geoX2, out geoY2);
                envelope = new GeoDo.RSS.Core.DrawEngine.CoordEnvelope(geoX1, geoX2, geoY2, geoY1);
            }
            double minX = envelope.MinX > retRect.MinX ? envelope.MinX : retRect.MinX;
            double maxX = envelope.MaxX < retRect.MaxX ? envelope.MaxX : retRect.MaxX;
            double minY = envelope.MinY > retRect.MinY ? envelope.MinY : retRect.MinY;
            double maxY = envelope.MaxY < retRect.MaxY ? envelope.MaxY : retRect.MaxY;

            return(new Core.DrawEngine.CoordEnvelope(minX, maxX, minY, maxY));
        }
Пример #6
0
 public void Render(object sender, IDrawArgs drawArgs)
 {
     if (_mapRuntime == null)
     {
         return;
     }
     if (_canvas == null)
     {
         _canvas = sender as ICanvas;
         Init();
     }
     else
     {
         if (_coordinateTranform == null)
         {
             _coordinateTranform = _canvas.CoordTransform;
         }
     }
     _renderArgs.BeginRender(drawArgs.Graphics as Graphics);
     try
     {
         if (_isEnableDummyRender)
         {
             DoRender(_renderArgs);
         }
         else
         {
             DirectRender(_renderArgs);
         }
     }
     finally
     {
         _renderArgs.EndRender();
     }
 }
Пример #7
0
        public void Render(object sender, IDrawArgs drawArgs)
        {
            if (_coordTransform == null)
            {
                _coordTransform = (sender as ICanvas).CoordTransform;
            }
            ICanvas canvas = sender as ICanvas;

            TryLoadFeatures(canvas);
            Graphics g = drawArgs.Graphics as Graphics;

            //draw sea
            g.Clear(_seaColor);
            //draw land
            DrawFeatures(g, drawArgs, _landBrush, _features);
            //draw waterbody
            DrawFeatures(g, drawArgs, _seaBrush, _waterBodyFeatures);
        }
Пример #8
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);
        }
Пример #9
0
        private void TryExportIceLine(Feature[] features, string iceLineShpFileName)
        {
            double geoX, geoY = 0;

            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = _canvas.CoordTransform;
            List <Feature> fets = new List <Feature>();
            int            oid  = 0;

            foreach (Feature fet in features)
            {
                ShapePolyline          line           = fet.Geometry as ShapePolyline;
                List <ShapeLineString> newLineStrings = new List <ShapeLineString>();
                ShapeLineString        newpart        = null;
                ShapePoint             newPt          = null;
                ShapeLineString        part           = null;;
                List <ShapePoint>      newpts         = new List <ShapePoint>();
                for (int m = 0; m < line.Parts.Length; m++)
                {
                    part = line.Parts[m];
                    for (int j = 0; j < part.Points.Length; j++)
                    {
                        ShapePoint sp = part.Points[j];
                        if (line.IsProjected)
                        {
                            tran.Prj2Geo(sp.X, sp.Y, out geoX, out geoY);
                            newPt = new ShapePoint(geoX, geoY);
                        }
                        else
                        {
                            newPt = new ShapePoint(sp.X, sp.Y);
                        }
                        newpts.Add(newPt);
                    }
                    newpart = new ShapeLineString(newpts.ToArray());
                    newLineStrings.Add(newpart);
                }
                ShapePolyline sply       = new ShapePolyline(newLineStrings.ToArray());
                string[]      fieldvalue = new string[] { fet.FieldValues[0] };
                Feature       outFet     = new Feature(oid, sply, new string[] { _fieldName }, fieldvalue, null);
                oid++;
                fets.Add(outFet);
            }
            TryExport2ShapeFile(fets.ToArray(), iceLineShpFileName, enumShapeType.Polyline);
        }
Пример #10
0
        private GraphicsPath ToGraphicsPath(Feature feature, ICanvas canvas)
        {
            if (feature == null)
            {
                return(null);
            }
            ShapePolygon ply = feature.Geometry as ShapePolygon;

            if (ply == null || ply.Rings == null || ply.Rings.Length == 0)
            {
                return(null);
            }
            GeoDo.RSS.Core.DrawEngine.ICoordinateTransform tran = canvas.CoordTransform;
            double       prjX, prjY;
            int          screenX, screenY;
            GraphicsPath path = new GraphicsPath();

            foreach (ShapeRing ring in ply.Rings)
            {
                PointF[] pts = new PointF[ring.Points.Length];
                if (pts == null || pts.Length == 0)
                {
                    continue;
                }
                for (int i = 0; i < pts.Length; i++)
                {
                    if (!feature.Projected)
                    {
                        tran.Geo2Prj(ring.Points[i].X, ring.Points[i].Y, out prjX, out prjY);
                    }
                    else
                    {
                        prjX = ring.Points[i].X;
                        prjY = ring.Points[i].Y;
                    }
                    tran.Prj2Screen(prjX, prjY, out screenX, out screenY);
                    pts[i].X = screenX;
                    pts[i].Y = screenY;
                }
                path.AddPolygon(pts.ToArray());
            }
            return(path);
        }
Пример #11
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));
            }
        }
Пример #12
0
 private void Init()
 {
     _coordinateTranform = _canvas.CoordTransform;
     TrySetSpatialRef(_canvas, _mapRuntime);
     Apply(_mcdfile);
 }