Flutter地理位置定位插件what3words的使用
Flutter地理位置定位插件what3words的使用
介绍
what3words
是一个将全球任何位置转换为三个单词的地理编码系统。这个插件 w3w-dart-wrapper
提供了对 what3words v3 API
的 Dart 封装,使得在 Flutter 应用中使用 what3words
变得非常简单。
安装
首先,你需要在 pubspec.yaml
文件中添加 what3words
依赖:
dependencies:
what3words: 3.2.0
然后运行 flutter pub get
来安装依赖。
获取 API Key
要使用 what3words API
,你需要一个 API Key。你可以通过访问 what3words 官方网站 注册并获取 API Key。
使用
导入库
在你的 Dart 文件中导入 what3words
库:
import 'package:what3words/what3words.dart';
初始化 API
使用你的 API Key 初始化 What3WordsV3
实例:
var api = What3WordsV3('your-api-key');
如果你有自己的 Enterprise Suite API Server
,可以指定自定义的 URL 和头部信息:
var api = What3WordsV3.withEndpoint(
'your-api-key',
'https://api.yourserver.com');
var api = What3WordsV3.withHeaders(
'your-api-key',
'https://api.yourserver.com',
{'x-header-1': 'value-1', 'x-header-2': 'value-2'});
转换坐标为 what3words 地址
将经纬度坐标转换为 what3words
地址:
var words = await api
.convertTo3wa(Coordinates(51.508344, -0.12549900))
.language('en')
.execute();
print('Words: ${words.data()?.toJson()}');
转换 what3words 地址为坐标
将 what3words
地址转换为经纬度坐标:
var coordinates = await api
.convertToCoordinates('table.book.chair')
.execute();
print('Coordinates: ${coordinates.data()?.toJson()}');
自动建议
当用户输入不正确的 what3words
地址时,AutoSuggest
可以返回一系列可能的正确地址。它需要至少两个单词和第三个单词的第一个字符来生成建议。
var autosuggest = await api
.autosuggest('fun.with.code')
.nResults(3)
.execute();
print('Autosuggest: ${autosuggest.data()?.toJson()}');
你还可以通过限制结果范围来提高建议的准确性:
var autosuggest = await api
.autosuggest('fun.with.code')
.clipToCountry(['gb', 'be'])
.execute();
print('Autosuggest: ${autosuggest.data()?.toJson()}');
或者设置焦点位置:
var autosuggest = await api
.autosuggest('fun.with.code')
.focus(Coordinates(51.4243877, -0.34745))
.execute();
print('Autosuggest: ${autosuggest.data()?.toJson()}');
获取网格部分
获取一个区域内的 what3words
网格部分:
var gridSection = await api
.gridSection(Coordinates(51.515900, -0.212517), Coordinates(51.527649, -0.191746))
.execute();
print('Grid Section: ${gridSection.data()?.toJson()}');
获取支持的语言
获取当前支持的所有语言:
var languages = await api
.availableLanguages()
.execute();
print('Languages: ${languages.data()?.toJson()}');
处理错误
检查 API 请求是否成功,并处理错误:
var autosuggest = await api
.autosuggest('freshen.overlook.clo')
.clipToCountry(['fr', 'de'])
.execute();
if (autosuggest.isSuccessful()) {
// 处理成功情况
} else {
var error = autosuggest.getError();
if (error == What3WordsError.BAD_CLIP_TO_COUNTRY) {
// 无效的国家限制
print('BadClipToCountry: ${error.message}');
}
}
正则表达式函数
这些函数可以帮助你检测和查找字符串中的 what3words
地址。
isPossible3wa
检测字符串是否可能是 what3words
地址:
void main() async {
var api = What3WordsV3('your-api-key');
List<String> addresses = ["filled.count.soap", "not a 3wa", "not.3wa address"];
for (String address in addresses) {
bool isPossible = api.isPossible3wa(address);
print("Is '$address' a possible what3words address? $isPossible");
}
}
findPossible3wa
在文本中查找可能的 what3words
地址:
void main() async {
var api = What3WordsV3('your-api-key');
List<String> texts = [
"Please leave by my porch at filled.count.soap",
"Please leave by my porch at filled.count.soap or deed.tulip.judge",
"Please leave by my porch at"
];
for (String text in texts) {
List<String> possibleAddresses = api.findPossible3wa(text);
print("Possible what3words addresses in '$text': $possibleAddresses");
}
}
isValid3wa
验证字符串是否是有效的 what3words
地址:
void main() async {
var api = What3WordsV3('your-api-key');
List<String> w3w_addresses = [
"filled.count.soap",
"filled.count.",
"coding.is.cool"
];
for (String w3w_address in w3w_addresses) {
var response = await api.isValid3wa(w3w_address);
if (response.isSuccessful() && response.isValid == true) {
print("$w3w_address is a valid what3words address");
} else if (response.isSuccessful() && response.isValid == false) {
print("$w3w_address is an invalid what3words address");
} else {
print("isValid3wa error: ${response.error?.code} - ${response.error?.message}");
}
}
}
示例代码
以下是一个完整的示例代码,展示了如何使用 what3words
插件进行基本的地理编码和反向地理编码操作:
import 'package:what3words/what3words.dart';
void main() async {
// 替换为你的实际 API Key
var api = What3WordsV3('your-api-key');
// 将坐标转换为 what3words 地址
var words = await api
.convertTo3wa(Coordinates(51.508344, -0.12549900))
.language('en')
.execute();
print('Words: ${words.data()?.toJson()}');
// 将 what3words 地址转换为坐标
var coordinates = await api
.convertToCoordinates('table.book.chair')
.execute();
print('Coordinates: ${coordinates.data()?.toJson()}');
// 自动建议
var autosuggest = await api
.autosuggest('fun.with.code')
.nResults(3)
.execute();
print('Autosuggest: ${autosuggest.data()?.toJson()}');
// 获取网格部分
var gridSection = await api
.gridSection(Coordinates(51.515900, -0.212517), Coordinates(51.527649, -0.191746))
.execute();
print('Grid Section: ${gridSection.data()?.toJson()}');
// 获取支持的语言
var languages = await api
.availableLanguages()
.execute();
print('Languages: ${languages.data()?.toJson()}');
}
故障排除
如果你在使用免费计划时遇到 convert-to-coordinate
请求的错误,请检查网络面板中的错误消息 Error 402 payment required
,这表示你需要升级到更高的计划:
{
"error": {
"code": "QuotaExceeded",
"message": "Quota Exceeded. Please upgrade your usage plan, or contact support@what3words.com"
}
}
更多详细信息,请访问 what3words API 计划页面。如果需要进一步的帮助,请联系 support@what3words.com。
希望这些信息对你有所帮助!如果你有任何问题或需要进一步的帮助,请随时提问。
更多关于Flutter地理位置定位插件what3words的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地理位置定位插件what3words的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中集成地理位置定位插件what3words,你可以使用what3words_flutter
包。这个包允许你使用what3words服务来进行地理位置的编码和解码。以下是一个基本的代码示例,展示了如何在Flutter应用中实现这一功能。
首先,你需要在pubspec.yaml
文件中添加what3words_flutter
依赖:
dependencies:
flutter:
sdk: flutter
what3words_flutter: ^latest_version # 请替换为实际的最新版本号
然后运行flutter pub get
来安装依赖。
接下来,你需要获取what3words的API密钥。你可以通过what3words的官方网站注册并获取API密钥。
以下是一个简单的Flutter应用示例,展示如何使用what3words插件:
import 'package:flutter/material.dart';
import 'package:what3words_flutter/what3words_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'What3Words Example',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
@override
_MyHomePageState createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
final What3Words _what3Words = What3Words();
String _threeWords = '';
String _address = '';
String _latitude = '';
String _longitude = '';
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('What3Words Example'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
TextField(
decoration: InputDecoration(labelText: 'Enter 3 words'),
onChanged: (value) {
setState(() {
_threeWords = value;
});
},
),
SizedBox(height: 16),
ElevatedButton(
onPressed: () async {
if (_threeWords.isNotEmpty) {
try {
var location = await _what3Words.convertToCoordinates(_threeWords, apiKey: 'YOUR_API_KEY');
setState(() {
_latitude = location.latitude.toString();
_longitude = location.longitude.toString();
_address = '${location.latitude}, ${location.longitude}';
});
} catch (e) {
print('Error: $e');
}
}
},
child: Text('Convert to Coordinates'),
),
SizedBox(height: 16),
Text('Latitude: $_latitude'),
Text('Longitude: $_longitude'),
Text('Address: $_address'),
],
),
),
);
}
}
在上面的代码中,我们创建了一个简单的Flutter应用,其中包括一个文本字段用于输入3个单词,一个按钮用于触发转换操作,以及几个文本控件用于显示转换后的经纬度信息。
请注意以下几点:
- 你需要将
'YOUR_API_KEY'
替换为你从what3words获取的实际API密钥。 - 这个示例仅展示了基本的转换功能。在实际应用中,你可能需要处理更多的错误情况,并优化用户界面。
通过这个示例,你可以快速开始在Flutter应用中使用what3words插件进行地理位置定位。