Arcgis的座标转换

首先理解一下基准面

基准面是在特定区域内与地球表面极为吻合的椭球体。椭球体表面上的点与地球表面上的特定位置相匹配,也就是对椭球体进行定位,该点也被称作基准面的原点,原点是固定的,所有其他点由其计算获得。基准面的座标系原点往往距地心有一定偏移(有的也在地心,如WGS1984),如西安80的基准面和北京54的基准面,因为原点不同,所以不同的基准面上,同一个点的座标是不相同的。

利用ArcEngine创建一个座标系或者基准面的是SpatialReferenceClass类,

该类实现了ISpatialReferenceFactory接口,该接口定义了创建座标系,基准面等方法和属性;在利用 ISpatialReferenceFactory创建座标系的时候往往需要一个int类型的参数,这个int其实就是这些座标系的代号,如我们熟悉的4326就是WGS1984.

同一基准面的座标转换

对于同一基准面,我们可以肯定一点就是同一位置经纬度座标是一样的,而不同的就是计算成平面座标的时候可能有所不同,因为算法不一样,在这里我只是将经纬度座标转成平面的座标。

private IPoint GetProjectPoint(IPoint pPoint, boolpBool)

     {

    ISpatialReferenceFactory   pSpatialReferenceEnvironment      =  new SpatialReferenceEnvironment();

   ISpatialReference  pFormSpatialReference  = pSpatialReferenceEnvironment.Creat eGeographicCoordinateSystem((int)esriGeoCS3Type.esriSRGeo_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;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章