首页 > 代码库 > 火星02坐标转换为WGS84坐标

火星02坐标转换为WGS84坐标

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

火星02坐标转换为WGS84坐标