百度坐标(bd0911)互转火星坐标(gcj02)和国测局坐标(GPS)

来源:互联网 发布:sys types.h windows 编辑:程序博客网 时间:2024/06/11 09:00

这两天一直在弄百度坐标转换,刚把百度(bd0911)坐标转换成火星坐标(gcj02),把百度坐标改成GPS的,难度最主要的还是百度坐标转火星坐标,要调整的是x和y值double x = bd_lon - 0.0126, y = bd_lat - 0.0080;

/**

* 火星转百度

* @param bd_lat
* @param bd_lon
*/
public void bd_encrypt(double gg_lat, double gg_lon) {
double x = gg_lon, y = gg_lat;
double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * PI);
double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * PI);
double bd_lon = z * Math.cos(theta) + 0.0128;
double bd_lat = z * Math.sin(theta) + 0.0075;
LatLng lalng = new LatLng(bd_lat, bd_lon);
latlonList.add(lalng);
}


/**
* 百度转火星

* @param bd_lat
* @param bd_lon
*/
public void bd_decrypt(double bd_lat, double bd_lon) {
double x = bd_lon - 0.0126, y = bd_lat - 0.0080;
double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * PI);
double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * PI);
System.out.println("经度x=" + x + "--纬度y=" + y + "--转换后的z=" + z
+ "--得出的theta=" + theta);
double gcj02_lat = z * Math.sin(theta);
double gcj02_lon = z * Math.cos(theta);
LatLng lalng = new LatLng(gcj02_lat, gcj02_lon);
gcj02List.add(lalng);
Log.d("百度坐标-->火星坐标", "经纬度:" + lalng);

}


申明:http://xwangly.iteye.com/blog/2100982

/**
* GPS To baidu  GPS转百度

* @param sourceLatLng
* @return
*/
public LatLng convertGPSToBaidu(LatLng sourceLatLng) {
// 将GPS设备采集的原始GPS坐标转换成百度坐标
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();
return desLatLng;
}


/**
* Baidu to GPS  百度转GPS

* @param sourceLatLng
* @return
*/
public LatLng convertBaiduToGPS(LatLng sourceLatLng) {
// 将GPS设备采集的原始GPS坐标转换成百度坐标
CoordinateConverter converter = new CoordinateConverter();
converter.from(CoordType.GPS);
// sourceLatLng待转换坐标
converter.coord(sourceLatLng);
LatLng desLatLng = converter.convert();
double latitude = 2 * sourceLatLng.latitude - desLatLng.latitude;
double longitude = 2 * sourceLatLng.longitude - desLatLng.longitude;
BigDecimal bdLatitude = new BigDecimal(latitude);
bdLatitude = bdLatitude.setScale(6, BigDecimal.ROUND_HALF_UP);
BigDecimal bdLongitude = new BigDecimal(longitude);
bdLongitude = bdLongitude.setScale(6, BigDecimal.ROUND_HALF_UP);
return new LatLng(bdLatitude.doubleValue(), bdLongitude.doubleValue());
}

1 0
原创粉丝点击