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

0
分享 2014-02-09
实现通过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的调用方式等问题
文章来源:http://blog.csdn.net/sydbc/article/details/17436221

0 个评论

要回复文章请先登录注册