Flutter军事网格参考系统插件mgrs_dart的使用

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

Flutter军事网格参考系统插件mgrs_dart的使用

mgrs_dart 是一个用于在 WGS84 经纬度和 MGRS(Military Grid Reference System)坐标之间进行转换的工具。它是 proj4js/mgrs 的 Dart 版本。

安装

首先,将 mgrs_dart 添加到您的 pubspec.yml 文件中的依赖项部分,然后运行 flutter pub get 来下载新的依赖项。

dependencies:
  mgrs_dart: any # 或者 Pub 上的最新版本

使用方法

Mgrs_dart 提供了三种主要方法:

  1. toPoint:接收一个 MGRS 字符串并返回一个 [经度, 纬度] 数组。
  2. forward:接收一个 [经度, 纬度] 数组和可选的精度参数,并返回一个 MGRS 字符串。
  3. inverse:接收一个 MGRS 字符串并返回一个边界框(bbox)。

以下是一个完整的示例演示如何使用这些方法:

import 'package:mgrs_dart/mgrs_dart.dart';

void main() {
  // 示例经纬度点
  var point = [-115.08209766323476, 36.236123461597515];
  
  // 示例MGRS字符串
  var mgrsString = '11SPA7234911844';
  
  // 精度设置为5
  var accuracy = 5;

  // 将MGRS字符串转换为经纬度点
  var calculatedPoint = Mgrs.toPoint(mgrsString);
  print("Mgrs.toPoint('$mgrsString') = $calculatedPoint;");
  // 输出: Mgrs.toPoint('11SPA7234911844') = [-115.08209766323476, 36.236123461597515];

  // 将经纬度点转换为MGRS字符串
  var calculatedMgrsString = Mgrs.forward(point, accuracy);
  print("Mgrs.forward($point, $accuracy) = '$calculatedMgrsString';");
  // 输出: Mgrs.forward([-115.08209766323476, 36.236123461597515], 5) = '11SPA7234911844';

  // 将MGRS字符串转换为边界框
  var calculatedBox = Mgrs.inverse(mgrsString);
  print("Mgrs.inverse('$mgrsString') = $calculatedBox;");
  // 输出: Mgrs.inverse('11SPA7234911844') = [-115.08209766323476, 36.236123461597515, -115.08208632067898, 36.23613229376363];
}

作者

Mgrs_dart 由 Gergely Padányi-Gulyás (@fegyi001) 在匈牙利布达佩斯的 Ulyssys Ltd 公司从 proj4js/mgrs 移植而来。

通过这个插件,您可以方便地在地理信息系统开发中实现经纬度与MGRS之间的转换操作。


这段Markdown文档详细描述了如何安装和使用 `mgrs_dart` 插件,并提供了完整的示例代码来帮助您理解其功能和用法。希望这对您有所帮助!

更多关于Flutter军事网格参考系统插件mgrs_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter军事网格参考系统插件mgrs_dart的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter应用中使用mgrs_dart插件来实现军事网格参考系统(MGRS)转换的示例代码。mgrs_dart插件允许你将地理坐标(经纬度)转换为MGRS坐标,或者将MGRS坐标转换回地理坐标。

首先,确保你已经在pubspec.yaml文件中添加了mgrs_dart依赖:

dependencies:
  flutter:
    sdk: flutter
  mgrs_dart: ^最新版本号  # 请替换为实际最新版本号

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

接下来,在你的Flutter应用中,你可以使用以下代码来实现MGRS坐标与地理坐标之间的转换:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _latitude = '37.7749';
  String _longitude = '-122.4194';
  String _mgrsCoordinate = '';

  void _convertToMGRS() {
    double lat = double.parse(_latitude);
    double lon = double.parse(_longitude);
    
    // 使用Mgrs类进行转换
    Mgrs mgrs = Mgrs();
    String mgrsCoord = mgrs.latLonToMgrs(lat, lon);
    
    setState(() {
      _mgrsCoordinate = mgrsCoord;
    });
  }

  void _convertToLatLon() async {
    // 假设我们有一个已知的MGRS坐标
    String mgrsCoord = "10SVC8298712810";
    
    Mgrs mgrs = Mgrs();
    // 注意:这个函数是异步的,因为它可能涉及网络请求或其他耗时操作(尽管在这个库的具体实现中不是)
    var result = await mgrs.mgrsToLatLon(mgrsCoord);
    
    setState(() {
      _latitude = result.latitude.toStringAsFixed(4);
      _longitude = result.longitude.toStringAsFixed(4);
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('MGRS Dart 示例'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(16.0),
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              TextField(
                decoration: InputDecoration(labelText: '纬度'),
                keyboardType: TextInputType.numberWithOptions(decimal: true),
                controller: TextEditingController(text: _latitude),
              ),
              SizedBox(height: 16),
              TextField(
                decoration: InputDecoration(labelText: '经度'),
                keyboardType: TextInputType.numberWithOptions(decimal: true),
                controller: TextEditingController(text: _longitude),
              ),
              SizedBox(height: 16),
              ElevatedButton(
                onPressed: _convertToMGRS,
                child: Text('转换为MGRS'),
              ),
              SizedBox(height: 24),
              Text('MGRS坐标: $_mgrsCoordinate'),
              SizedBox(height: 24),
              ElevatedButton(
                onPressed: _convertToLatLon,
                child: Text('从MGRS转换'),
              ),
              SizedBox(height: 24),
            ],
          ),
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,用户可以在其中输入纬度和经度,然后点击按钮将其转换为MGRS坐标。同样,也可以通过点击另一个按钮,将一个已知的MGRS坐标转换回地理坐标。

注意:

  • Mgrs类提供了latLonToMgrs方法用于将经纬度转换为MGRS坐标。
  • Mgrs类还提供了mgrsToLatLon方法用于将MGRS坐标转换回经纬度。

这个示例展示了如何使用mgrs_dart插件在Flutter应用中实现基本的MGRS坐标与地理坐标之间的转换功能。根据实际需求,你可能需要进一步完善UI和错误处理逻辑。

回到顶部