切换要素类空间坐标系的集中方式
1.使用arcgis自带的工具箱也就是GP工具去切换要素类的空间坐标系
评价:稳定,方便,但是对于正在使用IFeatureClass对象不友好
2.使用AE带的常用类去切换要素类的空间坐标系
评价:需要多写代码去做功能,但是对于IFeatureClass的修改及时不用重新获取对象
实现第2种方式:
第一步:修改要素类的空间坐标系
/// <summary>
/// 修改要素类的空间坐标系
/// </summary>
/// <param name="fc"></param>
/// <param name="spatialRef10">新坐标系</param>
/// <returns></returns>
public static bool AlterSpatialRef(IFeatureClass fc, ISpatialReference newSpatialRef)
{
IGeoDataset pGeoDataset = fc as IGeoDataset;
IGeoDatasetSchemaEdit pGeoDatasetSchemaEdit = pGeoDataset as IGeoDatasetSchemaEdit;
if (pGeoDatasetSchemaEdit.CanAlterSpatialReference == true)
{
pGeoDatasetSchemaEdit.AlterSpatialReference(newSpatialRef);
return false;
}
return true;
}
第二步:对要素类的矢量图形进行坐标转换,必须要有第二步,不然图形位置不对
/// <summary>
/// 矢量数据坐标转换
/// </summary>
/// <param name="featureClass"></param>
/// <param name="oldSpatil">featureClass转换之前的坐标系</param>
/// <param name="newSpatil">featureClass当前的坐标系</param>
private void featureClassTransSpatialRef(IFeatureClass featureClass, ISpatialReference oldSpatil, ISpatialReference newSpatil)
{
IFeatureCursor cursor = featureClass.Search(null, false);
IFeature feature = null;
while ((feature = cursor.NextFeature()) != null)
{
IGeometry2 pGeometry = null;
pGeometry = feature.Shape as IGeometry2;
pGeometry.SpatialReference = oldSpatil;
pGeometry.Project(newSpatil);
feature.Shape = pGeometry;
//feature.Store();
feature.Store();
}
cursor.Flush();
if (feature != null)
{ ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(feature); }
if (cursor != null)
{ ESRI.ArcGIS.ADF.ComReleaser.ReleaseCOMObject(cursor); }
}