资源简介
利用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
- 上一篇:java-web实习报告模板
- 下一篇:android SQLite数据库的增删改
相关资源
- C# to Java 代码转换工具(已破解)
- JAVA实现汉字转换为拼音
- java 时间转换成精确的生辰八字
- 彩色图转灰度图加权,最大值,平均
- java实现word和excel转换成html
- java的汇率转换系统
- java ffmpeg视频转换
- java汉语转换拼音 支持多音字 繁体字
- Android签名生成工具和签名格式转换工
- Java RSA 分段加密解密工具 .NET密钥转换
- 音频转换WAV转换为PCM
- .net 与Java间RSA加密的转换
- JPocketKnife.jar JPK 字符转换工具
- dx(Android jar转换成dex工具)
- dex与jar相互转换工具
- Android NDK使用Iconv进行编码转换
- officetopdf
- java版的sm2、sm3、sm4加密解密,以及数
- json转换成实体类工具优化版
- 百度(bd09)火星(GCJ-02)大地(wgs
- Android常用的几种格式:NV21/NV12/YV12/
- Jar转换为Bundle工具
- orai18n.jar oracle 驱动程序javada转换
- 简单词法分析器,有穷自动机,正规
- Java 自动类型转换与强制类型转换
- Java 温度单位转换工具
- Java 角度和弧度的转换
- Java 字符与Unicode码的转换
- Java 整数进制转换器
- Java 字符串大小写转换
评论
共有 条评论