Flutter坐标转换插件coord_convert的使用

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

Flutter坐标转换插件coord_convert的使用

CoordConvert 是一个用于在不同坐标系统之间进行转换的小型库。它支持以下几种坐标系统:

  • WGS-84:大多数地图(如Google Maps、Apple Maps、Mapbox、OpenStreetMaps等)使用的标准。
  • GCJ-02:中国地图(如高德地图、腾讯地图等,除了百度地图)使用的坐标系统。
  • BD-09:百度地图使用的坐标系统。

基于公式参考自 这里

开始使用

添加依赖

pubspec.yaml 文件中添加以下依赖:

dependencies:
  coord_convert: ^1.0.0

然后运行 flutter pub get 来安装依赖。

使用示例

转换到 WGS-84

import 'package:coord_convert/coord_convert.dart';

void main() {
  final coords = Coords(31.233568, 121.505504); // Coords(lat, lng)

  // WGS-84 from GCJ-02
  final Coords fromGCJ02 = CoordConvert.gcj02towgs84(coords);
  print('WGS-84 from GCJ-02: $fromGCJ02');

  // WGS-84 from BD-09
  final Coords fromBD09 = CoordConvert.bd09towgs84(coords);
  print('WGS-84 from BD-09: $fromBD09');
}

转换到 GCJ-02

import 'package:coord_convert/coord_convert.dart';

void main() {
  final coords = Coords(31.233568, 121.505504); // Coords(lat, lng)

  // GCJ-02 from WGS-84
  final fromWGS84 = CoordConvert.wgs84togcj02(coords);
  print('GCJ-02 from WGS-84: $fromWGS84');

  // GCJ-02 from BD-09
  final fromBD09 = CoordConvert.bd09togcj02(coords);
  print('GCJ-02 from BD-09: $fromBD09');
}

转换到 BD-09

import 'package:coord_convert/coord_convert.dart';

void main() {
  final coords = Coords(31.233568, 121.505504); // Coords(lat, lng)

  // BD-09 from WGS-84
  final fromWGS84 = CoordConvert.wgs84tobd09(coords);
  print('BD-09 from WGS-84: $fromWGS84');

  // BD-09 from GCJ-02
  final fromGCJ02 = CoordConvert.gcj02tobd09(coords);
  print('BD-09 from GCJ-02: $fromGCJ02');
}

完整示例 Demo

下面是一个完整的示例程序,演示了如何使用 coord_convert 插件进行各种坐标系统的转换:

import 'package:coord_convert/coord_convert.dart';

void main() {
  final coords = Coords(31.233568, 121.505504); // Coords(lat, lng)

  // WGS-84 from GCJ-02
  final wgs84FromGcj02 = CoordConvert.gcj02towgs84(coords);
  print('WGS-84 from GCJ-02: $wgs84FromGcj02');

  // WGS-84 from BD-09
  final wgs84FromBd09 = CoordConvert.bd09towgs84(coords);
  print('WGS-84 from BD-09: $wgs84FromBd09');

  // GCJ-02 from WGS-84
  final gcj02FromWgs84 = CoordConvert.wgs84togcj02(coords);
  print('GCJ-02 from WGS-84: $gcj02FromWgs84');

  // GCJ-02 from BD-09
  final gcj02FromBd09 = CoordConvert.bd09togcj02(coords);
  print('GCJ-02 from BD-09: $gcj02FromBd09');

  // BD-09 from WGS-84
  final bd09FromWgs84 = CoordConvert.wgs84tobd09(coords);
  print('BD-09 from WGS-84: $bd09FromWgs84');

  // BD-09 from GCJ-02
  final bd09FromGcj02 = CoordConvert.gcj02tobd09(coords);
  print('BD-09 from GCJ-02: $bd09FromGcj02');
}

以上代码展示了如何使用 coord_convert 插件进行不同坐标系统之间的转换,并打印出转换后的结果。希望这个示例能帮助你更好地理解和使用该插件。


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

1 回复

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


当然,以下是如何在Flutter项目中使用coord_convert插件进行坐标转换的示例代码。coord_convert插件通常用于在不同坐标系统(如WGS-84、GCJ-02、BD-09)之间进行转换。

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

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

然后运行flutter pub get来安装依赖。

接下来,在你的Flutter项目中,你可以使用以下代码来进行坐标转换:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('坐标转换示例'),
        ),
        body: CoordinateConversionPage(),
      ),
    );
  }
}

class CoordinateConversionPage extends StatefulWidget {
  @override
  _CoordinateConversionPageState createState() => _CoordinateConversionPageState();
}

class _CoordinateConversionPageState extends State<CoordinateConversionPage> {
  final TextEditingController _latController = TextEditingController();
  final TextEditingController _lngController = TextEditingController();
  String _convertedLat = '';
  String _convertedLng = '';

  void _convertCoordinates() {
    // 输入的WGS-84坐标
    double wgsLat = double.tryParse(_latController.text) ?? 0.0;
    double wgsLng = double.tryParse(_lngController.text) ?? 0.0;

    // 转换为GCJ-02坐标
    var gcjCoord = Wgs84ToGcj02(wgsLat, wgsLng);
    setState(() {
      _convertedLat = gcjCoord.lat.toString();
      _convertedLng = gcjCoord.lng.toString();
    });

    // 你可以继续转换为其他格式,例如BD-09
    var bdCoord = Gcj02ToBd09(gcjCoord.lat, gcjCoord.lng);
    print("BD-09坐标: 纬度 = ${bdCoord.lat}, 经度 = ${bdCoord.lng}");
  }

  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(16.0),
      child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget>[
          TextField(
            controller: _latController,
            decoration: InputDecoration(labelText: 'WGS-84 纬度'),
          ),
          SizedBox(height: 8.0),
          TextField(
            controller: _lngController,
            decoration: InputDecoration(labelText: 'WGS-84 经度'),
          ),
          SizedBox(height: 24.0),
          ElevatedButton(
            onPressed: _convertCoordinates,
            child: Text('转换坐标'),
          ),
          SizedBox(height: 16.0),
          Text('GCJ-02 坐标:'),
          Text('纬度 = $_convertedLat, 经度 = $_convertedLng'),
        ],
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,用户可以输入WGS-84格式的纬度和经度,然后点击按钮将其转换为GCJ-02格式的坐标。同时,转换后的GCJ-02坐标也被进一步转换为BD-09坐标(虽然BD-09坐标没有在UI上显示,但它们在控制台中打印出来了)。

请注意,Wgs84ToGcj02Gcj02ToBd09coord_convert插件提供的函数,它们用于执行坐标转换。

这个示例代码仅展示了基本的坐标转换功能,你可以根据需要进行扩展和修改。

回到顶部