地图之间经纬度转换靠谱吗

x33g5p2x  于2022-04-27 转载在 其他  
字(1.8k)|赞(0)|评价(0)|浏览(619)

一 问题背景

最近来了个需求,需要记录某个地址的百度经纬度和高德经纬度,之前的想法是只获取高德的经纬度,然后通过转换求出百度地图。经过多方查询资料,求得一份代码。

二 地图转换

  1. package maptransfer;
  2. /**
  3. * @className: BMapTransQQMapUtils
  4. * @description: 各地图经纬度转换
  5. * 西安大兴医院
  6. * 高德:108.911883 34.288239 https://lbs.amap.com/tools/picker
  7. * 百度:108.91839 34.294063
  8. * 高德转百度:108.90593189476142 34.281603866249206
  9. * 从测试结果来看,转换不靠谱
  10. * @date: 2022/4/26
  11. * @author: cakin
  12. */
  13. public class BMapTransQQMapUtils {
  14. // 将百度地图经纬度转换为腾讯/高德地图经纬度,用于大屏
  15. public static LatLng bMapTransQQMap(LatLng latLng) {
  16. double lat = latLng.latitude;
  17. double lng = latLng.longitude;
  18. double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  19. double x = lng - 0.0065;
  20. double y = lat - 0.006;
  21. double z = Math.sqrt(x * x + y * y) - 0.00002 * Math.sin(y * x_pi);
  22. double theta = Math.atan2(y, x) - 0.000003 * Math.cos(x * x_pi);
  23. double lngs = z * Math.cos(theta);
  24. double lats = z * Math.sin(theta);
  25. LatLng latLng1 = new LatLng(lats, lngs);
  26. return latLng1;
  27. }
  28. // 将腾讯/高德地图经纬度转换为百度地图经纬度
  29. public static LatLng qqMapTransBMap(LatLng latLng) {
  30. double lat = latLng.latitude;
  31. double lng = latLng.longitude;
  32. double x_pi = 3.14159265358979324 * 3000.0 / 180.0;
  33. double x = lng;
  34. double y = lat;
  35. double z = Math.sqrt(x * x + y * y) + 0.00002 * Math.sin(y * x_pi);
  36. double theta = Math.atan2(y, x) + 0.000003 * Math.cos(x * x_pi);
  37. double lngs = z * Math.cos(theta) + 0.0065;
  38. double lats = z * Math.sin(theta) + 0.006;
  39. LatLng latLng1 = new LatLng(lats, lngs);
  40. return latLng1;
  41. }
  42. public static void main(String[] args) {
  43. LatLng latLng1 = new LatLng(108.911883, 34.288239); // 高德经纬度
  44. LatLng latLng = BMapTransQQMapUtils.bMapTransQQMap(latLng1);// 百度的经纬度转化为高德
  45. System.out.println("经度:" + latLng.latitude);
  46. System.out.println("纬度:" + latLng.longitude);
  47. }
  48. }
  49. class LatLng {
  50. public double latitude;
  51. public double longitude;
  52. public LatLng(double latitude, double longitude) {
  53. this.latitude = latitude;
  54. this.longitude = longitude;
  55. }
  56. }

三 测试结果

经度:108.90593189476142

纬度:34.281603866249206

四 分析

用 西安大兴医院 进行查询。

1 高德地图

查询网址:高德地图API 

查询结果:108.911883,34.288239

2 百度地图

查询网址:拾取坐标系统

查询结果:108.91839,34.294063

3 分析

测试结果和实际存在误差,转换后的经纬度不准,如果将不准的经纬度用于百度,查出的各类信息也不准,所以靠谱的做法还是用谁的经纬度,就用谁的接口,不要想着转换图方便。

相关文章