• 大小: 923KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-14
  • 语言: Java
  • 标签: 火星坐标  转换  纠偏  

资源简介

利用Java代码及参考文件,将火星坐标转换为WGS84坐标,亲测可用,于是共享。

资源截图

代码片段和文件信息

import java.io.InputStream;
import java.io.objectInputStream;

/**
 * 地图坐标修偏
 * @author wangtong
 *
 */
public class ModifyOffset {

    static double[] X = new double[660 * 450];
    static double[] Y = new double[660 * 450];
    
/**
 * @param args
 */
public static void main(String[] args) throws Exception {
init(ModifyOffset.class.getResourceAsStream(“axisoffset.dat“));
System.out.println(c2s(new PointDouble(118.7715263 32.0789851)));
//System.out.println(s2c(new PointDouble(118.7715263 32.0789851)));
System.out.println(s2c(new PointDouble(112.99370321 28.13702654)));
}

    public static void init(InputStream inputStream) throws Exception {
     objectInputStream in = new objectInputStream(inputStream);
     try {
     int i = 0;
     while(in.available() > 0) {
     if((i & 1) == 1) {
     Y[(i - 1) >> 1] = in.readInt() / 100000.0d;;
     } else {
     X[i >> 1] = in.readInt() / 100000.0d;;
     }
     i++;
     }
     } finally {
     if(in != null)
     in.close();
     }
    }
    
    // standard -> china
    public static PointDouble s2c(PointDouble pt) {
        int cnt = 10;
        double x = pt.x y = pt.y;
        while(cnt-- > 0) {
            if (x < 71.9989d || x > 137.8998d || y < 9.9997d || y > 54.8996d)
                return pt;
            int ix = (int)(10.0d * (x - 72.0d));
            int iy = (int)(10.0d * (y - 10.0d));
            double dx = (x - 72.0d - 0.1d * ix) * 10.0d;
            double dy = (y - 10.0d - 0.1d * iy) * 10.0d;
            x = (x + pt.x + (1.0d - dx) * (1.0d - dy) * X[ix + 660 * iy] + dx * (1.0d - dy) * X[ix + 660 * iy + 1] + dx * dy * X[ix + 660 * iy + 661] + (1.0d - dx) * dy * X[ix + 660 * iy + 660] - x) / 2.0d;
            y = (y + pt.y + (1.0d - dx) * (1.0d - dy) * Y[ix + 660 * iy] + dx * (1.0d - dy) * Y[ix + 660 * iy + 1] + dx * dy * Y[ix + 660 * iy + 661] + (1.0d - dx) * dy * Y[ix + 660 * iy + 660] - y) / 2.0d;
        }
        return new PointDouble(x y);
    }
    
    // china -> standard
    public static PointDouble c2s(PointDouble pt) {
     int cnt = 10;
     double x = pt.x y = pt.y;
     while(cnt-- > 0) {
     if (x < 71.9989d || x > 137.8998d || y < 9.9997d || y > 54.8996d)
     return pt;
     int ix = (int)(10.0d * (x - 72.0d));
     int iy = (int)(10.0d * (y - 10.0d));
     double dx = (x - 72.0d - 0.1d * ix) * 10.0d;
     double dy = (y - 10.0d - 0.1d * iy) * 10.0d;
     x = (x + pt.x - (1.0d - dx) * (1.0d - dy) * X[ix + 660 * iy] - dx * (1.0d - dy) * X[ix + 660 * iy + 1] - dx * dy * X[ix + 660 * iy + 661] - (1.0d - dx) * dy * X[ix + 660 * iy + 660] + x) / 2.0d;
     y = (y + pt.y - (1.0d - dx) * (1.0d - dy) * Y[ix + 660 * iy] - dx * (1.0d - dy) * Y[ix + 660 * iy + 1] - dx * dy * Y[ix + 660 * iy + 661] - (1.0d - dx) * dy * Y[ix + 660 * iy + 660] + y) / 2.0d;
     }
     return new PointDouble(x y);
    }
    
}

class PointDouble {
double x y;
Poi

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件    2387609  2012-09-21 16:15  axisoffset.dat

     文件       3141  2014-10-04 16:51  ModifyOffset.java

----------- ---------  ---------- -----  ----

              2390750                    2


评论

共有 条评论