搜尋: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/