Dart 语言 地图标记与路线规划示例

Dart阿木 发布于 2025-06-19 12 次阅读


Dart 语言地图标记与路线规划示例

随着移动设备和互联网的普及,地图应用已经成为人们日常生活中不可或缺的一部分。在 Dart 语言中,我们可以利用现有的地图库来实现地图标记和路线规划功能。本文将围绕这一主题,通过一个示例代码,展示如何在 Dart 中实现地图标记和路线规划。

环境准备

在开始编写代码之前,我们需要准备以下环境:

1. Dart SDK:从 [Dart官网](https://dart.dev/) 下载并安装 Dart SDK。

2. 编辑器:推荐使用 Dart 官方推荐的编辑器 Dart Editor 或其他支持 Dart 的编辑器,如 Visual Studio Code。

3. 地图库:选择一个支持 Dart 的地图库,如 Google Maps Flutter 插件。

示例代码

以下是一个简单的 Dart 示例,展示如何在 Flutter 应用中实现地图标记和路线规划。

1. 创建 Flutter 项目

使用命令行创建一个新的 Flutter 项目:

bash

flutter create map_example


cd map_example


2. 添加依赖

在 `pubspec.yaml` 文件中添加 Google Maps Flutter 插件的依赖:

yaml

dependencies:


flutter:


sdk: flutter


google_maps_flutter: ^2.0.6


然后运行 `flutter pub get` 命令安装依赖。

3. 实现地图标记

在 `lib/main.dart` 文件中,编写以下代码实现地图标记功能:

dart

import 'package:flutter/material.dart';


import 'package:google_maps_flutter/google_maps_flutter.dart';

void main() {


runApp(MyApp());


}

class MyApp extends StatelessWidget {


@override


Widget build(BuildContext context) {


return MaterialApp(


title: 'Map Example',


theme: ThemeData(


primarySwatch: Colors.blue,


),


home: MapScreen(),


);


}


}

class MapScreen extends StatefulWidget {


@override


_MapScreenState createState() => _MapScreenState();


}

class _MapScreenState extends State<MapScreen> {


GoogleMapController? _controller;


final Set<Marker> _markers = {};

@override


Widget build(BuildContext context) {


return Scaffold(


appBar: AppBar(


title: Text('Map Example'),


),


body: GoogleMap(


onMapCreated: _onMapCreated,


initialCameraPosition: CameraPosition(


target: LatLng(37.7749, -122.4194), // 设置初始位置为旧金山


zoom: 10.0,


),


markers: _markers,


),


floatingActionButton: FloatingActionButton(


onPressed: _addMarker,


tooltip: 'Add Marker',


child: Icon(Icons.add_location),


),


);


}

void _onMapCreated(GoogleMapController controller) {


_controller = controller;


}

void _addMarker() {


final markerId = MarkerId('marker_1');


final marker = Marker(


markerId: markerId,


position: LatLng(37.7749, -122.4194), // 设置标记位置


infoWindow: InfoWindow(


title: 'Marker Title',


snippet: 'Marker Description',


),


);


setState(() {


_markers.add(marker);


});


}


}


4. 实现路线规划

为了实现路线规划,我们需要使用 Google Maps API 的 Directions API。以下是如何在 Dart 中调用 Directions API 的示例代码:

dart

import 'package:google_maps_flutter/google_maps_flutter.dart';


import 'package:http/http.dart' as http;

Future<List<LatLng>> getRoute(List<LatLng> points) async {


final apiKey = 'YOUR_API_KEY'; // 替换为你的 Google Maps API 密钥


final url = Uri.parse(


'https://maps.googleapis.com/maps/api/directions/json?origin=${points[0].latitude},${points[0].longitude}&destination=${points[1].latitude},${points[1].longitude}&key=$apiKey',


);

final response = await http.get(url);


if (response.statusCode == 200) {


final data = json.decode(response.body);


final routes = data['routes'];


final points = routes[0]['legs'][0]['steps']


.map((step) => LatLng(step['end_location']['lat'], step['end_location']['lng']))


.toList();


return points;


} else {


throw Exception('Failed to load route');


}


}


在 `MapScreen` 状态类中,我们可以添加一个按钮来触发路线规划:

dart

FloatingActionButton(


onPressed: _drawRoute,


tooltip: 'Draw Route',


child: Icon(Icons.directions_car),


),


然后在 `_drawRoute` 方法中调用 `getRoute` 函数,并使用 `Polyline` 绘制路线:

dart

void _drawRoute() async {


final points = [


LatLng(37.7749, -122.4194), // 起点位置


LatLng(37.7749, -122.4194), // 终点位置


];


final routePoints = await getRoute(points);


final polylineId = PolylineId('polyline_1');


final polyline = Polyline(


polylineId: polylineId,


points: routePoints,


color: Colors.red,


width: 5,


);


setState(() {


_markers.add(Marker(


markerId: MarkerId('start'),


position: points[0],


));


_markers.add(Marker(


markerId: MarkerId('end'),


position: points[1],


));


_markers.add(polyline);


});


}


总结

本文通过一个 Dart 示例,展示了如何在 Flutter 应用中实现地图标记和路线规划。通过使用 Google Maps Flutter 插件和 Directions API,我们可以轻松地实现这些功能。这只是地图应用开发的一个基础示例,实际应用中可能需要更复杂的逻辑和功能。希望本文能帮助你入门 Dart 地图开发。