Flutter地图路线绘制插件map_polyline_draw的使用
Flutter地图路线绘制插件map_polyline_draw的使用
插件简介
map_polyline_draw
是一个用于在Flutter应用中绘制地图路线的插件。它可以在两个点之间显示地图路线,并允许用户自定义标记图标、折线宽度和颜色。该插件基于 google_maps_flutter
包来集成Google地图,并使用 http
包从Google Maps API获取数据。
屏幕截图
使用方法
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
更多关于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应用中,你可以按照以下步骤来绘制地图路线。
- 导入必要的包:
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:map_polyline_draw/map_polyline_draw.dart';
- 定义你的Flutter应用:
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: MapScreen(),
);
}
}
- 创建地图屏幕:
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和逻辑。