public void IFeatureWorkspace_OpenFeatureClass_Example(string dataPath, string nameOfShapefile)
        {
            IWorkspaceFactory workspaceFactory = new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass();
            IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspaceFactory.OpenFromFile(dataPath, 0);
            IFeatureClass inputFeatureClass = featureWorkspace.OpenFeatureClass(nameOfShapefile);
            Console.WriteLine("There are {0} features in the {1} feature class", inputFeatureClass.FeatureCount(new QueryFilterClass()), inputFeatureClass.AliasName);
            // Получить курсор для обновления
            IFeatureCursor updateCursor = inputFeatureClass.Update(null, false);
            // Получить первый объект
            IFeature updateFeature = updateCursor.NextFeature();
            
            // Перебрать все объекты
            while (updateFeature != null)
            {
                // Проверить, является ли тип полигоном
                if (updateFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
                {
                    // Получить "геометрию"
                    IGeometry geometry = updateFeature.Shape;
                    
                    // Получить полигон
                    IPolygon polygon = updateFeature.Shape as IPolygon;
                    // Получить коллекцию точек полигона
                    IPointCollection4 pointCollection = polygon as IPointCollection4;
                    //pointCollection.get_Point(1).PutCoords(50,59);
                    ESRI.ArcGIS.Geometry.IAffineTransformation2D affineTransformation2D = new ESRI.ArcGIS.Geometry.AffineTransformation2DClass();
                    affineTransformation2D.Move(200000000000, 30000000000);
                    ESRI.ArcGIS.Geometry.ITransform2D transform2D = polygon as ESRI.ArcGIS.Geometry.ITransform2D;
                    transform2D.Transform(ESRI.ArcGIS.Geometry.esriTransformDirection.esriTransformForward, affineTransformation2D);
                    // Массив для хранения точек
                    ArrayList points = new ArrayList();
                    // Флаг для определения: вычислять ли "серединную" точку
                    bool averagePoint = false;
                    // Перебрать все точки в полигоне
                    int i = 0;
                    while (i < pointCollection.PointCount)
                    {
                        if (averagePoint == false)
                        {
                            // Не вычислять "серединную" точку
                            // Добавить точку в массив точек
                            points.Add(pointCollection.get_Point(i));
                            // Установить флаг на true
                            averagePoint = true;
                        }
                        else
                        {
                            // Вычислить "серединную" точку
                            // Получить начальную точку