import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class Gpstest { final static int TABLESIZE=660*450; //#define ID(i, j) ((i) + 660 * (j)) static double[] TableX=new double[TABLESIZE]; static double[] TableY=new double[TABLESIZE]; static boolean bInitTable = false; static void InitTable() throws IOException { File filename = new File("C://Mars2Wgsnew.txt"); long lX1, lY1; String tempString; String[] tem; bInitTable = false; BufferedReader reader = new BufferedReader(new FileReader(filename)); for(int i=0;;i++){ tempString = reader.readLine(); if(tempString==null){ break; } // System.out.println(tempString); tempString=tempString.replaceAll(" ",""); tem=tempString.split(","); TableX[i] = ((double) Long.valueOf(tem[0])) / 100000.0; TableY[i] = ((double) Long.valueOf(tem[1])) / 100000.0; } reader.close(); bInitTable = true; } // Result: // 0 - ok // -1 - Table is not initialized // -2 - Latitude or Longitude is invalid static int Mars2Wgs( double x_mars, double y_mars ) { int i, j, k; double x1, y1, x2, y2, x3, y3, x4, y4, xtry, ytry, dx, dy,x_wgs,y_wgs; double t, u; if(!bInitTable) return -1; xtry = x_mars; ytry = y_mars; for( k=0; k<10; ++k ) { // 只对中国国境内数据转换 if( xtry < 72 || xtry > 137.9 || ytry < 10 || ytry > 54.9) { return -2; } i = (int) ((xtry - 72.0) * 10.0); j = (int) ((ytry - 10.0) * 10.0); x1 = TableX[i+660*j]; y1 = TableY[i+660*j]; x2 = TableX[(i+1)+660*j]; y2 = TableY[(i+1)+660*j]; x3 = TableX[(i+1)+660*(j+1)]; y3 = TableY[(i+1)+660*(j+1)]; x4 = TableX[i+660*(j+1)]; y4 = TableY[i+660*(j+1)]; t = (xtry - 72.0 - 0.1 * i) * 10.0; u = (ytry - 10.0 - 0.1 * j) * 10.0; dx = (1.0-t)*(1.0-u)*x1 + t*(1.0-u)*x2 + t*u*x3 + (1.0-t)*u*x4 - xtry; dy = (1.0-t)*(1.0-u)*y1 + t*(1.0-u)*y2 + t*u*y3 + (1.0-t)*u*y4 - ytry; xtry = (xtry + x_mars - dx)/2.0; ytry = (ytry + y_mars - dy)/2.0; } x_wgs = xtry; y_wgs = ytry; System.out.println(x_wgs+";"+y_wgs); return 0; } public static void main(String[] args) throws IOException { double x_mars, y_mars, x_wgs, y_wgs; File fname = new File("C://2.txt"); String tempString; String[] tem; BufferedReader reader = new BufferedReader(new FileReader(fname)); int result; for(int i=0;;i++){ tempString = reader.readLine(); if(tempString==null){ break; } // System.out.println(tempString); tempString=tempString.replaceAll(" ",""); tem=tempString.split(","); x_mars = ((double) Double.valueOf(tem[0])); y_mars = ((double) Double.valueOf(tem[1])); InitTable(); result = Mars2Wgs(x_mars, y_mars); } } }
本例子程序改编自其它网友,其功能是将火星02坐标转换为WGS84坐标
需要一个数据文件Mars2Wgsnew.txt。转换后存在几米到十几米的误差
http://files.cnblogs.com/casicyuan/Mars2Wgsnew.rar
时间: 2024-10-27 07:58:46