0

我实现了一个颤振应用程序来通过颤振谷歌地图插件显示折线,但它只显示这两点之间的直线而不是显示实际路线,我不太确定需要做什么。

这是我的添加标记功能

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,
  ),

我也会在下面附上截图在此处输入图像描述

4

3 回答 3

1

它显示直线,因为您的折线中只有两个点,所以预期的行为是从一个点到另一个点画一条线

于 2020-11-05T05:02:17.847 回答
1

要获取从 A 点到 B 点的路线,您需要使用google_maps_webserviceFlutter 包中提供的 Directions API,这是来自 Google Maps Platform 的一项服务,可提供路线信息

路线信息之一是overview_polyline保存路线的编码折线表示。

您可以overview_polyline通过使用这样的google_maps_webservice包向 Directions API 发送请求的函数来获取:

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
  }
}

然后,一旦您overview_polyline使用上面的示例代码从 Directions API 获取,您将需要使用 Flutter 包中的PolyUtil();方法对其进行解码,google_maps_util如下所示:

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"),
));
于 2020-11-05T10:04:55.287 回答
0

你必须使用谷歌方向 API 这里有一篇文章解释了如何在颤振中绘制两点之间的路线。

https://medium.com/flutter-community/drawing-route-lines-on-google-maps-between-two-locations-in-flutter-4d351733ccbe

于 2020-11-05T15:04:33.543 回答