北京54转西安80坐标系

 

注意:这段代码只能参考,每个具体的项目中,转换参数、偏移量、标准是不同的。

 

有兴趣的同仁可以拿去研究、批评

 

 

private bool ConvertXY54C80()
        {
            string filePath = this.textEdit1.Text;

            if (filePath.Length > 0)
            {
                //获得打开IFeatureClass的字符串数组
                string WorkSpacePath = System.IO.Path.GetDirectoryName(filePath);
                string ShapeFileName = System.IO.Path.GetFileName(filePath);
                IWorkspaceFactory pWorkspaceFactory = new ShapefileWorkspaceFactoryClass();
                IWorkspace pWorkspace = pWorkspaceFactory.OpenFromFile(WorkSpacePath, 0);
                IFeatureWorkspace pFeatureWorkspace = pWorkspace as IFeatureWorkspace;
                IFeatureClass pFeatureClass = pFeatureWorkspace.OpenFeatureClass(ShapeFileName);

                //得到fields
                pFields = pFeatureClass.Fields;

                IFeature pFeature;
                IFeatureCursor pFeatureCursor;
               
                pFeatureCursor = pFeatureClass.Search(null, false);
                pFeature = pFeatureCursor.NextFeature();

                string fType = pFeature.Shape.GeometryType.ToString();
               
                IFeatureClass pOutFeatureClass = null;
                //
                //得到创建的新图层

                if (fType == "esriGeometryPoint")
                {
                    pOutFeatureClass = this.createShape("point");
                }
                else if (fType == "esriGeometryPolyline")
                {
                    pOutFeatureClass = this.createShape("polyline");
                }
                else if (fType == "esriGeometryPolygon")
                {
                    pOutFeatureClass = this.createShape("polygon");
                }
                //设置一下,用来把要素添加到新创建的图层中
                IFeatureCursor pOutFeatureCursor = pOutFeatureClass.Insert(true);
                IFeatureBuffer pOutFeatureBuffer = pOutFeatureClass.CreateFeatureBuffer();

                //设置输出工作空间
                IWorkspaceEdit pOutWorkspaceEdit = null;
                IDataset pDataset = (IDataset)pOutFeatureClass;
                if (pDataset != null)
                {
                    pOutWorkspaceEdit = (IWorkspaceEdit)pDataset.Workspace;
                }
                //

                this.progressBar1.Value = 0;
                this.progressBar1.Minimum = 0;
                this.progressBar1.Maximum = pFeatureClass.FeatureCount(null);
                while (pFeature != null)
                {
                    this.progressBar1.Value++;
                    //分为点、线、面三种情况,取得feature的XY坐标
                    if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPoint)
                    {
                        //可以直接取点的坐标
                        IPoint pPoint_1 = (IPoint)pFeature.Shape;
                        double x_1 = pPoint_1.X;
                        double y_1 = pPoint_1.Y;

                        //得到地理坐标,用来计算当前点所属地图符号
                        IPoint pProPoint_1 = this.getGeoPoint(x_1, y_1);
                        x_1 = pProPoint_1.X;
                        y_1 = pProPoint_1.Y;
                        string mapNum_1 = this.getMapNum(x_1, y_1);

                        //根据mapNum到SDE库中查找对应的参数
                        IPoint newPoint_1 = this.getNewPoint(pPoint_1, mapNum_1);

                        //判断newPoint_1的坐标是否在城区,若在,查到地块号,得到公式中的参数值,再计算到新的坐标点


                        //把生成的点要素存入shape文件
                        try
                        {
                            pOutWorkspaceEdit.StartEditing(true);
                            pOutWorkspaceEdit.StartEditOperation();
                            IGeometry pOutGeometry_point = (IGeometry)newPoint_1;
                            IFeature pOutFeature_point = pOutFeatureClass.CreateFeature();
                            pOutFeature_point.Shape = pOutGeometry_point;
                            pOutFeature_point.Store();
                            pOutWorkspaceEdit.StopEditOperation();
                            pOutWorkspaceEdit.StopEditing(true);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("出现异常信息1:" + ex.Message);
                            return false;
                        }
                    }
                    else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolyline)
                    {
                        IPolyline pLine = (IPolyline)pFeature.Shape;
                        //创建一个新的feature,用来存放转换后的集合
                        IPointCollection pOutPointCollection_line = new PolylineClass();
                        //把该feature强制转换为一个点的集合,再取点的坐标
                        IPointCollection pPointCollection = pLine as IPointCollection;
                        for (int i = 0; i < pPointCollection.PointCount; i++)
                        {                          
                            IPoint pPoint_2 = pPointCollection.get_Point(i);
                            double x_2 = pPoint_2.X;
                            double y_2 = pPoint_2.Y;

                            //得到地理坐标,用来计算当前点所属地图符号
                            IPoint pProPoint_2 = this.getGeoPoint(x_2, y_2);
                            x_2 = pProPoint_2.X;
                            y_2 = pProPoint_2.Y;
                            string mapNum_2 = this.getMapNum(x_2, y_2);

                            //根据mapNum到SDE库中查找对应的参数
                            IPoint newPoint_2 = this.getNewPoint(pPoint_2, mapNum_2);
                            object a_2 = Missing.Value;
                            object b_2 = Missing.Value;
                            pOutPointCollection_line.AddPoint(newPoint_2, ref a_2, ref b_2);
                        }

                        //把生成的线要素存入shape文件
                        try
                        {
                            pOutWorkspaceEdit.StartEditing(true);
                            pOutWorkspaceEdit.StartEditOperation();
                            IGeometry pOutGeometry_line = (IGeometry)pOutPointCollection_line;
                            IFeature pOutFeature_line = pOutFeatureClass.CreateFeature();
                            pOutFeature_line.Shape = pOutGeometry_line;
                            pOutFeature_line.Store();
                            pOutWorkspaceEdit.StopEditOperation();
                            pOutWorkspaceEdit.StopEditing(true);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("出现异常信息2:" + ex.Message);
                            return false;
                        }
                    }
                    else if (pFeature.Shape.GeometryType == esriGeometryType.esriGeometryPolygon)
                    {
                        IPolygon pPolygon = (IPolygon)pFeature.Shape;
                        //创建一个新的feature,用来存放转换后的点集合
                        IPointCollection pOutPointCollection = new PolygonClass();
                        //把该feature强制转换为一个点的集合,再取点的坐标
                        IPointCollection pPointCollection = pPolygon as IPointCollection;
                        for (int i = 0; i < pPointCollection.PointCount; i++)
                        {
                            IPoint pPoint_3 = pPointCollection.get_Point(i);
                            double x_3 = pPoint_3.X;
                            double y_3 = pPoint_3.Y;

                            //得到地理坐标,用来计算当前点所属地图符号
                            IPoint pProPoint_3 = this.getGeoPoint(x_3, y_3);
                            x_3 = pProPoint_3.X;
                            y_3 = pProPoint_3.Y;
                            string mapNum_3 = this.getMapNum(x_3, y_3);

                            //根据mapNum到SDE库中查找对应的参数
                            IPoint newPoint_3 = this.getNewPoint(pPoint_3, mapNum_3);
                            object a_3 = Missing.Value;
                            object b_3 = Missing.Value;
                            pOutPointCollection.AddPoint(newPoint_3, ref a_3, ref b_3);
                        }

                        //把生成的面要素存入shape文件
                        try
                        {
                            pOutWorkspaceEdit.StartEditing(true);
                            pOutWorkspaceEdit.StartEditOperation();
                            IGeometry pOutGeometry = (IGeometry)pOutPointCollection;
                            IFeature pOutFeature = pOutFeatureClass.CreateFeature();
                            pOutFeature.Shape = pOutGeometry;
                            pOutFeature.Store();                           
                            pOutWorkspaceEdit.StopEditOperation();
                            pOutWorkspaceEdit.StopEditing(true);
                        }
                        catch (Exception ex)
                        {
                            MessageBox.Show("出现异常信息3:" + ex.Message);
                            return false;
                        }
                    }
                    pFeature = pFeatureCursor.NextFeature();
                }
            }
            return true;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值