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)); } }
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); }
private int[] GetIndexes(GeometryOfDrawed geo) { using (IVectorAOIGenerator gen = new VectorAOIGenerator()) { return(gen.GetAOI(geo.RasterPoints.Clone() as PointF[], geo.Types, GetSize())); } }
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); }
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); }
//魔术棒 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]); } }
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); } }
/// <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); }
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); } }
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)); } }