Flutter地理编码与反地理编码插件geocoder2的使用

发布于 1周前 作者 h691938207 来自 Flutter

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

1 回复

更多关于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),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

代码解释

  1. 依赖项:确保在pubspec.yaml文件中添加了geocoder2geolocator依赖。

  2. 权限检查:在_getCurrentLocation方法中,检查位置服务是否启用,并请求必要的权限。

  3. 获取当前位置:使用Geolocator.getCurrentPosition方法获取当前设备的地理位置。

  4. 反地理编码:使用placemarkFromCoordinates方法将获取的经纬度转换为地址。

  5. UI显示:在UI中显示获取的地址。

这个示例代码展示了如何在Flutter应用中使用geocoder2插件进行基本的地理编码与反地理编码操作。你可以根据需要进一步扩展和修改这个示例。

回到顶部