Flutter地理位置坐标插件latlng的使用

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

Flutter地理位置坐标插件latlng的使用

简介

pub package

latlng 是一个用于Dart的地理计算库,提供了经纬度(LatLong)和墨卡托投影(EPSG4326)的功能。它可以帮助开发者进行地球测量学和地理坐标的计算。

快速开始

添加依赖

在你的 pubspec.yaml 文件中添加如下依赖:

dependencies:
  latlng: any

然后,在你的代码中导入此包:

import 'package:latlng/latlng.dart';

功能特性

  • Julian日期和时间
  • ECI和ECF计算
  • 观测角度计算
  • 地面轨迹
  • WGS84和WGS72
  • 投影到瓦片索引

示例代码

以下是一个完整的示例,演示如何使用 latlng 包来创建地理坐标点并执行一些基本操作:

import 'package:latlng/latlng.dart';

void main() {
  // 创建两个地理坐标点
  LatLng pointA = LatLng(39.9042, 116.4074); // 北京
  LatLng pointB = LatLng(31.2304, 121.4737); // 上海

  // 计算两点之间的距离(单位:米)
  double distance = pointA.distanceTo(pointB);
  print('Distance between Beijing and Shanghai is $distance meters.');

  // 计算北京相对于上海的方位角
  double bearing = pointA.bearingTo(pointB);
  print('Bearing from Beijing to Shanghai is $bearing degrees.');

  // 根据给定的距离和方位角,计算从北京出发的新坐标点
  LatLng newPoint = pointA.destinationPoint(distance, bearing);
  print('New point after traveling $distance meters at $bearing degrees from Beijing is (${newPoint.latitude}, ${newPoint.longitude}).');
}

此示例展示了如何创建 LatLng 对象,计算两点间距离、方位角,并基于这些信息生成新的坐标点。希望这个例子能帮助你更好地理解和使用 latlng 插件。


更多关于Flutter地理位置坐标插件latlng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter地理位置坐标插件latlng的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter应用中使用geolocator插件来获取地理位置坐标(经纬度,即LatLng)的示例代码。

首先,确保你已经在pubspec.yaml文件中添加了geolocatorgeocoding依赖项(geocoding是可选的,但可以用于地址解析等高级功能)。

dependencies:
  flutter:
    sdk: flutter
  geolocator: ^9.0.2  # 请检查最新版本号
  geocoding: ^2.0.0   # 可选,用于地址解析

然后,运行flutter pub get来安装这些依赖项。

接下来,在你的Dart文件中,你可以按照以下步骤使用geolocator插件来获取当前设备的地理位置坐标。

import 'package:flutter/material.dart';
import 'package:geolocator/geolocator.dart';
import 'package:geolocator/geolocator_platform_interface.dart';
import 'package:geocoding/geocoding.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Geolocation Example'),
        ),
        body: Center(
          child: GeolocationWidget(),
        ),
      ),
    );
  }
}

class GeolocationWidget extends StatefulWidget {
  @override
  _GeolocationWidgetState createState() => _GeolocationWidgetState();
}

class _GeolocationWidgetState extends State<GeolocationWidget> {
  Position? _currentPosition;
  LatLng? _currentLatLng;

  @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.');
    }

    // When we reach here, permissions are granted and we can use the geolocator.
    _currentPosition = await Geolocator.getCurrentPosition(
      desiredAccuracy: LocationAccuracy.high,
    );

    setState(() {
      _currentLatLng = LatLng(_currentPosition!.latitude!, _currentPosition!.longitude!);
    });
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: <Widget>[
        if (_currentLatLng != null)
          Text(
            'Current Location: Latitude: ${_currentLatLng!.latitude}, Longitude: ${_currentLatLng!.longitude}',
            style: TextStyle(fontSize: 20),
          ),
        if (_currentPosition == null)
          CircularProgressIndicator(),
      ],
    );
  }
}

代码解释:

  1. 依赖项:在pubspec.yaml文件中添加geolocatorgeocoding(可选)依赖项。
  2. 权限检查:在_getCurrentLocation方法中,首先检查位置服务是否启用,然后请求位置权限。
  3. 获取当前位置:使用Geolocator.getCurrentPosition方法获取当前设备的位置。
  4. 更新UI:一旦获取到位置,使用setState方法更新UI,显示经纬度信息。

这个示例展示了如何使用geolocator插件来获取设备的当前地理位置坐标,并在UI中显示这些信息。你可以根据需要进一步扩展这个示例,比如添加错误处理、持续位置跟踪等功能。

回到顶部