コード例 #1
0
 public override void Update(IPageLayout ipageLayout_0)
 {
     if (this.Element != null)
     {
         (ipageLayout_0 as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, this.Element, null);
         IPoint position = this.GetPosition(ipageLayout_0);
         (this.Element as TableElement).RowNumber    = this.RowNumber;
         (this.Element as TableElement).ColumnNumber = this.ColumnNumber;
         IEnvelope to = this.Element.Geometry.Envelope;
         (this.Element as TableElement).CreateTable(ipageLayout_0 as IActiveView, position, this.sortedList_0);
         IEnvelope envelope = this.Element.Geometry.Envelope;
         this.Element.QueryBounds((ipageLayout_0 as IActiveView).ScreenDisplay, envelope);
         try
         {
             IAffineTransformation2D transformation = new AffineTransformation2DClass();
             transformation.DefineFromEnvelopes(envelope, to);
             (base.m_pElement as ITransform2D).Transform(esriTransformDirection.esriTransformForward,
                                                         transformation);
         }
         catch
         {
         }
         (ipageLayout_0 as IActiveView).GraphicsContainer.UpdateElement(base.m_pElement);
         (ipageLayout_0 as IActiveView).PartialRefresh(esriViewDrawPhase.esriViewGraphics, base.m_pElement, null);
         this.Save();
     }
 }
コード例 #2
0
        private void method_0(bool bool_0)
        {
            double width  = this.ienvelope_0.Width;
            double height = this.ienvelope_0.Height;

            if (width == 0.0)
            {
                this.ienvelope_0.Width = 1.0;
                this.ienvelope_1.Width = 1.0;
            }
            if (height == 0.0)
            {
                this.ienvelope_0.Height = 1.0;
                this.ienvelope_1.Height = 1.0;
            }
            IAffineTransformation2D transformation = new AffineTransformation2DClass();

            transformation.DefineFromEnvelopes(this.ienvelope_0, this.ienvelope_1);
            ITransform2D transformd = this.ielement_0 as ITransform2D;

            if (bool_0)
            {
                transformd.Transform(esriTransformDirection.esriTransformForward, transformation);
            }
            else
            {
                transformd.Transform(esriTransformDirection.esriTransformReverse, transformation);
            }
        }
コード例 #3
0
        public bool GetTK(IPageLayout ipageLayout_0)
        {
            IEnvelope envelope;
            IEnvelope envelope2;

            if (this.string_2.Length == 0)
            {
                return(false);
            }
            IMapFrame frame = (ipageLayout_0 as IActiveView).GraphicsContainer.FindFrame((ipageLayout_0 as IActiveView).FocusMap) as IMapFrame;

            if ((this.double_1 != 0.0) || (this.double_2 != 0.0))
            {
                ipageLayout_0.Page.PutCustomSize(this.double_1 + 6.0, this.double_2 + 6.0);
                envelope  = (frame as IElement).Geometry.Envelope;
                envelope2 = new EnvelopeClass();
                if (this.double_1 == 0.0)
                {
                    this.double_1 = envelope.Width;
                }
                if (this.double_2 == 0.0)
                {
                    this.double_2 = envelope.Height;
                }
                envelope2.PutCoords(envelope.XMin, envelope.YMin, envelope.XMin + this.double_1, envelope.YMin + this.double_2);
                IAffineTransformation2D transformation = new AffineTransformation2DClass();
                transformation.DefineFromEnvelopes(envelope, envelope2);
                ITransform2D transformd = frame as ITransform2D;
                transformd.Transform(esriTransformDirection.esriTransformForward, transformation);
                double dx = 0.0;
                double dy = 0.0;
                if (envelope.XMin < 2.0)
                {
                    dx = 2.0;
                }
                if (envelope.YMin < 2.0)
                {
                    dy = 2.0;
                }
                if ((dx != 0.0) && (dy != 0.0))
                {
                    transformd.Move(dx, dy);
                }
            }
            if (this.double_0 > 0.0)
            {
                envelope = (frame as IElement).Geometry.Envelope;
                double    num3   = (envelope.Width * this.double_0) / 100.0;
                double    num4   = (envelope.Height * this.double_0) / 100.0;
                IEnvelope extent = (frame.Map as IActiveView).Extent;
                envelope2 = new EnvelopeClass();
                envelope2.PutCoords(extent.XMin, extent.YMin, extent.XMin + num3, extent.YMin + num4);
                (frame.Map as IActiveView).Extent = envelope2;
            }
            frame.Border = null;
            return(true);
        }
