火星座標(gcj02)、國測局座標(GPS)和百度座標(bd0911)互轉
阿新 • • 發佈:2018-12-25
火星座標轉百度座標
/** * 火星轉百度 * * @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); }
GPS轉百度座標
/** * 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; }
百度座標轉GPS
/**
* 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());
}