Exemplo 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));
            }
        }
Exemplo n.º 2
0
        public static int[] GetAOI(CoordEnvelope fileCorEnv, AOIContainerLayer aoiContainer, Size fileSize)
        {
            int[] retAOI               = null, aoi = null;
            VectorAOIGenerator vg      = new VectorAOIGenerator();
            Envelope           fileEnv = new Envelope(fileCorEnv.MinX, fileCorEnv.MinY, fileCorEnv.MaxX, fileCorEnv.MaxY);

            foreach (object obj in aoiContainer.AOIs)
            {
                try
                {
                    aoi = vg.GetAOI(new ShapePolygon[] { (obj as Feature).Geometry as ShapePolygon }, fileEnv, fileSize);
                    if (aoi == null)
                    {
                        continue;
                    }
                    if (retAOI == null)
                    {
                        retAOI = aoi;
                    }
                    else
                    {
                        retAOI = GeoDo.RSS.RasterTools.AOIHelper.Merge(new int[][] { retAOI, aoi });
                    }
                }
                catch (System.Exception ex)
                {
                    continue;
                }
            }
            return(retAOI);
        }
Exemplo n.º 3
0
 private int[] GetIndexes(GeometryOfDrawed geo)
 {
     using (IVectorAOIGenerator gen = new VectorAOIGenerator())
     {
         return(gen.GetAOI(geo.RasterPoints.Clone() as PointF[], geo.Types, GetSize()));
     }
 }
Exemplo n.º 4
0
        private int[] GetIndexes(Feature feature)
        {
            VectorAOIGenerator vg = new VectorAOIGenerator();

            int[] aoi = null;
            aoi = vg.GetAOI(new ShapePolygon[] { feature.Geometry as ShapePolygon },
                            new Envelope(_fileEnvelope.MinX, _fileEnvelope.MinY, _fileEnvelope.MaxX, _fileEnvelope.MaxY),
                            _fileSize);
            return(aoi);
        }
        public Dictionary <string, int[]> GetFeatureAOIIndex()
        {
            int filedIndex = -1;

            GetFiledIndex(out filedIndex, cbFields.Text);
            if (_selectFeature == null || _selectFeature.Count == 0 || filedIndex == -1)
            {
                return(null);
            }
            Dictionary <string, int[]> result = new Dictionary <string, int[]>();
            int        featuresLength         = _selectFeature.Count;
            List <int> tempInt = new List <int>();

            VectorAOIGenerator vg = new VectorAOIGenerator();

            int[]  aoi = null;
            string currentFiledValue = string.Empty;

            for (int i = 0; i < featuresLength; i++)
            {
                Feature feature = _selectFeature[i];
                if (_spatialReference != null && _spatialReference.ProjectionCoordSystem != null && !feature.Projected)
                {
                    using (GeoDo.Project.IProjectionTransform transform = GeoDo.Project.ProjectionTransformFactory.GetProjectionTransform(GeoDo.Project.SpatialReference.GetDefault(), _spatialReference))
                    {
                        using (ShapePolygon spolygon = ShapePolygonPrjToGeo(transform, feature.Geometry as ShapePolygon))
                        {
                            aoi = vg.GetAOI(new ShapePolygon[] { spolygon }, _envelope, _size);
                        }
                    }
                }
                else
                {
                    ShapePolygon spolygon = _selectFeature[i].Geometry as ShapePolygon;
                    aoi = vg.GetAOI(new ShapePolygon[] { spolygon }, _envelope, _size);
                }
                if (aoi == null || aoi.Length == 0)
                {
                    continue;
                }
                currentFiledValue = _selectFeature[i].FieldValues[filedIndex];
                if (result.ContainsKey(currentFiledValue))
                {
                    tempInt.AddRange(result[currentFiledValue]);
                    tempInt.AddRange(aoi);
                    result[currentFiledValue] = tempInt.ToArray();
                }
                else
                {
                    result.Add(currentFiledValue, aoi);
                }
                tempInt.Clear();
            }
            return(result.Count == 0 ? null : result);
        }
Exemplo n.º 6
0
        public int[] GetFeatureAOIIndex()
        {
            if (_vectorFeature == null || _outsizeRegion == null)
            {
                return(null);
            }
            VectorAOIGenerator vg = new VectorAOIGenerator();

            int[] aoi = null;
            aoi = vg.GetAOI(new ShapePolygon[] { _vectorFeature.Geometry as ShapePolygon },
                            new Envelope(_fileEnvelope.MinX, _fileEnvelope.MinY, _fileEnvelope.MaxX, _fileEnvelope.MaxY),
                            _fileSize);
            return(aoi);
        }
Exemplo n.º 7
0
        //魔术棒
        private void HandleAdsorb(object result)
        {
            GeometryOfDrawed    geometry = result as GeometryOfDrawed;
            IRasterDataProvider prd      = GetRasterDataProvider(_canvasViewer);

            using (IVectorAOIGenerator gen = new VectorAOIGenerator())
            {
                int[]             aoi    = gen.GetAOI(geometry.RasterPoints.Clone() as PointF[], geometry.Types, new Size(prd.Width, prd.Height));
                string            name   = GetName(_currentProduct, _currentSubProduct);
                IPixelIndexMapper mapper = _resultObjects[name].BinaryValues;
                mapper.Put(aoi);
                UpdateLayer(_resultObjects[name]);
            }
        }
Exemplo n.º 8
0
 private static int[] GetAoi(ShapePolygon shpPolygon, Envelope env, Size size)
 {
     try
     {
         int[] aoi = null;
         using (VectorAOIGenerator vectorGen = new VectorAOIGenerator())
         {
             aoi = vectorGen.GetAOI(new ShapePolygon[] { shpPolygon }, env, size);
         }
         return(aoi);
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
Exemplo n.º 9
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);
        }
Exemplo n.º 10
0
        public static Dictionary <string, int[]> GetFeatureAOIIndex(string shpFileName, string primaryFieldName, CoordEnvelope envelope, Size size)
        {
            string shpFullname = VectorAOITemplate.FindVectorFullname(shpFileName);

            if (String.IsNullOrEmpty(shpFullname))
            {
                return(null);
            }
            Feature[] features = GetFeatures(shpFullname);
            if (features == null || features.Length == 0)
            {
                return(null);
            }
            Dictionary <string, int[]> result = new Dictionary <string, int[]>();
            int        featuresLength         = features.Length;
            List <int> tempInt = new List <int>();

            using (VectorAOIGenerator vg = new VectorAOIGenerator())
            {
                int[]  aoi = null;
                string currentFiledValue = string.Empty;
                for (int i = 0; i < featuresLength; i++)
                {
                    aoi = vg.GetAOI(new ShapePolygon[] { features[i].Geometry as ShapePolygon }, new Envelope(envelope.MinX, envelope.MinY, envelope.MaxX, envelope.MaxY), size);
                    if (aoi == null || aoi.Length == 0)
                    {
                        continue;
                    }
                    currentFiledValue = features[i].GetFieldValue(primaryFieldName);
                    if (result.ContainsKey(currentFiledValue))
                    {
                        tempInt.AddRange(result[currentFiledValue]);
                        tempInt.AddRange(aoi);
                        result[currentFiledValue] = tempInt.ToArray();
                    }
                    else
                    {
                        result.Add(currentFiledValue, aoi);
                    }
                    tempInt.Clear();
                }
                return(result.Count == 0 ? null : result);
            }
        }
Exemplo n.º 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));
            }
        }