Flutter地图服务插件gebetamap的使用

Flutter地图服务插件gebetamap的使用

使用指南

gebetamap 是一个基于Future的库,用于向GebetaMap发起HTTP请求。该包包含一组高级函数,使从GebetaMap消费HTTP资源变得简单。它支持多平台,包括移动设备、桌面和浏览器。

示例代码

以下是一些使用 gebetamap 插件的基本示例:

导航方向请求
import 'package:gebetamap/gebetamap.dart';

void callDirection() async {
  GebetaMapRequest gmr = new GebetaMapRequest();
  var directionStart = new Map();
  directionStart["lat"] = 9.022528936095531; // 起点纬度
  directionStart["lon"] = 38.80400061607361; // 起点经度
  var directionStop = new Map();
  directionStop["lat"] = 9.021755421022991; // 终点纬度
  directionStop["lon"] = 38.79883468151093; // 终点经度
  String apiKey = ""; // API密钥

  ResponseData rds = await gmr.direction(directionStart, directionStop, apiKey);
  print('Response message: ${rds.message}');
  print('Response status: ${rds.status}');
  print('path: ${rds.path}');
  print('distance: ${rds.totalDistance}');
  print('time: ${rds.totaltime}');
}
旅行商问题(TSP)请求
import 'package:gebetamap/gebetamap.dart';

void callTss() async {
  String apiKey = "";
  List<List<double>> points = [
    [9.005980058445639, 38.785734616513466], // 第一个点的坐标
    [9.01166345564756, 38.789008246478424] // 第二个点的坐标
  ];

  GebetaMapRequest gmr = new GebetaMapRequest();
  ResponseData rds = await gmr.tss(points, apiKey);
  print('Response message: ${rds.message}');
  print('Response status: ${rds.status}');
  print('path: ${rds.path}');
  print('distance: ${rds.totalDistance}');
  print('time: ${rds.totaltime}');
}
一个起点到多个终点的请求
import 'package:gebetamap/gebetamap.dart';

void callOneToMany() async {
  var directionStart = new Map();
  directionStart["lat"] = 9.022528936095531; // 起点纬度
  directionStart["lon"] = 38.80400061607361; // 起点经度
  List<List<double>> points = [
    [9.005980058445639, 38.785734616513466], // 第一个终点坐标
    [9.01166345564756, 38.789008246478424] // 第二个终点坐标
  ];
  String apiKey = ""; // API密钥

  GebetaMapRequest gmr = new GebetaMapRequest();
  List<ResponseData> rs = await gmr.OneToMany(directionStart, points, apiKey);

  for (int i = 0; i < rs.length; i++) {
    print('Response message: ${rs[i].message}');
    print('Response status: ${rs[i].status}');
    print('path: ${rs[i].path}');
    print('distance: ${rs[i].totalDistance}');
    print('time: ${rs[i].totaltime}');
  }
}
地理编码请求
import 'package:gebetamap/gebetamap.dart';

void callGeoCode() async {
  String name = "kotebe 02"; // 地址名称
  String apiKey = ""; // API密钥
  GebetaMapRequest gmr = new GebetaMapRequest();
  ResponseData rs = await gmr.geocode(name, apiKey);
  print(rs.data);
}

完整示例代码

import 'package:gebetamap/gebetamap.dart';

void callDirection() async {
  GebetaMapRequest gmr = new GebetaMapRequest();
  var directionStart = new Map();
  directionStart["lat"] = 9.022528936095531;
  directionStart["lon"] = 38.80400061607361;
  var directionStop = new Map();
  directionStop["lat"] = 9.021755421022991;
  directionStop["lon"] = 38.79883468151093;
  String apiKey = "";

  ResponseData rds = await gmr.direction(directionStart, directionStop, apiKey);
  print('Response message: ${rds.message}');
  print('Response status: ${rds.status}');
  print('path: ${rds.path}');
  print('distance: ${rds.totalDistance}');
  print('time: ${rds.totaltime}');
}

void callTss() async {
  String apiKey = "";
  List<List<double>> points = [
    [9.005980058445639, 38.785734616513466],
    [9.01166345564756, 38.789008246478424]
  ];

  GebetaMapRequest gmr = new GebetaMapRequest();
  ResponseData rds = await gmr.tss(points, apiKey);
  print('Response message: ${rds.message}');
  print('Response status: ${rds.status}');
  print('path: ${rds.path}');
  print('distance: ${rds.totalDistance}');
  print('time: ${rds.totaltime}');
}

