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(); }
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)); } }
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); }
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); }
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)); }
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(); } }
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); }
/// <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); }
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); }
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); }
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)); } }
private void Init() { _coordinateTranform = _canvas.CoordTransform; TrySetSpatialRef(_canvas, _mapRuntime); Apply(_mcdfile); }