import 'dart:math'; import 'package:amap_map_fluttify/amap_map_fluttify.dart'; /// 地图工具类 class MapUtils { ///计算两点距离 ///[start] 第一个点坐标[lng,lat] ///[end]第二个点坐标[lng,lat] static double calculateDistance(start, end) { if ((start != null) || (end != null)) { double d1 = 0.01745329251994329; double d2 = start[0]; //lng double d3 = start[1]; //lat double d4 = end[0]; //lng double d5 = end[1]; //lat d2 *= d1; d3 *= d1; d4 *= d1; d5 *= d1; double d6 = sin(d2); double d7 = sin(d3); double d8 = cos(d2); double d9 = cos(d3); double d10 = sin(d4); double d11 = sin(d5); double d12 = cos(d4); double d13 = cos(d5); List<double> arrayOfDouble1 = List<double>(3); List<double> arrayOfDouble2 = List<double>(3); arrayOfDouble1[0] = (d9 * d8); arrayOfDouble1[1] = (d9 * d6); arrayOfDouble1[2] = d7; arrayOfDouble2[0] = (d13 * d12); arrayOfDouble2[1] = (d13 * d10); arrayOfDouble2[2] = d11; double d14 = sqrt((arrayOfDouble1[0] - arrayOfDouble2[0]) * (arrayOfDouble1[0] - arrayOfDouble2[0]) + (arrayOfDouble1[1] - arrayOfDouble2[1]) * (arrayOfDouble1[1] - arrayOfDouble2[1]) + (arrayOfDouble1[2] - arrayOfDouble2[2]) * (arrayOfDouble1[2] - arrayOfDouble2[2])); print((asin(d14 / 2.0) * 12742001.579854401)); return (asin(d14 / 2.0) * 12742001.579854401).abs(); } else { return 0.0; } } } /// 获取随机坐标 mixin NextLatLng { final random = Random(); LatLng getNextLatLng({LatLng center}) { center ??= LatLng(39.90960, 116.397228); return LatLng( center.latitude + random.nextDouble(), center.longitude + random.nextDouble(), ); } List<LatLng> getNextBatchLatLng(int count) { return [ for (int i = 0; i < count; i++) LatLng( 39.90960 + random.nextDouble() * 4, 116.397228 + random.nextDouble() * 4, ) ]; } }