flutter如何计算2个坐标点之间的距离

我在Flutter开发中需要计算两个地理坐标点之间的距离,比如根据经纬度计算两点之间的实际距离。请问Flutter中有什么方便的方法或现成的库可以实现这个功能?最好能给出具体的代码示例,包括如何处理坐标点和计算结果的单位(米或千米)。

2 回复

使用Flutter的geolocator包计算两点间距离:

double distance = Geolocator.distanceBetween(
  lat1, lon1,  // 起点坐标
  lat2, lon2   // 终点坐标
);

返回结果为米制单位的直线距离。

更多关于flutter如何计算2个坐标点之间的距离的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中计算两个坐标点之间的距离,可以使用Haversine公式来计算地球表面两点间的大圆距离。

以下是实现代码:

import 'dart:math';

double calculateDistance(lat1, lon1, lat2, lon2) {
  var p = 0.017453292519943295;  // Math.PI / 180
  var a = 0.5 - cos((lat2 - lat1) * p) / 2 + 
          cos(lat1 * p) * cos(lat2 * p) * 
          (1 - cos((lon2 - lon1) * p)) / 2;
  return 12742 * asin(sqrt(a));  // 2 * R; R = 6371 km
}

// 使用示例
void main() {
  // 坐标点1:北京 (39.9042, 116.4074)
  // 坐标点2:上海 (31.2304, 121.4737)
  double distance = calculateDistance(39.9042, 116.4074, 31.2304, 121.4737);
  print('距离: ${distance.toStringAsFixed(2)} 公里');  // 约1068公里
}

参数说明:

  • lat1, lon1:第一个点的纬度和经度
  • lat2, lon2:第二个点的纬度和经度
  • 返回值的单位是公里

如果需要其他单位:

// 转换为米
double distanceInMeters = distance * 1000;

// 转换为英里
double distanceInMiles = distance * 0.621371;

这个方法考虑了地球的曲率,比简单的欧几里得距离更准确,特别适合地理位置计算。

回到顶部