• 空间参考(三)ArcGIS Engine的支持


    空间参考(三)-ArcGIS Engine的支持

    上一篇 / 下一篇  2011-08-30 22:24:59 / 个人分类:ArcGIS Engine之路

    ArcGIS Engine提供了一系列对象供开发者管理GIS系统的坐标系统。对大部分开发者而言了解ProjectedCoordinateSystem, GeographicCoordinateSystem, SpatialReference Environment这三个组件类是非常有必要的,对于高级开发者而言,可能需要自定义坐标系统可以使用这些对象Projection,Datum,AngularUnit,Spheriod,PrimeMeridian和GeoTransformation等。

     

     同一坐标系转换

     private IPoint GetpProjectPoint(IPoint pPoint, bool pBool)

            {

                SpatialReferenceEnvironment pSpatialReferenceEnvironemnt = new SpatialReferenceEnvironment();

                ISpatialReference pFromSpatialReference = pSpatialReferenceEnvironemnt.CreateGeographicCoordinateSystem((int)esriSRGeoCS3Type.esriSRGeoCS_Xian1980);//西安80

                ISpatialReference pToSpatialReference = pSpatialReferenceEnvironemnt.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_Zone_34);//西安80

                if (pBool == true)//球面转平面

                {

                   

                    IGeometry pGeo = (IGeometry)pPoint;

                    pGeo.SpatialReference = pFromSpatialReference;

                    pGeo.Project(pToSpatialReference);

                    return pPoint;

                }

                else //平面转球面

                {

                    IGeometry pGeo = (IGeometry)pPoint;

                    pGeo.SpatialReference = pToSpatialReference;

                    pGeo.Project(pFromSpatialReference);

                    return pPoint;

                }

            }

    不同基准面转换(需要转换参数)

    public void ProjectExExample()

            {

               

                ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();

              

              // ISpatialReference pFromCustom = pSpatialReferenceFactory.CreateESRISpatialReferenceFromPRJFile(@"E:\arcgis\Engine\zidingyi.prj");

                IPoint pFromPoint = new PointClass();

                pFromPoint.X = 518950.788;

                pFromPoint.Y = 4335923.97;

                IZAware pZAware = pFromPoint as IZAware;

                pZAware.ZAware = true;

            

                pFromPoint.Z = 958.4791;

               // ((IGeometry)pFromPoint).SpatialReference = pFromCustom;

                //自定义投影WGS84下的北京6度19带。

                ((IGeometry)pFromPoint).SpatialReference = CreateCustomProjectedCoordinateSystem();

                //目标投影

                IProjectedCoordinateSystem projectedCoordinateSystem = pSpatialReferenceFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_Xian1980_GK_Zone_19);

                //因为目标基准面和原始基准面不在同一个上,所以牵扯到参数转换,我用7参数转换

                ICoordinateFrameTransformation pCoordinateFrameTransformation = new CoordinateFrameTransformationClass();

                pCoordinateFrameTransformation.PutParameters(7个参数略);

                pCoordinateFrameTransformation.PutSpatialReferences(CreateCustomProjectedCoordinateSystem(), projectedCoordinateSystem as ISpatialReference);

            

             

                //投影转换

                IGeometry2 pGeometry = pFromPoint as IGeometry2;

                pGeometry.ProjectEx(projectedCoordinateSystem as ISpatialReference, esriTransformDirection.esriTransformForward, pCoordinateFrameTransformation, false, 0, 0);

          

            }

    private IProjectedCoordinateSystem CreateCustomProjectedCoordinateSystem()

            {

                ISpatialReferenceFactory2 pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();

                IProjectionGEN pProjection = pSpatialReferenceFactory.CreateProjection((int) esriSRProjectionType.esriSRProjection_GaussKruger) as IProjectionGEN;

                IGeographicCoordinateSystem pGeographicCoordinateSystem = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);

                ILinearUnit pUnit = pSpatialReferenceFactory.CreateUnit((int)esriSRUnitType.esriSRUnit_Meter) as ILinearUnit;

              

                IParameter[] pParameters = pProjection.GetDefaultParameters();

               

                IProjectedCoordinateSystemEdit pProjectedCoordinateSystemEdit = new ProjectedCoordinateSystemClass();

                object pName = "WGS-BeiJing1954";

                object pAlias = "WGS-BeiJing1954";

                object pAbbreviation = "WGS-BeiJing1954";

                object pRemarks = "WGS-BeiJing1954";

                object pUsage = "Calculate Meter From lat and lon";

                object pGeographicCoordinateSystemObject = pGeographicCoordinateSystem as object;

                object pUnitObject = pUnit as object;

                object pProjectionObject = pProjection as object;

                object pParametersObject = pParameters as object;

                pProjectedCoordinateSystemEdit.Define(ref pName, ref pAlias, ref pAbbreviation, ref pRemarks, ref pUsage, ref pGeographicCoordinateSystemObject, ref pUnitObject,ref pProjectionObject, ref pParametersObject);

                IProjectedCoordinateSystem5 pProjectedCoordinateSystem = pProjectedCoordinateSystemEdit as IProjectedCoordinateSystem5;

                pProjectedCoordinateSystem.FalseEasting = 500000;

                pProjectedCoordinateSystem.LatitudeOfOrigin = 0;

                pProjectedCoordinateSystem.set_CentralMeridian(true,111);

                pProjectedCoordinateSystem.ScaleFactor=1;

                pProjectedCoordinateSystem.FalseNorthing=0;

                return pProjectedCoordinateSystem;

            }

  • 相关阅读:
    从头认识java-5.2 包(package)
    从头认识java-5.1 为什么需要访问权限?
    从头认识java-4.9 枚举类型
    从头认识java-4.8 数组的初始化(2)-可变参数列表
    从头认识java-4.8 数组的初始化(1)
    从头认识java-4.7 构造器初始化(3)
    从头认识java-4.7 构造器初始化(2)
    全局对象:数字对象
    JavaScript的数据类型
    全局对象:String对象
  • 原文地址:https://www.cnblogs.com/xianyin05/p/3038078.html
Copyright © 2020-2023  润新知