Flutter地图搜索功能插件tld_amapsearch的使用
Flutter地图搜索功能插件tld_amapsearch的使用
介绍
高德地图插件的封装,在官方基础上增加查询控件,可以实现以下功能:
主要功能
- 增加地图查询功能,查询功能如下:
- (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
更多关于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');
}
}

