Flutter 高德地图坐标和百度坐标相互转换

//BD-09(百度)坐标转换成GCJ-02(火星,高德)坐标
//@param bd_lon 百度经度
//@param bd_lat 百度纬度
function bd_decrypt($bd_lon,$bd_lat){
    $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    $x = $bd_lon - 0.0065;
    $y = $bd_lat - 0.006;
    $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
    $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
    // $data['gg_lon'] = $z * cos($theta);
    // $data['gg_lat'] = $z * sin($theta);
    $gg_lon = $z * cos($theta);
    $gg_lat = $z * sin($theta);
    // 保留小数点后六位
    $data['gg_lon'] = round($gg_lon, 6);
    $data['gg_lat'] = round($gg_lat, 6);
    return $data;
}
 
//GCJ-02(火星,高德)坐标转换成BD-09(百度)坐标
//@param bd_lon 百度经度
//@param bd_lat 百度纬度
function bd_encrypt($gg_lon,$gg_lat){
    $x_pi = 3.14159265358979324 * 3000.0 / 180.0;
    $x = $gg_lon;
    $y = $gg_lat;
    $z = sqrt($x * $x + $y * $y) - 0.00002 * sin($y * $x_pi);
    $theta = atan2($y, $x) - 0.000003 * cos($x * $x_pi);
    $bd_lon = $z * cos($theta) + 0.0065;
    $bd_lat = $z * sin($theta) + 0.006;
    // 保留小数点后六位
    $data['bd_lon'] = round($bd_lon, 6);
    $data['bd_lat'] = round($bd_lat, 6);
    return $data;
}

以上是JS代码

以下是Dart代码

百度转高德

import 'dart:math';  
  
Map bdDecrypt(double bdLng, double bdLat) {  
    const X_PI = pi * 3000.0 / 180.0;  
    var x = bdLng - 0.0065;  
    var y = bdLat - 0.006;  
    var z = sqrt(x * x + y * y) - 0.00002 * sin(y * X_PI);  
    var theta = atan2(y, x) - 0.000003 * cos(x * X_PI);  
    var ggLng = z * cos(theta);  
    var ggLat = z * sin(theta);  
      
    return {'lng': ggLng, 'lat': ggLat};  
}  
  
void main() {  
    // 示例使用  
    var decrypted = bdDecrypt(116.407396, 39.904200);  
    print(decrypted);  
}

高德转百度

//GCJ-02(火星,高德)坐标转换成BD-09(百度)坐标

import 'dart:math';  
  
Map bdEncrypt(double ggLon, double ggLat) {  
  final xPi = 3.14159265358979324 * 3000.0 / 180.0;  
  double x = ggLon;  
  double y = ggLat;  
  double z = sqrt(x * x + y * y) - 0.00002 * sin(y * xPi);  
  double theta = atan2(y, x) - 0.000003 * cos(x * xPi);  
  double bdLon = z * cos(theta) + 0.0065;  
  double bdLat = z * sin(theta) + 0.006;  
  
  // 保留小数点后六位  
  Map data = {  
    'bd_lon': bdLon,  
    'bd_lat': bdLat  
  };  
  
  return data;  
}  
  
void main() {  
  // 示例用法  
  var result = bdEncrypt(116.407526, 39.90403);  
  print(result);  
}

 

你可能感兴趣的:(flutter)