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坐标的更多相关文章

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

    火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ- ...

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

    原文地址:http://bbs.esrichina-bj.cn/ESRI/thread-78245-1-1.html 在WebGIS的开发中经常用到的地图投影为Web墨卡托和WGS84,故歌地图,bi ...

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

    原文地址:https://www.cnblogs.com/fwc1994/p/5884115.html 火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地 ...

  4. 轨迹系列5——验证轨迹GPS坐标转换为本地坐标的四/七参数是否准确的一种方案

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/ 1. 背景 目前对多个项目轨迹不准确的情况做了排查,发现导致轨迹偏移百分 ...

  5. canvas中window坐标转换为canvas坐标

    function getMousePos(canvas, evt) { var rect = canvas.getBoundingClientRect(); return { x: evt.clien ...

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

    // 坐标转换 var coordTransform = (function () { // 一些常量 var PI = 3.1415926535897932384626; var X_PI = 3. ...

  7. GPS转换为百度坐标

    原文地址:http://www.cnblogs.com/zhaohuionly/archive/2013/06/18/3142623.html 最近在做一个关于手机定位的小应用,需求是这样的,用户通过 ...

  8. arcgis server 中Web墨卡托投影与WGS-84坐标的转换

    arcgis server 中Web墨卡托投影坐标与WGS-84坐标的转换 //经纬度转墨卡托 function lonlat2mercator(lonlat){ var mercator={x:0, ...

  9. GPS坐标换算为百度坐标

    最近在做一个关于手机定位的小应用,需求是这样的,用户通过手机(Wp8)进行二维码扫描操作并且记录用户的当前位置,在PC上可以查看用户所在地图的位置,做法就是在用户扫描条码时,通过手机GPS获取当前在地 ...

随机推荐

  1. 【设计模式 - 8】之组合模式(Composite)

    1      模式简介 组合模式可以将对象以树形结构来表现"整体/部分"层次结构,让客户以一致的方式处理个别形象以及对象组合. 组合模式让我们能用树形方式创建对象的结构,树里面包含 ...

  2. iOS截取视频缩略图的两种方法

    前言: 看完了使用MPMoviePlayerController播放在线视频,在实际应用中有时候须要获取视频的缩略图,我们来看看怎样截取指定时间内的视频缩略图. 一  使用MPMoviePlayerC ...

  3. thinkphp 统计某个字段不重复数 总数

    $this->batch->count('DISTINCT intobatch');

  4. Android无法更新sdk的解决办法

    修改 windows/system32/drivers/etc/hosts 文件 添加 203.208.46.146 dl.google.com203.208.46.146 dl-ssl.google ...

  5. HUNNU--湖师大--11407--It Is Cold

    [F] It Is Cold Dr. Ziad Najem is known as the godfather of  the  ACPC. When the regional contest was ...

  6. 浙江大学PAT上机题解析之1014. 福尔摩斯的约会 (20)

    1014. 福尔摩斯的约会 (20) 时间限制   50 ms 内存限制   32000 kB 代码长度限制   8000 B 判题程序     Standard     作者     CHEN, Y ...

  7. Java SE 6 新特性: HTTP 增强--转

    概述 Java 语言从诞生的那天起,就非常注重网络编程方面的应用.随着互联网应用的飞速发展,Java 的基础类库也不断地对网络相关的 API 进行加强和扩展.在 Java SE 6 当中,围绕着 HT ...

  8. jsp页面表单的遍历要怎么写

    1.传统的方式使用request.getAttribute(“list”);获取表单的值, 2.也可以用struts2提供的标签进行遍历 备注 // 传统的接受参数方法 // String sfz=t ...

  9. [o] duplicate column name: _id 问题解决

    Android下使用SQLite数据库,报错:duplicate column name: _id 数据库文件下有两列数据的名称一样,原因是定义数据类型时有重复,如,我的定义: //复制上一行增加TY ...

  10. 给sqlserver配置内存参数

    操作环境:windows server 2003 R2 Enterprise Edition SP1 + 4G 内存 + Sqlsever 2005 在以上环境中,运行公司的ERP数据服务,sqlse ...