AO实现通过控制点校正矢量数据

本文详细介绍了如何通过AO调用ITransformationMethodGEN接口实现矢量数据的控制点校正过程,包括创建控制点、定义转换方法、加载特征层、搜索特征、数据转换及刷新视图等关键步骤。

实现通过AO调用ITransformationMethodGEN接口完成矢量数据的控制点校正过程。

代码如下:

private void button1_Click(object sender, EventArgs e)
        {
           List<IPoint> fromPoints = new List<IPoint>();
           fromPoints.Add(CreatePoint(42430970.709720, 4850893.615587));
           fromPoints.Add(CreatePoint(42431498.100028, 4850849.282629));
           fromPoints.Add(CreatePoint(42431354.325240, 4851767.808883));
           fromPoints.Add(CreatePoint(42431733.654275, 4850625.697095));
           fromPoints.Add(CreatePoint(42432361.835894, 4850728.827894));
            IPoint[]fromPointsArray = fromPoints.ToArray();

           List<IPoint> toPoints = new List<IPoint>();
           toPoints.Add(CreatePoint(-15873.806091, -8103.440430));
           toPoints.Add(CreatePoint(-15346.064880, -8143.366577));
           toPoints.Add(CreatePoint(-15497.498108, -7226.063110));
           toPoints.Add(CreatePoint(-15108.653687, -8364.979126));
           toPoints.Add(CreatePoint(-14481.355103, -8256.602905));
            IPoint[]toPointsArray = toPoints.ToArray();

 

           //Define control points.
           ITransformationMethodGEN transformMethod = null;

            try
            {
               transformMethod = new AffineTransformationMethodClass();

            }
            catch(Exception ex)
            {
               MessageBox.Show(ex.Message, “
错误!
”);
            }

            try
            {
               transformMethod.DefineFromControlPoints(ref fromPointsArray, ref toPointsArray,
                   null, axMapControl1.ActiveView.FullExtent);
            }

            catch(Exception ex)
            {
               System.Windows.Forms.MessageBox.Show(“Define Control Points failed.”);
               return;
            }

           //Create a feature cursor based on the predefined query.
           IFeatureLayer featureLayer = axMapControl1.Map.get_Layer(0) as IFeatureLayer;
            if(featureLayer == null)
            {
               System.Windows.Forms.MessageBox.Show(
                   “Please load a feature layer as the first layer in TOC.”);
               return;
            }

           IFeatureClass featureClass = featureLayer.FeatureClass;
           //IQueryFilter queryFilter = new QueryFilterClass();
           //queryFilter.WhereClause = “”;
           IFeatureCursor featureCursor = featureClass.Search(null, false);

           IFeatureDataset pFeatureDataset = featureClass.FeatureDataset;
            IDatasetpDataset = pFeatureDataset as IDataset;
            //Transform.features.
           //IWorkspaceFactory pwsf=new FileGDBWorkspaceFactory();
            IWorkspacepws = null;//pwsf.OpenFromFile(@”C:UsersyaoDocumentsArcGISDefault.gdb”, 0);
            pws =pDataset.Workspace;
           IWorkspaceEdit workspaceEdit = pws as IWorkspaceEdit;
           workspaceEdit.StartEditOperation();
           workspaceEdit.StartEditing(true);
           transformMethod.Transform(featureCursor, null);
           workspaceEdit.StopEditing(true);
           workspaceEdit.StopEditOperation();
           axMapControl1.ActiveView.Refresh();
           MessageBox.Show(“
完成!
”);
        }
        private IPoint CreatePoint(doublexVal, double yVal)
        {
            //Thisfunction creates a point.
            IPoint point= new PointClass();
            point.X =xVal;
            point.Y =yVal;
            returnpoint;
        }

使用过程需要注意被校正数据的范围(extent),AO的调用方式等问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值