Flutter地图路线绘制插件map_polyline_draw的使用

发布于 1周前 作者 sinazl 来自 Flutter

Flutter地图路线绘制插件map_polyline_draw的使用

插件简介

map_polyline_draw 是一个用于在Flutter应用中绘制地图路线的插件。它可以在两个点之间显示地图路线,并允许用户自定义标记图标、折线宽度和颜色。该插件基于 google_maps_flutter 包来集成Google地图,并使用 http 包从Google Maps API获取数据。

屏幕截图

屏幕截图1 屏幕截图2

使用方法

1. 添加依赖

首先,在 pubspec.yaml 文件中添加 map_polyline_draw 作为依赖:

dependencies:
  flutter:
    sdk: flutter
  map_polyline_draw: ^最新版本号

2. 集成Google地图

在项目中集成Google地图,具体步骤可以参考官方文档。你需要确保已经配置好了Google Maps API密钥。

3. 获取Google Maps API密钥

前往Google Cloud Platform获取API密钥,并确保启用了Google Maps SDK for Android和iOS。

完整示例代码

以下是一个完整的示例代码,展示了如何使用 map_polyline_draw 插件在两个点之间绘制路线,并自定义一些参数。

import 'package:flutter/material.dart';
import 'package:map_polyline_draw/map_polyline_draw.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(
        title: "Map Polyline Draw",
      ),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, this.title}) : super(key: key);

  final String? title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title!),
      ),
      body: MapPolyLineDraw(
        // 必须提供API密钥,否则会报错
        apiKey: "YOUR_API_KEY",

        // 第一个点的经纬度
        firstPoint: MapPoint(24.9402897, 67.0770537),

        // 第二个点的经纬度
        secondPoint: MapPoint(24.9242722, 67.0794189),

        // 可选参数:地图类型(默认为普通地图)
        mapTypes: MapTypes.satellite,

        // 可选参数:点击地图时的回调函数
        // mapOnTap: (point) {
        //   print(point.toString());
        // },

        // 可选参数:是否启用我的位置按钮
        // myLocationEnabled: true,

        // 可选参数:点击第一个标记时的回调函数
        // markerOneOnTap: () {
        //   print("Marker One Tap");
        // },

        // 可选参数:点击第二个标记时的回调函数
        // markerTwoOnTap: () {
        //   print("Marker Two Tap");
        // },

        // 可选参数:是否显示交通信息
        // trafficEnable: true,

        // 可选参数:第一个标记的信息窗口文本
        // markerOneInfoText: "First Point",

        // 可选参数:第二个标记的信息窗口文本
        // markerTwoInfoText: "Second Point",

        // 可选参数:是否显示第一个标记
        // showMarkerOne: true,

        // 可选参数:是否显示第二个标记
        // showMarkerTwo: true,

        // 可选参数:第一个标记的自定义图标路径
        // firstPointMarkerIcon: 'assets/images/map.png',

        // 可选参数:第二个标记的自定义图标路径
        // secondPointMarkerIcon: 'assets/images/map.png',

        // 可选参数:折线的颜色
        lineColor: Colors.green,

        // 可选参数:折线的宽度
        lineWidth: 10,

        // 可选参数:地图的缩放级别
        mapZoom: 10,

        // 可选参数:第一个标记图标的宽度
        // firstMarkerIconWidth: 120,

        // 可选参数:第二个标记图标的宽度
        // secondMarkerIconWidth: 120,
      ),
    );
  }
}

更多关于Flutter地图路线绘制插件map_polyline_draw的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地图路线绘制插件map_polyline_draw的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用map_polyline_draw插件来绘制地图路线的示例代码。map_polyline_draw插件允许用户在地图上绘制和显示路线。

首先,确保你的Flutter项目中已经添加了map_polyline_draw依赖。在你的pubspec.yaml文件中添加以下依赖:

dependencies:
  flutter:
    sdk: flutter
  map_polyline_draw: ^latest_version  # 请替换为最新的版本号
  google_maps_flutter: ^2.0.6  # 确保也添加了Google Maps Flutter插件

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter应用中,你可以按照以下步骤来绘制地图路线。

  1. 导入必要的包
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:map_polyline_draw/map_polyline_draw.dart';
  1. 定义你的Flutter应用
void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: MapScreen(),
    );
  }
}
  1. 创建地图屏幕
class MapScreen extends StatefulWidget {
  @override
  _MapScreenState createState() => _MapScreenState();
}

class _MapScreenState extends State<MapScreen> {
  GoogleMapController? _controller;
  Set<Polyline> _polylines = {};
  LatLng? _startPoint;
  LatLng? _endPoint;
  final Set<Marker> _markers = {};

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Map Polyline Draw Example'),
      ),
      body: Stack(
        children: <Widget>[
          GoogleMap(
            mapType: MapType.normal,
            initialCameraPosition: CameraPosition(
              target: LatLng(37.4219999, -122.0840575),
              zoom: 13.0,
            ),
            markers: _markers.toSet(),
            polylines: _polylines,
            onMapCreated: (GoogleMapController controller) {
              _controller = controller;
            },
            onLongPress: (LatLng point) {
              if (_startPoint == null) {
                setState(() {
                  _startPoint = point;
                  _markers.add(Marker(
                    markerId: MarkerId('start'),
                    position: point,
                    icon: BitmapDescriptor.defaultMarker,
                  ));
                });
              } else if (_endPoint == null) {
                setState(() {
                  _endPoint = point;
                  _markers.add(Marker(
                    markerId: MarkerId('end'),
                    position: point,
                    icon: BitmapDescriptor.defaultMarkerWithHue(BitmapDescriptor.hueAzure),
                  ));

                  // 使用PolylinePoints计算路线点
                  final polylinePoints = PolylinePoints()
                      .generatePoints(
                    coordinates: [
                      LatLng(
                        _startPoint!.latitude!,
                        _startPoint!.longitude!,
                      ),
                      LatLng(
                        _endPoint!.latitude!,
                        _endPoint!.longitude!,
                      ),
                    ],
                    width: 375,
                    height: 667,
                    points: 100,
                  );

                  Polyline polyline = Polyline(
                    polylineId: PolylineId('polyline'),
                    color: Colors.blue.withOpacity(0.8),
                    width: 4,
                    points: polylinePoints,
                  );

                  setState(() {
                    _polylines.add(polyline);
                  });

                  // 清空起点和终点,以便下次绘制
                  _startPoint = null;
                  _endPoint = null;
                  _markers.clear();
                });
              }
            },
          ),
        ],
      ),
    );
  }
}

在这个示例中,我们使用了google_maps_flutter插件来显示Google地图,并添加了map_polyline_draw的逻辑来绘制路线。我们定义了两个标记(起点和终点),当用户长按地图时,会在地图上添加标记,并计算起点和终点之间的路线。PolylinePoints用于生成路线上的点,这些点随后被用来创建Polyline对象,并将其添加到地图上。

请注意,PolylinePoints并不是map_polyline_draw包的一部分,而是flutter_polyline_points包(或类似库)提供的功能。你可能需要额外添加这个依赖来计算路线上的点。

确保在实际项目中处理错误和异常情况,并根据需要调整UI和逻辑。

回到顶部