Flutter地图服务插件mapbox_api_pro的使用

Flutter地图服务插件mapbox_api_pro的使用

本包旨在:

示例

查看examples/以获取所有可用示例。

import 'package:mapbox_api_pro/mapbox_api_pro.dart';

MapboxApi mapbox = MapboxApi(
  accessToken: '<Mapbox API token>',
);

获取您的API令牌,请访问mapbox.com

请求方向服务

final response = await mapbox.directions.request(
  profile: NavigationProfile.DRIVING_TRAFFIC,
  overview: NavigationOverview.FULL,
  geometries: NavigationGeometries.GEOJSON,
  steps: true,
  coordinates: <List<double>>[
    <double>[
      37.786060, // 纬度
      -122.246225, // 经度
    ],
    <double>[
      37.785939, // 纬度
      -122.194292, // 经度
    ],
  ],
);

if (response.error == null) {
  // response.routes ...
  // response.waypoints ...
}

查看基本示例:example/example.dart 查看完整的Flutter GL示例:example/example_directions_flutter.dart

请求正向地理编码服务

final response = await mapbox.forwardGeocoding.request(
  searchText: 'tour eiffel',
  fuzzyMatch: true,
  language: 'fr',
  proximity: <double>[
    48.858638, // 纬度
    2.286020, // 经度
  ],
);

if (response.error == null) {
  // response.features ...
}

查看完整示例:example/example_forward_search.dart

支持的API

地图

服务 已实现
Vector Tiles ✖️
Taster Tiles ✖️
Static Images ✖️
Static Tiles ✖️
Styles ✖️
Tilequery ✖️
Uploads ✖️
Mapbox Tiling Service ✖️
Datasets ✖️
Fonts ✖️

导航

服务 已实现 示例
Directions example/example.dart
example/example_directions_flutter.dart
Isochrone
Map Matching
Matrix
Optimization

搜索

服务 已实现 批量 示例
Forward Geocoding example/example_forward_search.dart
Reverse Geocoding example/example_reverse_search.dart
Intersection ✖️ example/example_intersection_search.dart

账户

服务 已实现
Tokens ✖️

相关包

该SDK将与mapbox_maps_flutter完美配合以显示检索到的数据(也可以与其他任何包一起使用)。您可能还需要polyline包来将多段线字符串转换为坐标。


完整示例代码

以下是一个完整的示例代码,展示了如何使用mapbox_api_pro插件请求方向服务并处理响应。

import 'package:mapbox_api_pro/mapbox_api_pro.dart';

void main() async {
  /**
   * 获取您的Mapbox API令牌,请访问 https://www.mapbox.com/
   */
  final mapbox = MapboxApi(
    accessToken: '<Mapbox API token>',
  );

  /**
   * 这里是一个简单的HTTPS调用到方向API。
   * 所有参数都符合官方文档
   * 并在 https://docs.mapbox.com/api/ 中描述
   *
   * 可用API:
   *  - mapbox.directions
   *  - mapbox.isochrome
   *  - mapbox.mapMatching
   *  - mapbox.matrix
   *  - mapbox.optimization
   *  - mapbox.forwardGeocoding
   *  - mapbox.reverseGeocoding
   *  - mapbox.intersection
   *
   */
  final response = await mapbox.directions.request(
    profile: NavigationProfile.DRIVING_TRAFFIC,
    overview: NavigationOverview.FULL,
    geometries: NavigationGeometries.GEOJSON,
    steps: true,
    coordinates: <List<double>>[
      <double>[
        37.786060, // 纬度
        -122.246225, // 经度
      ],
      <double>[
        37.785939, // 纬度
        -122.194292, // 经度
      ],
    ],
  );

  if (response.error != null) {
    if (response.error is NavigationNoRouteError) {
      // 处理无路线响应
    } else if (response.error is NavigationNoSegmentError) {
      // 处理无段落响应
    }

    return;
  }

  if (response.routes!.isNotEmpty) {
    final route = response.routes![0];
    final eta = Duration(
      seconds: route.duration!.toInt(),
    );
    print(eta.toString());
  }
}

更多关于Flutter地图服务插件mapbox_api_pro的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用mapbox_api_pro插件来集成Mapbox地图服务的示例代码。这个示例将展示如何初始化Mapbox地图,并在地图上显示一个标记(Marker)。

首先,确保你已经在pubspec.yaml文件中添加了mapbox_api_pro依赖:

dependencies:
  flutter:
    sdk: flutter
  mapbox_api_pro: ^latest_version  # 请替换为实际的最新版本号

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

接下来,你需要获取Mapbox的访问令牌(Access Token)。你可以在Mapbox官网注册并创建一个API访问令牌。

以下是一个完整的Flutter应用示例,展示了如何使用mapbox_api_pro插件:

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

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> {
  MapboxController? _controller;

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Mapbox Map Example'),
      ),
      body: MapboxMap(
        accessToken: 'YOUR_MAPBOX_ACCESS_TOKEN',  // 请替换为你的Mapbox访问令牌
        initialCameraPosition: CameraPosition(
          target: LatLng(40.7128, -74.0060), // 初始位置:纽约市
          zoom: 11.0,
        ),
        onMapCreated: (MapboxController controller) {
          _controller = controller;
          _addMarker();
        },
      ),
    );
  }

  void _addMarker() {
    if (_controller != null) {
      _controller!.addMarker(
        MarkerOptions(
          point: LatLng(40.7128, -74.0060), // 标记位置:纽约市
          builder: (context) => Container(
            child: Icon(Icons.location_on, color: Colors.red,),
          ),
        ),
      );
    }
  }
}

在这个示例中,我们做了以下几件事:

  1. 引入必要的包:我们导入了flutter/material.dartmapbox_api_pro/mapbox_api_pro.dart
  2. 创建Flutter应用:我们创建了一个简单的Flutter应用,包含一个MapScreen页面。
  3. 初始化Mapbox地图:在MapboxMap小部件中,我们设置了Mapbox的访问令牌和初始相机位置。
  4. 添加标记:当地图创建完成时,我们通过onMapCreated回调获取MapboxController,并使用它来添加一个标记。

请注意,你需要将YOUR_MAPBOX_ACCESS_TOKEN替换为你自己的Mapbox访问令牌。

这个示例提供了一个基本的起点,你可以根据需要进一步扩展功能,比如添加更多的标记、更改地图样式、处理用户交互等。Mapbox提供了丰富的API和文档,可以帮助你实现各种高级功能。

回到顶部