コード例 #4
0
 public void Apply()
 {
     if (this.bool_1)
     {
         try
         {
             double    xMin = double.Parse(this.txtX.Text);
             double    yMin = double.Parse(this.txtY.Text);
             double    num3 = double.Parse(this.txtWidth.Text);
             double    num4 = double.Parse(this.txtHeight.Text);
             IEnvelope to   = new EnvelopeClass();
             to.PutCoords(xMin, yMin, xMin + num3, yMin + num4);
             IEnvelope envelope = this.ielement_0.Geometry.Envelope;
             if ((num3 == 0.0) || (num4 == 0.0))
             {
                 if (this.ielement_0 is ILineElement)
                 {
                     IPointCollection geometry = this.ielement_0.Geometry as IPointCollection;
                     if (geometry.PointCount == 2)
                     {
                         object           missing = System.Type.Missing;
                         IPointCollection points2 = new PolylineClass();
                         PointClass       class2  = new PointClass
                         {
                             X = xMin,
                             Y = yMin
                         };
                         IPoint     inPoint = class2;
                         PointClass class3  = new PointClass
                         {
                             X = xMin + num3,
                             Y = yMin + num4
                         };
                         IPoint point2 = class3;
                         points2.AddPoint(inPoint, ref missing, ref missing);
                         points2.AddPoint(point2, ref missing, ref missing);
                         this.ielement_0.Geometry = points2 as IGeometry;
                     }
                 }
             }
             else
             {
                 IAffineTransformation2D transformation = new AffineTransformation2DClass();
                 transformation.DefineFromEnvelopes(envelope, to);
                 (this.ielement_0 as ITransform2D).Transform(esriTransformDirection.esriTransformForward,
                                                             transformation);
             }
             this.bool_1 = false;
         }
         catch
         {
             MessageBox.Show("数据输入错误,请检查!");
         }
     }
 }
コード例 #5
0
        private void method_5(IElement ielement_0, double double_0)
        {
            IEnvelope from     = base.m_pElement.Geometry.Envelope;
            IEnvelope envelope = ielement_0.Geometry.Envelope;

            envelope.Expand(double_0, double_0, true);
            IEnvelope to = new EnvelopeClass();

            to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMin + envelope.Height);
            IAffineTransformation2D transformation = new AffineTransformation2DClass();

            transformation.DefineFromEnvelopes(from, to);
            (base.m_pElement as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation);
        }
コード例 #6
0
        public override IElement GetElement(IPageLayout ipageLayout_0)
        {
            IElement element = base.GetElement(ipageLayout_0);

            if (this.bool_0)
            {
                IEnvelope envelope = (MapFrameAssistant.GetFocusMapFrame(ipageLayout_0) as IElement).Geometry.Envelope;
                IEnvelope from     = element.Geometry.Envelope;
                IEnvelope to       = element.Geometry.Envelope;
                to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMax);
                IAffineTransformation2D transformation = new AffineTransformation2DClass();
                transformation.DefineFromEnvelopes(from, to);
                (element as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation);
            }
            return(element);
        }
コード例 #7
0
        //仿射变换
        private void AffineAdjust()
        {
            AffineTransformation2DClass affineTrans = new AffineTransformation2DClass();

            int nCount = m_NewDisplacement.ControlPointsCount;

            IPoint[] fromPoints = new IPoint[nCount];
            IPoint[] toPoints   = new IPoint[nCount];
            for (int i = 0; i < nCount; i++)
            {
                fromPoints[i] = m_NewDisplacement.OriginPoints.get_Point(i);
                toPoints[i]   = m_NewDisplacement.TargetPoints.get_Point(i);
            }

            affineTrans.DefineFromControlPoints(fromPoints, toPoints);
            execAdjust(affineTrans);
        }
