java將經緯度轉換為平面座標
阿新 • • 發佈:2019-01-30
(米勒投影)演算法
public static double[] MillierConvertion(double lat, double lon) { double L = 6381372 * Math.PI * 2;//地球周長 double W=L;// 平面展開後,x軸等於周長 double H=L/2;// y軸約等於周長一半 double mill=2.3;// 米勒投影中的一個常數,範圍大約在正負2.3之間 double x = lon * Math.PI / 180;// 將經度從度數轉換為弧度 double y = lat * Math.PI / 180;// 將緯度從度數轉換為弧度 y=1.25 * Math.log( Math.tan( 0.25 * Math.PI + 0.4 * y ) );// 米勒投影的轉換 // 弧度轉為實際距離 x = ( W / 2 ) + ( W / (2 * Math.PI) ) * x; y = ( H / 2 ) - ( H / ( 2 * mill ) ) * y; double[] result=new double[2]; result[0]=x; result[1]=y; return result; }
/ lon 經度,西經為負數 // lat 緯度,南緯是負數 function millerXY (lon, lat){ var L = 6381372 * Math.PI * 2, // 地球周長 W = L, // 平面展開後,x軸等於周長 H = L / 2, // y軸約等於周長一半 mill = 2.3, // 米勒投影中的一個常數,範圍大約在正負2.3之間 x = lon * Math.PI / 180, // 將經度從度數轉換為弧度 y = lat * Math.PI / 180; // 將緯度從度數轉換為弧度 // 這裡是米勒投影的轉換 y = 1.25 * Math.log( Math.tan( 0.25 * Math.PI + 0.4 * y ) ); // 這裡將弧度轉為實際距離 x = ( W / 2 ) + ( W / (2 * Math.PI) ) * x; y = ( H / 2 ) - ( H / ( 2 * mill ) ) * y; // 轉換結果的單位是公里 // 可以根據此結果,算出在某個尺寸的畫布上,各個點的座標 return { x : x, y : y }; }