我发现“polylineQuality”:“HIGH_QUALITY”在路线首选API中可用,但我猜在Google Directions API中不可用。有什么想法可以提高折线的平滑度吗?
import 'package:http/http.dart' as http;
import 'dart:convert';
import 'package:google_maps_flutter/google_maps_flutter.dart';
class Routing {
Future<List<LatLng>> getPolylinePoints(
LatLng source, LatLng destination) async {
String apiKey = "API_KEY";
String polylineQuality = "HIGH_QUALITY";
String baseUrl = "https://maps.googleapis.com/maps/api/directions/json?";
String url = "$baseUrl"
"origin=${source.latitude},${source.longitude}&"
"destination=${destination.latitude},${destination.longitude}&"
"key=$apiKey&"
"polylineQuality=$polylineQuality";
var response = await http.get(Uri.parse(url));
if (response.statusCode == 200) {
var jsonData = jsonDecode(response.body);
var points = jsonData['routes'][0]['overview_polyline']['points'];
return decodePolyline(points);
} else {
throw Exception("Failed to load directions");
}
}
List<LatLng> decodePolyline(String polyline) {
List<LatLng> points = [];
int index = 0;
int len = polyline.length;
int lat = 0;
int lng = 0;
while (index < len) {
int b;
int shift = 0;
int result = 0;
do {
b = polyline.codeUnitAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlat = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lat += dlat;
shift = 0;
result = 0;
do {
b = polyline.codeUnitAt(index++) - 63;
result |= (b & 0x1f) << shift;
shift += 5;
} while (b >= 0x20);
int dlng = ((result & 1) != 0 ? ~(result >> 1) : (result >> 1));
lng += dlng;
LatLng p = LatLng((lat / 1E5).toDouble(), (lng / 1E5).toDouble());
points.add(p);
}
return points;
}
}
路由 API 的文档说明了为什么您应该迁移到路由 API。它说,
路由 API 提高了计算性能 方向、距离和旅行时间,值得更换 当前使用 Directions API 和 Distance Matrix API 的应用程序。最多 Routes API 的功能向后兼容 方向 API 和距离矩阵 API。
我假设您需要
polylineQuality
用于路线 API,因为首选路线仅适用于部分客户,并且您需要联系销售人员才能使用您想要的功能。
但是如果您查看 Routes API,它实际上具有相同的
polylineQuality
字段,您可以在其中将折线的质量指定为 HIGH_QUALITY
或 OVERVIEW
。参考:https://developers.google.com/maps/documentation/routes/config_trade_offs#example_setting_polyline_quality
您可以在使用路由 API 的
computeRoutes
方法时使用此字段。您可以在此处查看参考文档:https://developers.google.com/maps/documentation/routes/reference/rest/v2/TopLevel/computeRoutes#polylinequality
以下是有关如何使用
computeRoutes
获取路线的文档指南:https://developers.google.com/maps/documentation/routes/compute_route_directions
有了这个,我认为路由 API 应该足以满足您的用例。