コード例 #8
0
        public override IElement GetElement(IPageLayout ipageLayout_0)
        {
            IElement element = base.GetElement(ipageLayout_0);

            if (this.SizeStyle != MapCartoTemplateLib.SizeStyle.Fixed)
            {
                double    num;
                IEnvelope envelope = (MapFrameAssistant.GetFocusMapFrame(ipageLayout_0) as IElement).Geometry.Envelope;
                IEnvelope from     = element.Geometry.Envelope;
                if (from.IsEmpty)
                {
                    return(element);
                }
                IEnvelope to = element.Geometry.Envelope;
                if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.SameAsInsideWidth)
                {
                    num = (from.Height * envelope.Width) / from.Width;
                    to.PutCoords(from.XMin, from.YMin, from.XMin + envelope.Width, from.YMin + num);
                }
                else if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.SameAsInsideHeight)
                {
                    num = (from.Width * envelope.Height) / from.Height;
                    to.PutCoords(from.XMin, from.YMin, from.XMin + num, from.YMin + envelope.Height);
                }
                else
                {
                    double num2;
                    if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.InsideWidthScale)
                    {
                        num2 = envelope.Width * this.SizeScale;
                        num  = (from.Height * num2) / from.Width;
                        to.PutCoords(from.XMin, from.YMin, from.XMin + num2, from.YMin + num);
                    }
                    else if (this.SizeStyle == MapCartoTemplateLib.SizeStyle.InsideWidthScale)
                    {
                        num  = envelope.Height * this.SizeScale;
                        num2 = (from.Width * num) / from.Height;
                        to.PutCoords(from.XMin, from.YMin, from.XMin + num2, from.YMin + num);
                    }
                }
                IAffineTransformation2D transformation = new AffineTransformation2DClass();
                transformation.DefineFromEnvelopes(from, to);
                (element as ITransform2D).Transform(esriTransformDirection.esriTransformForward, transformation);
            }
            return(element);
        }
コード例 #9
0
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            if (Button == 2)
            {
                return;
            }
            INewLineFeedback pLineFeed;

            if (m_pPoint1 == null)
            {
                m_pPoint1   = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
                m_pPoint1   = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint1);
                m_pFeedback = new NewLineFeedbackClass();
                pLineFeed   = (INewLineFeedback)m_pFeedback;
                pLineFeed.Start(m_pPoint1);
                if (m_pFeedback != null)
                {
                    m_pFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay;
                }
            }
            else if (m_pPoint2 == null)
            {
                ///20140216 lyf
                ICursor pCursor = null;
                m_selectionSet.Search(null, false, out pCursor);
                IFeatureCursor pFeatureCursor = pCursor as IFeatureCursor;
                IFeature       m_pFeature     = pFeatureCursor.NextFeature();

                if (pCursor != null)
                {
                    pCursor = null;
                    ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pCursor);
                }

                if (m_pFeature == null)
                {
                    MessageBox.Show(@"所选要素为空,请重新选择要素。", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                m_pPoint2 = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
                m_pPoint2 = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint2);
                //线和要素都齐全了,开始复制
                //IFeatureLayer pFeatureLayer = m_pCurrentLayer as IFeatureLayer;
                IFeatureClass pFeatureClass = m_featureLayer.FeatureClass;
                ILine         nLine         = new LineClass();//镜像轴线
                nLine.PutCoords(m_pPoint1, m_pPoint2);
                ITransformation         nTransformation         = new AffineTransformation2DClass();
                IAffineTransformation2D nAffineTransformation2D = nTransformation as IAffineTransformation2D;
                nAffineTransformation2D.DefineReflection(nLine);

                //启动编辑
                IWorkspaceEdit pWorkspaceEdit = DataEditCommon.g_CurWorkspaceEdit; // GetWorkspaceEdit();

                ITransform2D nTransform2D = m_pFeature.Shape as ITransform2D;      //镜像目标

                nTransform2D.Transform(esriTransformDirection.esriTransformForward, nTransformation);

                if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry0Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature pNewFeature = pFeatureClass.CreateFeature();
                    IPoint   pNewPoint   = nTransform2D as IPoint;
                    pNewFeature.Shape = pNewPoint;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry1Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature  pNewFeature  = pFeatureClass.CreateFeature();
                    IPolyline pNewPolyline = nTransform2D as IPolyline;//镜像所得
                    pNewFeature.Shape = pNewPolyline;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry2Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature pNewFeature = pFeatureClass.CreateFeature();
                    IPolygon pNewPolygon = nTransform2D as IPolygon;//镜像所得
                    pNewFeature.Shape = pNewPolygon;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else
                {
                }
                pLineFeed = (INewLineFeedback)m_pFeedback;
                pLineFeed.AddPoint(m_pPoint2);

                pLineFeed.Stop();//拖拽停止
                m_pFeature = null;
                m_pPoint1  = null;
                m_pPoint2  = null;
            }

            m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
