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 ...
}
支持的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
更多关于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,),
),
),
);
}
}
}
在这个示例中,我们做了以下几件事:
- 引入必要的包:我们导入了
flutter/material.dart
和mapbox_api_pro/mapbox_api_pro.dart
。 - 创建Flutter应用:我们创建了一个简单的Flutter应用,包含一个
MapScreen
页面。 - 初始化Mapbox地图:在
MapboxMap
小部件中,我们设置了Mapbox的访问令牌和初始相机位置。 - 添加标记:当地图创建完成时,我们通过
onMapCreated
回调获取MapboxController
,并使用它来添加一个标记。
请注意,你需要将YOUR_MAPBOX_ACCESS_TOKEN
替换为你自己的Mapbox访问令牌。
这个示例提供了一个基本的起点,你可以根据需要进一步扩展功能,比如添加更多的标记、更改地图样式、处理用户交互等。Mapbox提供了丰富的API和文档,可以帮助你实现各种高级功能。