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. (二)windows下安装PHPCMS V9

    一.准备工作 搭建环境 :参考:Windows下搭建PHP开发环境及相关注意事项 PHPCMS V9 :下载适合自己 PHPCMS V9 版本到本地或服务器,下载地址:http://www.phpcm ...

  2. OS开发网络篇—监测网络状态

    iOS开发网络篇—监测网络状态 一.说明 在网络应用中,需要对用户设备的网络状态进行实时监控,有两个目的: (1)让用户了解自己的网络状态,防止一些误会(比如怪应用无能) (2)根据用户的网络状态进行 ...

  3. POJ 1737 统计有n个顶点的连通图有多少个 (带标号)

    设f(n)为所求答案 g(n)为n个顶点的非联通图 则f(n) + g(n) = h(n) = 2^(n * (n - 1) / 2) 其中h(n)是n个顶点的联图的个数 这样计算 先考虑1所在的连通 ...

  4. Java Calendar实现控制台日历

    public static void main(String[] args) throws IOException { //初始化日历对象 Calendar calendar = Calendar.g ...

  5. [转] 再叙TIME_WAIT

    http://huoding.com/2013/12/31/316 之所以起这样一个题目是因为很久以前我曾经写过一篇介绍TIME_WAIT的文章,不过当时基本属于浅尝辄止,并没深入说明问题的来龙去脉, ...

  6. 使用PuTTY在Windows中向Linux上传文件

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/3843207.html ...

  7. js--小结⑦---格式转换

  8. ImageView 设置OnTouchListener

    ImageView的OnTouchListener,onTouch方法要返回true,MotionEvent.ACTION_UP,MotionEvent.ACTION_MOVE 才有效. 其实关于返回 ...

  9. 如何让 .Net Console 控制台显示界面在最上层

    可以利用 Win32 API 来控制 Console 窗口的 最大化 或 最小化. 废话不多说见以下代码: [DllImport("user32.dll", SetLastErro ...

  10. AFN的坑--NSCachedURLResponse缓存

    网络正常的情况下,如果服务器宕机或者数据库出错,会造成访问服务器报错的情况,一般报错的内容是:无法连接到服务器或者其它错误.且服务器 修复后,仍然报错.经过排查,终于找出了原因所在:AFNetwork ...