火星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

时间: 2024-10-27 07:58:46

火星02坐标转换为WGS84坐标的相关文章

Web墨卡托坐标与WGS84坐标互转

原文地址:http://bbs.esrichina-bj.cn/ESRI/thread-78245-1-1.html 在WebGIS的开发中经常用到的地图投影为Web墨卡托和WGS84,故歌地图,bingmaps,百度地图,mapabc,mapbar,以及 ArcGIS online上的大部分地图为Web墨卡托地图,ArcGIS online上最开始发布的地图投影为WGS84.在开发过程中很多时候会遇到不同坐标系之间互转的问题,特别是底图使用Web墨卡托,定位(GPS,wifi等)信号坐标为WG

火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ-02坐标.最近在知乎上看到关于火星坐标的话题都是充满争议的(点我跳转到知乎),感兴趣的同学可以去详细了解一下. 基本上所有的国内的电子地图采用的都是火星坐标系甚至Google地图中国部分都特意为中国政府做了偏移.百度坐标 火星坐标是在国际标准坐标WGS-84上进行的一次加密,由于国内的电子地图都要至

经纬度坐标转换为百度坐标

<script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=rmtT1e2a4k770D9jK1ouGODt"></script> <script type="text/javascript" src="http://developer.baidu.com/map/jsdemo/demo/convertor.js

百度坐标(BD-09)、国测局坐标(火星坐标,GCJ-02)和WGS-84坐标互转

// 坐标转换 var coordTransform = (function () { // 一些常量 var PI = 3.1415926535897932384626; var X_PI = 3.14159265358979324 * 3000.0 / 180.0; var a = 6378245.0; var ee = 0.00669342162296594323; // 检测是否在国内 var isOutofChina = function (lng, lat) { return (ln

GPS转换为百度坐标

原文地址:http://www.cnblogs.com/zhaohuionly/archive/2013/06/18/3142623.html 最近在做一个关于手机定位的小应用,需求是这样的,用户通过手机(Wp8)进行二维码扫描操作并且记录用户的当前位置,在PC上可以查看用户所在地图的位置,做法就是在用户扫描条码时,通过手机GPS获取当前在地图上的位置(采用百度静态地图,根据坐标直接生成图片)并将图片保存到数据库,PC端直接从数据库中读取并展示图片.问题是:生成的图片所呈现的位置与实际位置偏差太

GPS坐标换算为百度坐标

最近在做一个关于手机定位的小应用,需求是这样的,用户通过手机(Wp8)进行二维码扫描操作并且记录用户的当前位置,在PC上可以查看用户所在地图的位置,做法就是在用户扫描条码时,通过手机GPS获取当前在地图上的位置(采用百度静态地图,根据坐标直接生成图片)并将图片保存到数据库,PC端直接从数据库中读取并展示图片.问题是:生成的图片所呈现的位置与实际位置偏差太大.于是我开始踏上了寻找解决办法的道路. 首先我检测我的硬件设备是否定位准确,我用WP8手机内置的地图进行了当前位置定位,结果没有问题,说明我的

WGS84、Web墨卡托、火星坐标、百度坐标互转

转自:1.http://blog.csdn.net/wildboy2001/article/details/12031351 2.http://kongxz.com/2013/10/wgs-cgj/ 3.http://www.oschina.net/code/snippet_260395_39205 GCJ-02坐标系统(火星坐标)简介:http://blog.csdn.net/giswens/article/details/8775121(存档:http://mapbd.com/cms/201

火星坐标、百度坐标、WGS84坐标转换代码(JS版)

/** * 提供了百度坐标(BD09).国测局坐标(火星坐标,GCJ02).和WGS84坐标系之间的转换 */ //定义一些常量 var x_PI = 3.14159265358979324 * 3000.0 / 180.0; var PI = 3.1415926535897932384626; var a = 6378245.0; var ee = 0.00669342162296594323; /** * 百度坐标系 (BD-09) 与 火星坐标系 (GCJ-02)的转换 * 即 百度 转

使用QGIS将文本坐标转换为矢量文件

本文主要是说明假设使用QGIS将文本格式的点坐标转换为矢量文件(如shapefile格式). 所需工具:QGIS 所需数据:文本格式的点文件 所须要处理的点坐标文件例如以下所看到的, 114.2 22.15 114.33 22.1 114.85 21.3 115.32 20.6 119.25 14.78 120.25 12.8 120.35 12.62 120.43 12.4 120.48 12.18 120.58 11.92 120.65 11.72 120.62 11.53 120.58 1