Flutter地理编码与反地理编码插件geocoder2的使用
Flutter地理编码与反地理编码插件geocoder2的使用
geocoder2
Easy forward and reverse geocodeing From google maps api 确保在Android和iOS中激活Maps SDK,并从Google Cloud Console获取geocode API。
特性
- Easy To Use:易于使用
- No Errors:无错误
示例代码
import 'package:geocoder2/geocoder2.dart';
// 获取坐标数据
Future<void> getCoordinatesData() async {
GeoData data = await Geocoder2.getDataFromCoordinates(
latitude: 40.714224,
longitude: -73.961452,
googleMapApiKey: "GOOGLE_MAP_API_KEY");
// 格式化地址
print(data.address);
// 城市名称
print(data.city);
// 国家名称
print(data.country);
// 国家代码
print(data.countryCode);
// 纬度
print(data.latitude);
// 经度
print(data.longitude);
// 邮政编码
print(data.postalCode);
// 州
print(data.state);
// 街道号码
print(data.street_number);
}
// 获取地址数据
Future<void> getAddressData() async {
GeoData data = await Geocoder2.getDataFromAddress(
address: "277 Bedford Ave, Brooklyn, NY 11211, USA",
googleMapApiKey: "GOOGLE_MAP_API_KEY");
// 格式化地址
print(data.address);
// 城市名称
print(data.city);
// 国家名称
print(data.country);
// 国家代码
print(data.countryCode);
// 纬度
print(data.latitude);
// 经度
print(data.longitude);
// 邮政编码
print(data.postalCode);
// 州
print(data.state);
// 街道号码
print(data.street_number);
}
更多关于Flutter地理编码与反地理编码插件geocoder2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter地理编码与反地理编码插件geocoder2的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中使用geocoder2
插件进行地理编码与反地理编码的示例代码。这个插件允许你将地理坐标转换为地址(反地理编码),以及将地址转换为地理坐标(地理编码)。
首先,确保你已经在pubspec.yaml
文件中添加了geocoder2
依赖:
dependencies:
flutter:
sdk: flutter
geocoder2: ^2.0.0 # 请检查最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,是一个完整的示例代码,展示如何使用geocoder2
插件:
import 'package:flutter/material.dart';
import 'package:geocoder2/geocoder2.dart';
import 'package:geolocator/geolocator.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _address = '';
Position? _currentPosition;
@override
void initState() {
super.initState();
_getCurrentLocation();
}
Future<void> _getCurrentLocation() async {
bool serviceEnabled;
LocationPermission permission;
// Test if location services are enabled.
serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
return Future.error('Location services are disabled.');
}
permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
permission = await Geolocator.requestPermission();
if (permission == LocationPermission.denied) {
return Future.error('Location permissions are denied');
}
}
if (permission == LocationPermission.deniedForever) {
// Permissions are permanently denied, we cannot request permissions anymore.
return Future.error(
'Location permissions are permanently denied, we cannot request permissions.');
}
// Get the current device location.
_currentPosition = await Geolocator.getCurrentPosition(
desiredAccuracy: LocationAccuracy.high);
// Perform geocoding (reverse geocoding) to get the address.
_getAddressFromCoordinates(_currentPosition!.latitude, _currentPosition!.longitude);
}
Future<void> _getAddressFromCoordinates(double lat, double lon) async {
List<Placemark> placemarks =
await placemarkFromCoordinates(lat, lon);
Placemark place = placemarks.first;
setState(() {
_address = "${place.locality}, ${place.postalCode}, ${place.country}";
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Geocoder2 Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
'Current Address:',
style: TextStyle(fontSize: 20),
),
SizedBox(height: 10),
Text(
_address,
style: TextStyle(fontSize: 18),
),
],
),
),
),
);
}
}
代码解释
-
依赖项:确保在
pubspec.yaml
文件中添加了geocoder2
和geolocator
依赖。 -
权限检查:在
_getCurrentLocation
方法中,检查位置服务是否启用,并请求必要的权限。 -
获取当前位置:使用
Geolocator.getCurrentPosition
方法获取当前设备的地理位置。 -
反地理编码:使用
placemarkFromCoordinates
方法将获取的经纬度转换为地址。 -
UI显示:在UI中显示获取的地址。
这个示例代码展示了如何在Flutter应用中使用geocoder2
插件进行基本的地理编码与反地理编码操作。你可以根据需要进一步扩展和修改这个示例。