void callOneToMany() async {
  var directionStart = new Map();
  directionStart["lat"] = 9.022528936095531;
  directionStart["lon"] = 38.80400061607361;
  List<List<double>> points = [
    [9.005980058445639, 38.785734616513466],
    [9.01166345564756, 38.789008246478424]
  ];
  String apiKey = "";

  GebetaMapRequest gmr = new GebetaMapRequest();
  List<ResponseData> rs = await gmr.OneToMany(directionStart, points, apiKey);

  for (int i = 0; i < rs.length; i++) {
    print('Response message: ${rs[i].message}');
    print('Response status: ${rs[i].status}');
    print('path: ${rs[i].path}');
    print('distance: ${rs[i].totalDistance}');
    print('time: ${rs[i].totaltime}');
  }
}

void callGeoCode() async {
  String name = "kotebe 02";
  String apiKey = "";
  GebetaMapRequest gmr = new GebetaMapRequest();
  ResponseData rs = await gmr.geocode(name, apiKey);
  print(rs.data);
}

void main(List<String> arguments) async {
  // making geocoding request
  //callOneToMany();
  //callGeoCode();
  //callDirection();
  //callTss();
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用gebetamap插件(假设这是一个提供地图服务的Flutter插件,虽然实际中可能并不存在名为gebetamap的官方插件,这里仅作为示例)的示例代码。由于具体的插件实现细节可能有所不同,以下代码基于一个假设的插件接口进行编写。

首先,你需要在pubspec.yaml文件中添加该插件的依赖项(请注意,这里的gebetamap是一个假设的包名,你需要替换为实际的包名):

dependencies:
  flutter:
    sdk: flutter
  gebetamap: ^x.y.z  # 替换为实际的版本号

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

接下来,在你的Flutter项目中,你可以按照以下步骤使用gebetamap插件来显示地图:

  1. 导入插件包
import 'package:gebetamap/gebetamap.dart';
  1. 创建地图控件

在你的Scaffold或者其它布局控件中,添加GebetaMapView控件(假设这是插件提供的用于显示地图的控件)。

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('GebetaMap Example'),
        ),
        body: GebetaMapScreen(),
      ),
    );
  }
}

class GebetaMapScreen extends StatefulWidget {
  @override
  _GebetaMapScreenState createState() => _GebetaMapScreenState();
}

class _GebetaMapScreenState extends State<GebetaMapScreen> {
  late GebetaMapController _mapController;

  @override
  void initState() {
    super.initState();
    // 初始化地图控制器(假设插件提供了这样的控制器)
    _mapController = GebetaMapController(
      initialCameraPosition: CameraPosition(
        target: LatLng(37.7749, -122.4194), // 旧金山
        zoom: 12.0,
      ),
    );
  }

  @override
  Widget build(BuildContext context) {
    return GebetaMapView(
      mapController: _mapController,
      onMapCreated: (controller) {
        // 地图创建完成后的回调,可以用于进一步配置地图
        setState(() {
          _mapController = controller;
        });
      },
    );
  }
}
  1. 处理地图事件(可选):

你可能需要处理一些地图事件,比如标记点击、地图移动等。这通常可以通过设置相应的回调函数来实现。

class _GebetaMapScreenState extends State<GebetaMapScreen> {
  late GebetaMapController _mapController;

  @override
  void initState() {
    super.initState();
    _mapController = GebetaMapController(
      initialCameraPosition: CameraPosition(
        target: LatLng(37.7749, -122.4194),
        zoom: 12.0,
      ),
    );

    // 添加标记(假设插件支持添加标记)
    _mapController.addMarker(
      MarkerOptions(
        position: LatLng(37.7749, -122.4194),
        infoWindowText: InfoWindowText('San Francisco', 'Hello, SF!'),
      ),
    );

    // 监听地图移动事件
    _mapController.onCameraMoveStarted.listen((_) {
      print('Camera move started');
    });

    _mapController.onCameraMoveEnded.listen((_) {
      print('Camera move ended');
    });
  }

  @override
  Widget build(BuildContext context) {
    return GebetaMapView(
      mapController: _mapController,
      onMapCreated: (controller) {
        setState(() {
          _mapController = controller;
        });
      },
    );
  }
}

请注意,上述代码是一个假设性的示例,实际的gebetamap插件可能有不同的API和实现方式。因此,你需要查阅该插件的官方文档或源代码来了解其具体的用法和API。如果gebetamap实际上是一个不存在的插件名,你可能需要替换为其他实际存在的地图服务插件,如google_maps_flutterflutter_map等。

回到顶部