如何在Flutter上的两个地理位置之间绘制路线?

时间:2019-07-19 02:31:49

标签: android ios flutter dart

如何使用新的Google地图小部件在Flutter上的两个地理位置之间绘制路线?有一些关于如何使用先前的小部件执行此操作的教程,但现在已弃用。

1 个答案:

答案 0 :(得分:0)

有很多实现方法。这是我几周前所做的。首先,我有这些插件:

import 'package:flutter_google_places/flutter_google_places.dart';
import 'package:flutter_polyline_points/flutter_polyline_points.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';

接下来创建您的GoogleMap对象:

LatLng izp = LatLng(-3.386943, 29.371636);

  GoogleMap googleMap = GoogleMap(
      initialCameraPosition: CameraPosition(target: izp, zoom: 10.0),
      compassEnabled: true,
      scrollGesturesEnabled: true,
      zoomGesturesEnabled: true,
      onMapCreated: (g) {
        gmc = g;//for mapcontroller if any
      },
      markers: {},
      polylines: {},//initialize the polylines list
    );

从Google路线,获取您两点之间的路线。 解码结果并获得分数。应该在这个位置:

dynamic directions = decodedResult["routes"][0]["overview_polyline"]['points'];

创建PolylinePoints对象并解码您的路线对象:

PolylinePoints points = new PolylinePoints();

List<PointLatLng> result = points.decodePolyline(directions);

LatLng的列表创建PointLatLng的列表:

List<LatLng> po = [];
      result.forEach((f) {
        po.add(LatLng(f.latitude, f.longitude));
      });

然后使用LatLng列表创建一个折线对象:

 Polyline route = new Polyline(
          polylineId: PolylineId("route"),
          geodesic: true,
          points: po,
          width: 20,
          color: Colors.blue);

然后将折线对象设置为您的google map对象:

 setState(() {
 //if you created markers, add them too if you wish
        googleMap.markers.add(marker);
        googleMap.markers.add(marker2);
        googleMap.polylines.add(route);

        /*if you associated a googlemapcontroller, you can do further actions like zooming...*/
      });

我认为这应该有所帮助。祝你好运