コード例 #10
0
        public override void OnMouseDown(int Button, int Shift, int X, int Y)
        {
            if (Button == 2)
                return;
            INewLineFeedback pLineFeed;

            if (m_pPoint1 == null)
            {
                m_pPoint1 = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
                m_pPoint1 = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint1);
                m_pFeedback = new NewLineFeedbackClass();
                pLineFeed = (INewLineFeedback)m_pFeedback;
                pLineFeed.Start(m_pPoint1);
                if (m_pFeedback != null)
                    m_pFeedback.Display = m_hookHelper.ActiveView.ScreenDisplay;

            }
            else if (m_pPoint2 == null)
            {
                ///20140216 lyf
                ICursor pCursor = null;
                m_selectionSet.Search(null, false, out pCursor);
                IFeatureCursor pFeatureCursor = pCursor as IFeatureCursor;
                IFeature m_pFeature = pFeatureCursor.NextFeature();

                if (pCursor != null)
                {
                    pCursor = null;
                    ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(pCursor);
                }

                if (m_pFeature == null)
                {
                    MessageBox.Show(@"��ѡҪ��Ϊ�գ�������ѡ��Ҫ�ء�", "��ʾ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                    return;
                }

                m_pPoint2 = m_hookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);
                m_pPoint2 = GIS.GraphicEdit.SnapSetting.getSnapPoint(m_pPoint2);
                //�ߺ�Ҫ�ض���ȫ�ˣ���ʼ����
                //IFeatureLayer pFeatureLayer = m_pCurrentLayer as IFeatureLayer;
                IFeatureClass pFeatureClass = m_featureLayer.FeatureClass;
                ILine nLine = new LineClass();//��������
                nLine.PutCoords(m_pPoint1, m_pPoint2);
                ITransformation nTransformation = new AffineTransformation2DClass();
                IAffineTransformation2D nAffineTransformation2D = nTransformation as IAffineTransformation2D;
                nAffineTransformation2D.DefineReflection(nLine);

                //����༭
                IWorkspaceEdit pWorkspaceEdit = DataEditCommon.g_CurWorkspaceEdit;// GetWorkspaceEdit();

                ITransform2D nTransform2D = m_pFeature.Shape as ITransform2D;//����Ŀ��

                nTransform2D.Transform(esriTransformDirection.esriTransformForward, nTransformation);

                if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry0Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature pNewFeature = pFeatureClass.CreateFeature();
                    IPoint pNewPoint = nTransform2D as IPoint;
                    pNewFeature.Shape = pNewPoint;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry1Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature pNewFeature = pFeatureClass.CreateFeature();
                    IPolyline pNewPolyline = nTransform2D as IPolyline;//��������
                    pNewFeature.Shape = pNewPolyline;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else if (m_pFeature.Shape.Dimension == esriGeometryDimension.esriGeometry2Dimension)
                {
                    pWorkspaceEdit.StartEditOperation();
                    IFeature pNewFeature = pFeatureClass.CreateFeature();
                    IPolygon pNewPolygon = nTransform2D as IPolygon;//��������
                    pNewFeature.Shape = pNewPolygon;
                    pNewFeature.Store();
                    pWorkspaceEdit.StopEditOperation();
                    DataEditCommon.g_pMyMapCtrl.Map.ClearSelection();
                    DataEditCommon.g_pMyMapCtrl.Map.SelectFeature(m_pCurrentLayer, pNewFeature);
                }
                else
                { }
                pLineFeed = (INewLineFeedback)m_pFeedback;
                pLineFeed.AddPoint(m_pPoint2);

                pLineFeed.Stop();//��קֹͣ
                m_pFeature = null;
                m_pPoint1 = null;
                m_pPoint2 = null;
            }

            m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, null, null);
            m_hookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);
        }
