arcEngine 10 C++ 座標轉換【座標系的投影】

來源:互聯網
上載者:User

搜尋:arcengine C++ 座標轉換  ,百度 ,Google都沒有類似的文章。arcEngine 換成 arcgis engine 效果一樣。

好吧,這個重任就交給我吧。

有空了 研究好了 就寫。

現在開始發功了:

直接上代碼:

#include<ArcSDK.h>//.....    /*     *地理座標投影     *http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/esriSRProjCS3Type_Constants/002m0000003n000000/     * esriSRProjCS_WGS1984WebMercatorMajorAuxSphere , 3857 , WGS 1984 Web Mercator Major Auxilliary Sphere      *    */    IPoint* projToGeo(IPoint* point/*需要更改座標系的點*/,long fromProjType=3857 ,long toGeoType=4326)    {        long geoType = toGeoType;//4326;        IPoint* points = point;        ISpatialReference* spatialRf;        ISpatialReference* spatialRf1;        IGeographicCoordinateSystem* geograpicsys;        IProjectedCoordinateSystem*projCoordSystem;        ISpatialReferenceFactoryPtr originalSpecialReference;        ISpatialReferenceFactoryPtr newReferenceSystem;            HRESULT hr = originalSpecialReference.CreateInstance(CLSID_SpatialReferenceEnvironment);        HRESULT hr1 = originalSpecialReference->CreateProjectedCoordinateSystem(fromProjType,&projCoordSystem);        spatialRf = (ISpatialReference*)projCoordSystem;        HRESULT hr2 = points->putref_SpatialReference(spatialRf);        newReferenceSystem.CreateInstance(CLSID_SpatialReferenceEnvironment);        newReferenceSystem->CreateGeographicCoordinateSystem(geoType,&geograpicsys);        spatialRf1 = (ISpatialReference*)geograpicsys;        //points->putref_SpatialReference(spatialRf1);//這句不能要是設定原始 空間參考的。        points->Project(spatialRf1);        ////測試輸出而已////////////////////////        //double x,y;        //points->get_X(&x);        //points->get_Y(&y);        //printf("x=%lf,y=%lf\n",x,y);        ///////////////////////////////////////        return points;    };

在ArcEngine C++ 項目中,加上上面的函數,然後 調用就可以了。傳回值 只是為了 鏈式調用,輸入的點 已經被修改了。

測試代碼:

    IPointPtr point1;    HRESULT hr1 = point1.CreateInstance(CLSID_Point);    point1->PutCoords(12698012.6530,2575437.9373);    point1=projToGeo(point1);    point1->get_X(&x);    point1->get_Y(&y);    printf("\t\t X=%lf,Y=%lf\n",x,y);

結果應該為 地理座標系,大地座標系:X=114.068188,Y=22.531326

這樣就完成了 從 平面座標系統到大地座標系/從投影座標繫到地理座標系 的轉換了。

如果想做 從地理到平面,也簡單的,把 設定原始 空間參考 那句 改成 地理的就行了。

其中 有兩個重要參數:long geoType,long projType

這倆值 是 代表對應 座標系 的一個數字 ,可以從下面網站查詢:

 # WGS_1984_Web_Mercator_Auxiliary_Sphere  #ID=3857

================================================================
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/esriSRProjCS3Type_Constants/002m0000003n000000/

esriSRProjCS_WGS1984WebMercatorMajorAuxSphere , 3857 , WGS 1984 Web Mercator Major Auxilliary Sphere

 

esriSRGeoCS_WGS1984 WGS 1984. #ID=4326
=====================================
http://help.arcgis.com/en/sdk/10.0/arcobjects_net/componenthelp/index.html#/esriSRGeoCSType_Constants/002m0000002t000000/

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.