Flutter地理位置计算插件calc_lat_long的使用

Flutter地理位置计算插件calc_lat_long的使用

calc_lat_long 是一个用于计算两个地理坐标点(纬度和经度)之间的距离的包。它可以按英里、公里或海里来计算距离。

开始使用

  1. pubspec.yaml 文件中添加最新版本的插件,并运行 dart pub get 命令:
    dependencies:
      calc_lat_long: ^1.0.12
    

示例代码

以下是一个完整的示例代码,展示了如何使用 calc_lat_long 插件来计算两个地理坐标点之间的距离。

import 'package:flutter/material.dart';
import 'package:calc_lat_long/calc_lat_long.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
        visualDensity: VisualDensity.adaptivePlatformDensity,
      ),
      home: MyHomePage(title: '计算两个点的距离'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key? key, required this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  final TextEditingController latitude1 = TextEditingController();
  final TextEditingController latitude2 = TextEditingController();
  final TextEditingController longitude1 = TextEditingController();
  final TextEditingController longitude2 = TextEditingController();

  var distance = 0.0;
  var _unitLength = [UnitLength.km, UnitLength.mi, UnitLength.nm];
  UnitLength _selectedUnit = UnitLength.km;

  void _dropDownItemSelected(UnitLength novoItem) {
    setState(() {
      _selectedUnit = novoItem;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Padding(
        padding: EdgeInsets.all(16),
        child: ListView(
          keyboardDismissBehavior: ScrollViewKeyboardDismissBehavior.onDrag,
          children: <Widget>[
            TextField(
              controller: latitude1,
              decoration: InputDecoration(labelText: "纬度 1"),
            ),
            TextField(
              controller: longitude1,
              decoration: InputDecoration(labelText: "经度 1"),
            ),
            TextField(
              controller: latitude2,
              decoration: InputDecoration(labelText: "纬度 2"),
            ),
            TextField(
              controller: longitude2,
              decoration: InputDecoration(labelText: "经度 2"),
            ),
            DropdownButton<UnitLength>(
                items: _unitLength.map((UnitLength dropDownStringItem) {
                  return DropdownMenuItem<UnitLength>(
                    value: dropDownStringItem,
                    child: Text(dropDownStringItem.toString()),
                  );
                }).toList(),
                onChanged: (UnitLength? newUnitSelected) {
                  _dropDownItemSelected(newUnitSelected!);
                  setState(() {
                    _selectedUnit = newUnitSelected;
                  });
                },
                value: _selectedUnit),
            SizedBox(
              height: 15,
            ),
            ElevatedButton(
                onPressed: () {
                  var dist = CalcDistance.distance(
                      double.parse(latitude1.text),
                      double.parse(latitude2.text),
                      double.parse(longitude1.text),
                      double.parse(longitude2.text),
                      _selectedUnit);

                  setState(() {
                    distance = dist;
                  });
                },
                child: Text("计算")),
            SizedBox(
              height: 15,
            ),
            Text(distance == 0 ? "" : "距离: $distance")
          ],
        ),
      )
    );
  }
}

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

1 回复

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


当然,以下是一个关于如何在Flutter项目中使用calc_lat_long插件来进行地理位置计算的示例代码。calc_lat_long插件可以帮助你计算两个地理坐标之间的距离,以及根据初始坐标、距离和方位角来得到目标坐标。

首先,你需要在你的pubspec.yaml文件中添加calc_lat_long依赖:

dependencies:
  flutter:
    sdk: flutter
  calc_lat_long: ^x.y.z  # 请将x.y.z替换为最新版本号

然后运行flutter pub get来获取依赖。

接下来,在你的Flutter项目中创建一个Dart文件(例如location_calculator.dart),并在其中编写以下代码:

import 'package:flutter/material.dart';
import 'package:calc_lat_long/calc_lat_long.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('地理位置计算示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text('计算两个坐标之间的距离'),
              ElevatedButton(
                onPressed: () {
                  calculateDistance();
                },
                child: Text('计算距离'),
              ),
              SizedBox(height: 20),
              Text('根据初始坐标、距离和方位角计算目标坐标'),
              ElevatedButton(
                onPressed: () {
                  calculateDestination();
                },
                child: Text('计算目标坐标'),
              ),
            ],
          ),
        ),
      ),
    );
  }

  void calculateDistance() {
    // 示例坐标
    double lat1 = 39.9042; // 北京的纬度
    double lon1 = 116.4074; // 北京的经度
    double lat2 = 31.2304; // 上海的纬度
    double lon2 = 121.4737; // 上海的经度

    // 创建LatLng对象
    LatLng origin = LatLng(lat1, lon1);
    LatLng destination = LatLng(lat2, lon2);

    // 计算距离(单位:米)
    double distance = origin.distanceTo(destination);
    print("两个坐标之间的距离是: $distance 米");

    // 你也可以显示这个结果在UI上,这里只是打印到控制台
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text("两个坐标之间的距离是: $distance 米")),
    );
  }

  void calculateDestination() {
    // 初始坐标
    double lat = 39.9042; // 北京的纬度
    double lon = 116.4074; // 北京的经度

    // 距离(单位:米)
    double distance = 100000; // 100公里

    // 方位角(单位:度,北方向为0,顺时针方向增加)
    double bearing = 45.0; // 45度方位角

    // 创建LatLng对象
    LatLng origin = LatLng(lat, lon);

    // 计算目标坐标
    LatLng destination = origin.destinationFromDistanceAndBearing(distance, bearing);

    print("目标坐标是: 纬度: ${destination.latitude}, 经度: ${destination.longitude}");

    // 你也可以显示这个结果在UI上,这里只是打印到控制台
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text("目标坐标是: 纬度: ${destination.latitude}, 经度: ${destination.longitude}")),
    );
  }
}

在上面的代码中,我们定义了两个函数calculateDistancecalculateDestinationcalculateDistance函数计算两个地理坐标之间的距离,并打印结果到控制台(同时你也可以选择在UI上显示)。calculateDestination函数根据初始坐标、距离和方位角来计算目标坐标,并打印结果到控制台(同样可以选择在UI上显示)。

注意,LatLng类及其distanceTodestinationFromDistanceAndBearing方法都是由calc_lat_long插件提供的。确保你已经正确导入了插件并在你的pubspec.yaml文件中添加了依赖。

这样,你就可以在Flutter项目中使用calc_lat_long插件来进行地理位置计算了。

回到顶部