#此前在首頁部分顯示#
好多人一上來就搬出地圖學、地圖投影學或者測繪學中的投影公式(如高斯投影 或 墨卡託投影),又是基準座標又是角度的搞的人頭都大了。
實際上要想實現這個功能非常easy。 ARC Engine中的IPoint就可以進行投影和反投影運算了。
投影過程(C#):
/// flatref 投影的座標系統,這裏的54013是世界投影 ,世界投影所有經緯度都可以轉換爲平面座標,但是由於投影面積大失真也會比較大(相當於把整個地球劈成一片片的,然後拉伸最後貼到平面上,失真當然大了)。當然也可以選擇精度更高的平面如:esriSRProjCS_Beijing1954GK_23N 對應數值21483 僅僅把北京附近的地球平面拉伸鋪在平面上,由於投影面積變小,所以投影經度提高。但是由於面積變小,所以有些經度緯度不能轉換,比如所美國的精度緯度用北京投影就投不了。
flatref = pfactory.CreateProjectedCoordinateSystem(54013);
//沒什麼說的,標準大地經緯度,可以將X-Y逆投影爲經度和緯度
earthref = pfactory.CreateGeographicCoordinateSystem((int)esriSRGeoCSType.esriSRGeoCS_NAD1983);
/// 將經緯度點轉換爲平面座標。
private IPoint GetProject(double x, double y)
{
IPoint pt = new PointClass();
pt.PutCoords(x, y);
IGeometry geo = (IGeometry)pt;
geo.SpatialReference = earthref;
geo.Project(flatref);
return pt;
}
/// 將平面座標轉換爲經緯度。
private IPoint GetGeo(double x, double y)
{
IPoint pt = new PointClass();
pt.PutCoords(x, y);
IGeometry geo = (IGeometry)pt;
geo.SpatialReference = flatref;
geo.Project(earthref);
double xx = pt.X;
return pt;
}
實際上IPoint的投影和任何地圖都沒什麼大關係,完全可以不用地圖,直接調用IPoint進行投影的轉換