Flutter地图搜索功能插件tld_amapsearch的使用

Flutter地图搜索功能插件tld_amapsearch的使用

介绍

高德地图插件的封装,在官方基础上增加查询控件,可以实现以下功能:

主要功能

  1. 增加地图查询功能,查询功能如下:
    • (1)关键字检索 POI
    • (2)周边检索 POI
    • (3)天气检索
    • (4)地理编码(地址转坐标)
    • (5)逆地理编码(坐标转地址)

安装教程

pubspec.yaml 文件中添加依赖:

tld_amap_search: ^last_version

然后运行 flutter pub get

使用说明

1. 导入插件

在项目中导入插件:

import 'package:tld_amapsearch/tld_amapSearch.dart';

2. 权限配置

在官方 SDK 上重新封装过,如需使用,可单独引入。定位权限配置,使用第三方 permission_handler 动态权限工具,使用方法请参考 permission_handler 文档。

3. 使用示例

初始化高德地图 Key

初始化高德地图的 API Key:

/// 初始化高德key
Future<void> initAmapKey() async {
  bool result = 
      await TldAmapSearch.initKey(androidKey: '安卓key', iosKey: '苹果key');
  print(result); // 输出是否成功
}

设置隐私权限

设置隐私协议,确保符合法律法规:

/// 设置隐私权限
void setPrivacy() async {
  await TldAmapSearch.updatePrivacyShow(hasShow: true, hasContains: true);
  await TldAmapSearch.updatePrivacyAgree(hasAgree: true);
}

周边范围搜索

根据经纬度进行周边范围搜索:

/// 周边范围搜索
void searchAround() async {
  await TldAmapSearch.searchAround(
      longitude: 106.642904, // 经度
      latitude: 26.653841,   // 纬度
      back: (code, SearchResult data) {
        print(data); // 打印搜索结果
      });
}

关键字搜索

根据关键字进行搜索:

/// 关键字搜索
void searchkeyword() async {
  await TldAmapSearch.searchKeyword(
      keyWord: '万达广场', // 搜索关键词
      back: (code, SearchResult data) {
        print(data); // 打印搜索结果
      });
}

天气查询

查询当前城市的实时天气和预报:

/// 天气查询
void searchWeather() async {
  await TldAmapSearch.weatherSearch(
      city: '北京市', // 城市名称
      isLive: true,  // 是否查询实时天气
      liveBack: (code, LiveResult result) {
        print(result); // 打印实时天气结果
      },
      foreBack: (code, ForeCastResult result) {
        print(result); // 打印天气预报结果
      });
}

地理编码与逆地理编码

将地址转为经纬度或从经纬度转为地址:

// 地理编码
void geocode() async {
  // 地理编码
  await TldAmapSearch.geocoding(address: "北京市", back: (code, data) {});

  // 逆地理编码
  await TldAmapSearch.reGeocoding(
      longitude: 106.642904, // 经度
      latitude: 26.653841,   // 纬度
      back: (code, data) {});
}

示例代码

以下是一个完整的示例代码,展示了如何使用 tld_amapsearch 插件:

// ignore_for_file: prefer_const_constructors

