ArcGIS 地理座標與投影座標轉換 [轉]

來源:互聯網
上載者:User

標籤:

轉載地址:http://blog.163.com/lai_xiao_hui/blog/static/123037324201151443221942/

 

代碼是將WGS84地理座標轉換為WGS84UTM投影座標,如果要轉換為西安80或北京54座標,則參數是:

北京54座標:

             地理座標枚舉值為:esriSRGeoCSType.esriSRGeoCS_Beijing1954

             投影座標枚舉值為:esriSRProjCSType.esriSRProjCS_Beijing1954GK_13……

西安80座標:

            地理座標枚舉值為:esriSRGeoCS3Type.esriSRGeoCS_Xian1980

            投影座標枚舉值為:esriSRProjCS4Type.esriSRProjCS_Xian1980_3_Degree_GK_CM_102E……

public class WGS84UTM
    {
        /// <summary>
        /// 從地理座標轉換到投影座標
        /// </summary>
        /// <param name="longitude">經度</param>
        /// <param name="latitude">緯度,南半球為負數</param>
        /// <param name="x">X</param>
        /// <param name="y">Y</param>
        /// <param name="zone">帶區(1-60,從-180到+180,6度帶)</param>
        public static void GeoToPrj(double longitude, double latitude, out double x, out double y, out int zone)
        {
            ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            IGeographicCoordinateSystem pGeoCoordSys = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            int startprjnum = 32601;
            if (latitude < 0) startprjnum = 32701;
            zone = (int)Math.Round(((longitude + 3) / 6)) + 30;
            int prjnum = startprjnum + zone - 1;
            IProjectedCoordinateSystem pPrjCoordSys = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(prjnum);

            IPoint pt = new PointClass();
            pt.PutCoords(longitude, latitude);
            IGeometry geo = (IGeometry)pt;
            geo.SpatialReference = pGeoCoordSys;
            geo.Project(pPrjCoordSys);
            x = pt.X;
            y = pt.Y;
            if (latitude < 0)
                y = 0 - y;
        }
        /// <summary>
        /// 從投影座標轉換到地理座標
        /// </summary>
        /// <param name="x">X</param>
        /// <param name="y">Y,南半球為負數</param>
        /// <param name="zone">帶區(1-60,從-180到+180,6度帶)</param>
        /// <param name="longitude">經度</param>
        /// <param name="latitude">緯度</param>
        public static void PrjToGeo(double x, double y, int zone, out double longitude, out double latitude)
        {
            ISpatialReferenceFactory pSpatialReferenceFactory = new SpatialReferenceEnvironmentClass();
            IGeographicCoordinateSystem pGeoCoordSys = pSpatialReferenceFactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_WGS1984);
            int startprjnum = 32601;
            bool South = false;
            if(y < 0) 
            {
                South = true;
                y = 0 - y;
            }
            if (South) startprjnum = 32701;
            int prjnum = startprjnum + zone - 1;
            IProjectedCoordinateSystem pPrjCoordSys = pSpatialReferenceFactory.CreateProjectedCoordinateSystem(prjnum);

            IPoint pt = new PointClass();
            pt.PutCoords(x, y);
            IGeometry geo = pt as IGeometry;
            geo.SpatialReference = pPrjCoordSys;
            geo.Project(pGeoCoordSys);
            longitude = pt.X;
            latitude = pt.Y;
            if (South) latitude = 0 - latitude;

        }
    }

ArcGIS 地理座標與投影座標轉換 [轉]

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.