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

1 回复

更多关于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'),
                  ),
                ],
              ),
      ),
    );
  }
}
回到顶部