コード例 #11
0
        private bool ComputeShapeDistortionParameters(IPoint[] FabricPoints, IPoint[] AdjustedTraversePoints, out double RotationInRadians,
      out double Scale, out double ShpStdErrX, out double ShpStdErrY)
        {
            Scale = 1;
              RotationInRadians = 0;
              ShpStdErrX = 0;
              ShpStdErrY = 0;
              IAffineTransformation2D3GEN affineTransformation2D = new AffineTransformation2DClass();
              try { affineTransformation2D.DefineConformalFromControlPoints(ref FabricPoints, ref AdjustedTraversePoints); }
              catch { return false; }

              RotationInRadians = affineTransformation2D.Rotation;
              Scale = affineTransformation2D.XScale;
              Scale = affineTransformation2D.YScale;
              Scale = 1 / Scale; //the inverse of this computed scale is stored

              int iLen = FabricPoints.GetLength(0) * 2;
              double[] inPoints = new double[iLen];
              double[] outPoints = new double[iLen];
              double[] adjTrav = new double[iLen];

              int x = 0;
              int y = 0;
              for (int j = 0; j < FabricPoints.GetLength(0); j++)
              {
            x = j * 2;
            y = x + 1;
            inPoints[x] = FabricPoints[j].X;//x
            inPoints[y] = FabricPoints[j].Y;//y

            adjTrav[x] = AdjustedTraversePoints[j].X;//x
            adjTrav[y] = AdjustedTraversePoints[j].Y;//y
              }

              affineTransformation2D.TransformPointsFF(esriTransformDirection.esriTransformForward, ref inPoints, ref outPoints);

              //now build a list of the diffs for x and y between transformed and the AdjustedTraverse Results

              int iLen2 = FabricPoints.GetLength(0);
              double[] errX = new double[iLen2];
              double[] errY = new double[iLen2];
              x = 0;
              y = 0;
              double dSUMX = 0;
              double dSUMY = 0;

              for (int j = 0; j < iLen2; j++)
              {
            x = j * 2;
            y = x + 1;
            errX[j] = adjTrav[x] - outPoints[x] + 100000;//x
            errY[j] = adjTrav[y] - outPoints[y] + 100000;//y
            dSUMX += errX[j];
            dSUMY += errY[j];
              }
              double dMean = 0; double dStdDevX = 0; double dStdDevY = 0; double dRange; int iOutliers = 0;
              GetStatistics(errX, dSUMX, 1, out dMean, out dStdDevX, out dRange, out iOutliers);
              GetStatistics(errY, dSUMY, 1, out dMean, out dStdDevY, out dRange, out iOutliers);
              ShpStdErrX = dStdDevX;
              ShpStdErrY = dStdDevY;

              return true;
        }
