Flutter 调用高德地图APP实现位置搜索、路线规划、逆地理编码

这篇博客介绍了如何在Flutter应用中集成高德地图API,实现调起地图进行位置搜索和导航。首先在`pubspec.yaml`配置文件中添加`url_launcher`依赖,并在iOS的`info.plist`配置允许访问地图。接着展示了调用高德地图进行反地理编码和导航的代码示例,特别提到了坐标类型的正确选择,以避免位置偏移。最后,博客中使用了GetX框架展示提示框。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 开发准备

pubspec.yaml 配置文件中添加插件

dependencies:
  flutter:
    sdk: flutter
  url_launcher: ^6.1.2

iOS 配置 info.plist

<key>LSApplicationQueriesSchemes</key>
<array>
	<string>iosamap</string>
	<string>baidumap</string>
</array>

2 Flutter 调起高德地图 - 搜索位置 逆地理编码

高德地图开发文档

     static Future<bool> openAmap(
      double longitude,
      double latitude, {
        String? address,
        String? title,
        bool showErr = true,
      }) async {
    String url =
        '${Platform.isAndroid ? 'android' : 'ios'}amap://viewReGeo?sourceApplication=${title??""}&lat=$latitude&lon=$longitude&dev=0';
    if (Platform.isIOS) url = Uri.encodeFull(url);
    try {
      if (await canLaunchUrlString(url)) {
        await launchUrlString(url);
        return true;
      } else {
        if (showErr) showToastCommon('无法调起高德地图');
        return false;
      }
    } on Exception catch (e) {
      if (showErr) showToastCommon('无法调起高德地图');
      return false;
    }
  }

实际上是调用的高德地图开放api 反向地址解析
在这里插入图片描述

调起的结果如下 :
在这里插入图片描述

3 坐标类型选择

需要注意的是 dev 坐标类型的取值

  • 0 使用经纬度是已经加密后的,不需要国测加密;
  • 1 使用经纬度是未加密的,需要国测加密;

如果不传递正确的坐标类型参数,会导致地点坐标位置偏移。默认为bd09经纬度坐标。

4 Flutter 调起高德地图 - 导航 路线规划

高德地图开发文档

/// 高德地图调用 导航
  static Future<bool> openAmapNav(
    double longitude,
    double latitude, {
    String? address,
    bool showErr = true,
  }) async {
    String url =
        '${Platform.isAndroid ? 'android' : 'ios'}amap://navi?sourceApplication=amap&lat=$latitude&lon=$longitude&dev=0&style=2&poiname=${address ?? ''}';
    if (Platform.isIOS) url = Uri.encodeFull(url);
    try {
      if (await canLaunchUrlString(url)) {
        await launchUrlString(url);
        return true;
      } else {
        if (showErr) showToastCommon('无法调起高德地图');
        return false;
      }
    } on Exception catch (e) {
      if (showErr) showToastCommon('无法调起高德地图');
      return false;
    }
  }

实际上是调用的
在这里插入图片描述

5 提示框使用的是 GetX 框架
  static showToastCommon(String message) {
    Get.defaultDialog(
        title: "提示",
        middleText: message,
        backgroundColor: Colors.white,
        titleStyle: const TextStyle(color: Colors.black),
        middleTextStyle: const TextStyle(color: Colors.red),
        textConfirm: "知道了",
        confirmTextColor: Colors.white,
        onConfirm: () {
          Get.back();
        },
        radius: 8);
  }
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

早起的年轻人

创作源于分享

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值