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 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)); }
//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; }
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); }
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); }