コード例 #12
0
        /// <summary>
        /// Parse the RPC parameters file associated with the image and create an RPCXform
        /// to bea applied to the inputDataset as a geomtric function.
        /// </summary>
        /// <param name="rpcPath">Path to the rpc parameters file.</param>
        /// <param name="inputDataset">Input dataset to apply the xform on.</param>
        /// <returns>Function raster dataset created.</returns>
        private IFunctionRasterDataset ApplyRPC(string rpcPath, IRasterDataset inputDataset)
        {
            IFunctionRasterDataset opFrd = null;
            try
            {
                // Open the RPC file and create Geometric transform
                IGeodataXform finalXForm = null;
                IRPCXform rpcXForm = GetRPCXForm(rpcPath);

                IFunctionRasterDataset idFrd = null;
                if (!(inputDataset is IFunctionRasterDataset))
                {
                    IRasterFunction identityFunction = new IdentityFunctionClass();
                    idFrd = new FunctionRasterDatasetClass();
                    idFrd.Init(identityFunction, inputDataset);
                }
                else
                    idFrd = (IFunctionRasterDataset)inputDataset;

                IRasterInfo datasetRasterInfo = idFrd.RasterInfo;
                IEnvelope datasetExtent = datasetRasterInfo.Extent;
                ISpatialReference datasetSrs = ((IGeoDataset)idFrd).SpatialReference;

                long dRows = datasetRasterInfo.Height;
                long dCols = datasetRasterInfo.Width;
                IEnvelope pixelExtent = new EnvelopeClass();
                pixelExtent.PutCoords(-0.5, 0.5 - dRows, -0.5 + dCols, 0.5);

                bool noAffineNeeded = ((IClone)pixelExtent).IsEqual((IClone)datasetExtent);
                if (!noAffineNeeded)
                {
                    // Tranform ground space to pixel space.
                    IAffineTransformation2D affineXform = new AffineTransformation2DClass();
                    affineXform.DefineFromEnvelopes(datasetExtent, pixelExtent);
                    IGeometricXform geoXform = new GeometricXformClass();
                    geoXform.Transformation = affineXform;
                    finalXForm = geoXform;
                }

                // Transform from pixel space back to ground space to set as the forward transform.
                IEnvelope groundExtent = ((IGeoDataset)idFrd).Extent;
                groundExtent.Project(datasetSrs);
                IAffineTransformation2D affineXform2 = new AffineTransformation2DClass();
                affineXform2.DefineFromEnvelopes(pixelExtent, groundExtent);
                IGeometricXform forwardXForm = new GeometricXformClass();
                forwardXForm.Transformation = affineXform2;
                rpcXForm.ForwardXform = forwardXForm;

                // Create the composite transform that changes ground values to pixel space
                // then applies the rpc transform which will transform them back to ground space.
                ICompositeXform compositeXForm = new CompositeXformClass();
                compositeXForm.Add(finalXForm);
                compositeXForm.Add(rpcXForm);
                finalXForm = (IGeodataXform)compositeXForm;

                // Then apply the transform on the raster using the geometric function.
                if (finalXForm != null)
                {
                    IRasterFunction geometricFunction = new GeometricFunctionClass();
                    IGeometricFunctionArguments geometricFunctionArgs = null;
                    // Get the geomtric function arguments if supplied by the user (in the UI).
                    if (myRasterTypeOperation != null &&
                        ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters != null)
                        geometricFunctionArgs =
                        ((IRasterTypeProperties)myRasterTypeOperation).OrthorectificationParameters;
                    else
                        geometricFunctionArgs = new GeometricFunctionArgumentsClass();
                    // Append the xform to the existing ones from the image.
                    geometricFunctionArgs.AppendGeodataXform = true;
                    geometricFunctionArgs.GeodataXform = finalXForm;
                    geometricFunctionArgs.Raster = inputDataset;
                    opFrd = new FunctionRasterDatasetClass();
                    opFrd.Init(geometricFunction, geometricFunctionArgs);
                }
                return opFrd;
            }
            catch (Exception exc)
            {
                string error = exc.Message;
                return opFrd;
            }
        }
コード例 #13
0
ファイル: ProjectClass.cs プロジェクト: lzhm216/coordtrans
        public void transform2D()
        {
            IAffineTransformation2D3GEN affineTransformation2D = new AffineTransformation2DClass();

            affineTransformation2D.DefineFromControlPoints(ref fromPoints, ref toPoints);

            //单点转换
            //double[] inPoints = new double[3];
            //double[] outPoints = new double[3];

            //inPoints[0] = 501557.117;
            //inPoints[1] = 4041000.863;
            //inPoints[2] = 1651.875;

            //affineTransformation2D.TransformPointsFF(esriTransformDirection.esriTransformForward, ref inPoints, ref outPoints);

            IWorkspaceFactory shapefileworkspaceF = new ShapefileWorkspaceFactoryClass();

            IWorkspace workspace = shapefileworkspaceF.OpenFromFile(workspaceName, 0);

            IFeatureWorkspace featureWorkspace = workspace as IFeatureWorkspace;

            IFeatureClass pFeatureClass = featureWorkspace.OpenFeatureClass(shapefileName) as IFeatureClass;

            IFeatureClass pFeatureClass1 = featureWorkspace.CreateFeatureClass("test", pFeatureClass.Fields, null, null, esriFeatureType.esriFTSimple, "Shape", "");

            for (int i = 0; i < pFeatureClass.FeatureCount(null); i++)
            {
                IFeature pFeature = (IFeature)pFeatureClass.GetFeature(i);
                IFeature pFeature1 = pFeatureClass1.CreateFeature();
                pFeature1.Shape = pFeature.ShapeCopy;

                IGeometry pGeometry = (IGeometry)pFeature1.Shape;

                ITransform2D transform2D = pGeometry as ITransform2D;
                transform2D.Transform(esriTransformDirection.esriTransformForward, affineTransformation2D as ITransformation);

                pFeature1.Store();
            }
        }