Flutter:折线显示直线
Flutter : polylines show straight line
我正在实现一个 flutter 应用程序以通过 flutter google maps 插件显示折线,但它只显示这两点之间的直线而不是显示实际路线,我不太确定需要做什么。
这里是我的添加标记功能
void addMarker() {
latlng.add(LatLng(5.973804, 80.429838));
allMarkers.add(Marker(
markerId: MarkerId('busLoc'),
draggable: true,
onTap: () {
print('Marker Tapped');
},
position: LatLng(5.973804, 80.429838),
));
_polyline.add(Polyline(
color: Colors.blue,
visible: true,
points: latlng,
polylineId: PolylineId("distance"),
));
这是我的脚手架
GoogleMap(
polylines: _polyline,
markers: Set.from(allMarkers),
initialCameraPosition:
CameraPosition(target: LatLng(widget.la, widget.l0), zoom: 14),
mapType: MapType.normal,
),
我也会在下面附上截图
它显示直线是因为折线中只有两个点,所以预期的行为是从一个点到另一个点画一条线
要获取从 A 点到 B 点的路线,您需要使用 google_maps_webservice
flutter 包中提供的 Directions API,这是来自 Google Maps 的一项服务提供路线信息的平台
其中一个路线信息是 overview_polyline
,它包含路线的编码折线表示。
您可以通过使用 google_maps_webservice
包向方向 API 发送请求的函数来获取 overview_polyline
,如下所示:
import 'package:google_maps_webservice/directions.dart' as directions;
final _directions = new directions.GoogleMapsDirections(apiKey: "YOUR_API_KEY");
var overviewPolylines;
directions.DirectionsResponse dResponse = await _directions.directionsWithAddress(
_originAddress,
_destinationAddress,
);
if (dResponse.isOkay) {
for (var r in dResponse.routes) {
overviewPolylines = r.overviewPolyline.points
}
}
然后,一旦您使用上面的示例代码从 Directions API 中获得 overview_polyline
,您将需要使用 google_maps_util
中的 PolyUtil();
方法对其进行解码像这样的 flutter 包:
import 'package:google_maps_util/google_maps_util.dart';
PolyUtil myPoints = PolyUtil();
var pointArray = myPoints.decode(overviewPolylines);
解码后,您可以将 pointArray
传递给您的 polyline
对象,如下所示:
_polyline.add(Polyline(
color: Colors.blue,
visible: true,
points: pointArray,
polylineId: PolylineId("distance"),
));
你必须使用 google 方向 API 这里有一篇文章解释了如何在 flutter 中绘制两点之间的路线。
我正在实现一个 flutter 应用程序以通过 flutter google maps 插件显示折线,但它只显示这两点之间的直线而不是显示实际路线,我不太确定需要做什么。
这里是我的添加标记功能
void addMarker() {
latlng.add(LatLng(5.973804, 80.429838));
allMarkers.add(Marker(
markerId: MarkerId('busLoc'),
draggable: true,
onTap: () {
print('Marker Tapped');
},
position: LatLng(5.973804, 80.429838),
));
_polyline.add(Polyline(
color: Colors.blue,
visible: true,
points: latlng,
polylineId: PolylineId("distance"),
));
这是我的脚手架
GoogleMap(
polylines: _polyline,
markers: Set.from(allMarkers),
initialCameraPosition:
CameraPosition(target: LatLng(widget.la, widget.l0), zoom: 14),
mapType: MapType.normal,
),
我也会在下面附上截图
它显示直线是因为折线中只有两个点,所以预期的行为是从一个点到另一个点画一条线
要获取从 A 点到 B 点的路线,您需要使用 google_maps_webservice
flutter 包中提供的 Directions API,这是来自 Google Maps 的一项服务提供路线信息的平台
其中一个路线信息是 overview_polyline
,它包含路线的编码折线表示。
您可以通过使用 google_maps_webservice
包向方向 API 发送请求的函数来获取 overview_polyline
,如下所示:
import 'package:google_maps_webservice/directions.dart' as directions;
final _directions = new directions.GoogleMapsDirections(apiKey: "YOUR_API_KEY");
var overviewPolylines;
directions.DirectionsResponse dResponse = await _directions.directionsWithAddress(
_originAddress,
_destinationAddress,
);
if (dResponse.isOkay) {
for (var r in dResponse.routes) {
overviewPolylines = r.overviewPolyline.points
}
}
然后,一旦您使用上面的示例代码从 Directions API 中获得 overview_polyline
,您将需要使用 google_maps_util
中的 PolyUtil();
方法对其进行解码像这样的 flutter 包:
import 'package:google_maps_util/google_maps_util.dart';
PolyUtil myPoints = PolyUtil();
var pointArray = myPoints.decode(overviewPolylines);
解码后,您可以将 pointArray
传递给您的 polyline
对象,如下所示:
_polyline.add(Polyline(
color: Colors.blue,
visible: true,
points: pointArray,
polylineId: PolylineId("distance"),
));
你必须使用 google 方向 API 这里有一篇文章解释了如何在 flutter 中绘制两点之间的路线。