import 'package:flutter/material.dart';
import 'package:tld_amapsearch/forecast_result.dart';
import 'package:tld_amapsearch/live_result.dart';
import 'dart:async';
import 'package:tld_amapsearch/poiresult.dart';
import 'package:tld_amapsearch/tld_amapsearch.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initAmapKey(); // 初始化高德地图 Key
    setPrivacy();  // 设置隐私权限
  }

  /// 初始化高德key
  Future<void> initAmapKey() async {
    bool result = 
        await TldAmapSearch.initKey(androidKey: '安卓key', iosKey: '苹果key');
    print(result); // 输出是否成功
  }

  /// 设置隐私权限
  setPrivacy() async {
    await TldAmapSearch.updatePrivacyShow(hasShow: true, hasContains: true);
    await TldAmapSearch.updatePrivacyAgree(hasAgree: true);
  }

  /// 周边范围搜索
  void searchAround() async {
    await TldAmapSearch.searchAround(
        longitude: 106.642904, // 经度
        latitude: 26.653841,   // 纬度
        back: (code, SearchResult data) {
          print(data); // 打印搜索结果
        });
  }

  /// 关键字搜索
  void searchkeyword() async {
    await TldAmapSearch.searchKeyword(
        keyWord: '万达广场', // 搜索关键词
        back: (code, SearchResult data) {
          print(data); // 打印搜索结果
        });
  }

  /// 天气查询
  void searchWeather() async {
    await TldAmapSearch.weatherSearch(
        city: '北京市', // 城市名称
        isLive: true,  // 是否查询实时天气
        liveBack: (code, LiveResult result) {
          print(result); // 打印实时天气结果
        },
        foreBack: (code, ForeCastResult result) {
          print(result); // 打印天气预报结果
        });
  }

  // 地理编码
  void geocode() async {
    // 地理编码
    await TldAmapSearch.geocoding(address: "北京市", back: (code, data) {});
    // 逆地理编码
    await TldAmapSearch.reGeocoding(
        longitude: 106.642904, // 经度
        latitude: 26.653841,   // 纬度
        back: (code, data) {});
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('高德地图搜索功能示例'),
        ),
        body: Center(
          child: Column(
            children: [
              TextButton(child: Text('周边范围搜索'), onPressed: searchAround),
              SizedBox(height: 50),
              TextButton(child: Text('关键字搜索'), onPressed: searchkeyword),
              SizedBox(height: 50),
              TextButton(child: Text('天气查询'), onPressed: searchWeather),
            ],
          ),
        ),
      ),
    );
  }
}

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

1 回复

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


tld_amapsearch 是一个用于在 Flutter 应用中集成高德地图搜索功能的插件。它允许你在应用中进行地点搜索、POI(兴趣点)搜索、地理编码和逆地理编码等操作。以下是如何使用 tld_amapsearch 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 tld_amapsearch 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  tld_amapsearch: ^版本号

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

2. 配置高德地图 SDK

在使用 tld_amapsearch 之前,你需要在 高德开放平台 注册并创建一个应用,获取你的 API Key

Android 配置

android/app/src/main/AndroidManifest.xml 文件中添加以下配置:

<application>
    <meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="你的API Key"/>
</application>

iOS 配置

ios/Runner/Info.plist 文件中添加以下配置:

<key>AMapServices</key>
<dict>
    <key>APIKey</key>
    <string>你的API Key</string>
</dict>

3. 初始化插件

在你的 Dart 代码中,首先需要初始化 tld_amapsearch 插件:

import 'package:tld_amapsearch/tld_amapsearch.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await TldAmapSearch.setApiKey('你的API Key');
  runApp(MyApp());
}

4. 使用搜索功能

tld_amapsearch 提供了多种搜索功能,以下是一些常见的使用示例:

关键字搜索

import 'package:tld_amapsearch/tld_amapsearch.dart';

void searchKeyword() async {
  var result = await TldAmapSearch.searchKeyword(
    keyword: '餐厅',
    city: '北京',
  );
  print(result);
}

POI 搜索

import 'package:tld_amapsearch/tld_amapsearch.dart';

void searchPoi() async {
  var result = await TldAmapSearch.searchPoi(
    query: '酒店',
    city: '上海',
  );
  print(result);
}

地理编码(地址转坐标)

import 'package:tld_amapsearch/tld_amapsearch.dart';

void geocode() async {
  var result = await TldAmapSearch.geocode(
    address: '北京市朝阳区望京SOHO',
    city: '北京',
  );
  print(result);
}

逆地理编码(坐标转地址)

import 'package:tld_amapsearch/tld_amapsearch.dart';

void regeocode() async {
  var result = await TldAmapSearch.regeocode(
    latitude: 39.90469,
    longitude: 116.40717,
  );
  print(result);
}

5. 处理搜索结果

搜索结果通常是一个包含多个 POI 信息的列表,你可以根据需要进行处理和展示。例如:

void handleSearchResult(List<Poi> pois) {
  for (var poi in pois) {
    print('名称: ${poi.name}');
    print('地址: ${poi.address}');
    print('坐标: ${poi.latitude}, ${poi.longitude}');
  }
}

6. 错误处理

在使用 tld_amapsearch 时,可能会遇到一些错误,例如网络问题或 API 调用失败。你可以使用 try-catch 来捕获和处理这些错误:

void searchWithErrorHandling() async {
  try {
    var result = await TldAmapSearch.searchKeyword(
      keyword: '餐厅',
      city: '北京',
    );
    print(result);
  } catch (e) {
    print('搜索失败: $e');
  }
}
回到顶部