Flutter旅行路线规划插件trip_routing的使用
Flutter旅行路线规划插件trip_routing的使用
trip_routing
是一个用于客户端旅行路线规划的 Flutter 包,支持多个途经点,并且优化了行人导航。它使用 Overpass API 在途经点的边界框内获取所有相关路径,并计算出这些点之间的最优路线。输出是一个包含 LatLng
点列表的详细多段线路线,可以无缝集成到 Flutter 地图应用中。
该包已经准备好投入生产环境,并且为 AI 旅行应用 Worldbummlr 提供支持。
主要功能
- 客户端路由:直接在客户端进行路由计算,无需外部依赖。
- 离线能力:缓存特定城市的路由数据,以便离线使用。
- 获取建筑入口:通过自动获取与建筑物相关的途经点的入口来增强行人路径的精度。
- 优化用于行人:优先选择步行路径和行人友好的路线。
- 可定制路由:可以微调路由偏好,例如包括重复路径或强制途经点包含在最终路线中。
安装
将以下内容添加到你的 Flutter 应用的 pubspec.yaml
文件中:
dependencies:
trip_routing: <latest>
然后运行:
flutter pub get
使用
下面是一个基本示例,演示如何使用该包计算路线:
import 'package:trip_routing/trip_routing.dart';
import 'package:latlong2/latlong.dart';
final waypoints = [
const LatLng(50.77437074991441, 6.075419266272186),
const LatLng(50.774717242584515, 6.083980842518867),
];
final routing = TripService();
try {
final trip = await routing.findTotalTrip(
waypoints,
preferWalkingPaths: true,
replaceWaypointsWithBuildingEntrances: true,
);
print('Calculated route: ${trip.route}');
print('Distance: ${trip.distance} meters');
print('Errors: ${trip.errors}');
} catch (e) {
print('Error calculating route: $e');
}
findTotalTrip
参数
waypoints
(List<LatLng>)
: 计算路线的位置(纬度和经度)。preferWalkingPaths
(bool)
: 是否优先选择步行路径。默认值:true
。replaceWaypointsWithBuildingEntrances
(bool)
: 是否用建筑入口替换途经点(如果可用)。默认值:false
。forceIncludeWaypoints
(bool)
: 是否强制将途经点包含在最终路线中,即使它们不在道路上。默认值:false
。duplicationPenalty
(double?)
: 一个惩罚项,用于避免路径重复。默认值:null
。
离线路由
你可以将特定城市的路由数据保存到磁盘上,以实现离线路由。初始化离线路由时,调用 useCity
函数:
final routing = TripService();
await routing.useCity('Aachen');
更多关于Flutter旅行路线规划插件trip_routing的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter旅行路线规划插件trip_routing的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
trip_routing
是一个用于 Flutter 应用中的旅行路线规划插件。它可以帮助开发者轻松集成路线规划功能,提供从起点到终点的导航路线。以下是使用 trip_routing
插件的基本步骤和示例代码。
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 trip_routing
插件的依赖:
dependencies:
flutter:
sdk: flutter
trip_routing: ^1.0.0 # 请根据实际情况使用最新版本
然后运行 flutter pub get
来获取依赖。
2. 导入插件
在需要使用 trip_routing
的 Dart 文件中导入插件:
import 'package:trip_routing/trip_routing.dart';
3. 使用插件进行路线规划
trip_routing
插件通常提供了一些方法来计算路线、显示地图等。以下是一个简单的示例,展示如何使用 trip_routing
进行路线规划:
import 'package:flutter/material.dart';
import 'package:trip_routing/trip_routing.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: TripRoutingExample(),
);
}
}
class TripRoutingExample extends StatefulWidget {
[@override](/user/override)
_TripRoutingExampleState createState() => _TripRoutingExampleState();
}
class _TripRoutingExampleState extends State<TripRoutingExample> {
TripRouting _tripRouting = TripRouting();
List<LatLng> _routePoints = [];
bool _isLoading = false;
Future<void> _calculateRoute() async {
setState(() {
_isLoading = true;
});
// 定义起点和终点
LatLng start = LatLng(37.7749, -122.4194); // 例如:旧金山
LatLng end = LatLng(34.0522, -118.2437); // 例如:洛杉矶
// 计算路线
_routePoints = await _tripRouting.getRoute(start, end);
setState(() {
_isLoading = false;
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Trip Routing Example'),
),
body: Center(
child: _isLoading
? CircularProgressIndicator()
: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
if (_routePoints.isNotEmpty)
Text('Route calculated with ${_routePoints.length} points'),
ElevatedButton(
onPressed: _calculateRoute,
child: Text('Calculate Route'),
),
],
),
),
);
}
}