Ejemplo n.º 1
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));
            }
        }
Ejemplo n.º 2
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));
        }
Ejemplo n.º 3
0
        //prj=>geo
        void IProjectionTransform.InverTransform(ShapePoint pt)
        {
            double geoX, geoY;

            _coordinateTranform.Prj2Geo(pt.X, pt.Y, out geoX, out geoY);
            pt.X = geoX;
            pt.Y = geoY;
        }
Ejemplo n.º 4
0
        private ShapePolygon ShapePolygonPrjToGeo(ShapePolygon shapePolygon)
        {
            if (shapePolygon == null)
            {
                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.Prj2Geo(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);
        }
Ejemplo n.º 5
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);
        }