1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > gps84转换gcj02公式_地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法

gps84转换gcj02公式_地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法

时间:2023-01-31 12:59:57

相关推荐

gps84转换gcj02公式_地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法

import java.util.HashMap;

import java.util.Map;

/**

* 地球坐标系 (WGS-84) 相互转火星坐标系 (GCJ-02) 的转换算法

*

* @author jxh

* @time -5-16

*

*/

public class WGSTOGCJ02 {

private static double pi = 3.14159265358979324D;// 圆周率

private static double a = 6378245.0D;// WGS 长轴半径

private static double ee = 0.00669342162296594323D;// WGS 偏心率的平方

/**

* 中国坐标内

*

* @param lat

* @param lon

* @return

*/

public boolean outofChina(double lat, double lon) {

if (lon &lt 72.004 || lon &gt 137.8347)

return true;

if (lat &lt 0.8293 || lat &gt 55.8271)

return true;

return false;

}

public double transformLat(double x, double y) {

double ret = -100.0 + 2.0 * x + 3.0 * y + 0.2 * y * y + 0.1 * x * y

+ 0.2 * Math.sqrt(Math.abs(x));

ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;

ret += (20.0 * Math.sin(y * pi) + 40.0 * Math.sin(y / 3.0 * pi)) * 2.0 / 3.0;

ret += (160.0 * Math.sin(y / 12.0 * pi) + 320 * Math.sin(y * pi / 30.0)) * 2.0 / 3.0;

return ret;

}

// 84-&gtgcj02

public double transformLon(double x, double y) {

double ret = 300.0 + x + 2.0 * y + 0.1 * x * x + 0.1 * x * y + 0.1

* Math.sqrt(Math.abs(x));

ret += (20.0 * Math.sin(6.0 * x * pi) + 20.0 * Math.sin(2.0 * x * pi)) * 2.0 / 3.0;

ret += (20.0 * Math.sin(x * pi) + 40.0 * Math.sin(x / 3.0 * pi)) * 2.0 / 3.0;

ret += (150.0 * Math.sin(x / 12.0 * pi) + 300.0 * Math.sin(x / 30.0

* pi)) * 2.0 / 3.0;

return ret;

}

public Map&ltString, Double&gt transform(double lon, double lat) {

HashMap&ltString, Double&gt localHashMap = new HashMap&ltString, Double&gt();

if (outofChina(lat, lon)) {

localHashMap.put("lon", Double.valueOf(lon));

localHashMap.put("lat", Double.valueOf(lat));

return localHashMap;

}

double dLat = transformLat(lon - 105.0, lat - 35.0);

double dLon = transformLon(lon - 105.0, lat - 35.0);

double radLat = lat / 180.0 * pi;

double magic = Math.sin(radLat);

magic = 1 - ee * magic * magic;

double sqrtMagic = Math.sqrt(magic);

dLat = (dLat * 180.0) / ((a * (1 - ee)) / (magic * sqrtMagic) * pi);

dLon = (dLon * 180.0) / (a / sqrtMagic * Math.cos(radLat) * pi);

double mgLat = lat + dLat;

double mgLon = lon + dLon;

localHashMap.put("lon", mgLon);

localHashMap.put("lat", mgLat);

return localHashMap;

}

// gcj02-84

public Map&ltString, Double&gt gcj2wgs(double lon, double lat) {

Map&ltString, Double&gt localHashMap = new HashMap&ltString, Double&gt();

double lontitude = lon

- (((Double) transform(lon, lat).get("lon")).doubleValue() - lon);

double latitude = (lat - (((Double) ( transform(lon, lat))

.get("lat")).doubleValue() - lat));

localHashMap.put("lon", lontitude);

localHashMap.put("lat", latitude);

return localHashMap;

}

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。