Flutter GPS数据解析插件gpx的使用

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

Flutter GPS数据解析插件gpx的使用

gpx

Pub Package Build Status Coverage Status GitHub Issues GitHub Forks GitHub Stars License

gpx 是一个用于加载、操作和保存GPX格式(一种轻量级的XML数据格式,用于交换GPS数据 - 航点、路线和轨迹)的库。查看官方GPX 1.1 Schema:GPX 1.1 Schema

它还支持将Gpx导出为:

  • KML(用于在地球浏览器中显示地理数据的文件格式,例如Google Earth)
  • CSV(尚未实现)

Getting Started

添加依赖

在你的Dart/Flutter项目中添加以下依赖:

dependencies:
  ...
  gpx: ^2.3.0

示例代码

创建并读取GPX对象

import 'package:gpx/gpx.dart';

void main() {
  // 创建GPX对象
  final gpx = Gpx();
  gpx.version = '1.1';
  gpx.creator = 'dart-gpx library';
  gpx.metadata = Metadata();
  gpx.metadata?.name = 'world cities';
  gpx.metadata?.desc = 'location of some of world cities';
  gpx.metadata?.time = DateTime.utc(2010, 1, 2, 3, 4, 5);
  gpx.wpts = [
    Wpt(
        lat: -25.7996,
        lon: -62.8666,
        ele: 10.1,
        name: 'Monte Quemado',
        desc: 'Argentina'),
    Wpt(
        lat: 36.62,
        lon: 101.77,
        ele: 10.1,
        name: 'Xining',
        desc: 'China',
        extensions: {'test_key': 'test_value', 'test_key_2': 'test_value_2'}),
  ];

  // 获取GPX字符串
  final gpxString = GpxWriter().asString(gpx, pretty: true);
  print(gpxString);

  // 将GPX对象导出为KML
  final kmlString = KmlWriter().asString(gpx, pretty: true);
  print(kmlString);

  // 从GPX-XML字符串读取GPX对象
  final xmlGpx = GpxReader().fromString('<?xml version="1.0" encoding="UTF-8"?>'
      '<gpx version="1.1" creator="dart-gpx library">'
      '<metadata>'
      '<name>world cities</name>'
      '<time>2010-01-02T03:04:05.000Z</time>'
      '</metadata>'
      '<wpt lat="-25.7996" lon="-62.8666"><ele>10.0</ele><name>Monte Quemado</name><desc>Argentina</desc><extensions><test2>test_value_2</test2><test>test_value</test></extensions></wpt>'
      '</gpx>');
  print(xmlGpx);
}

功能与限制

功能

  • 支持从字符串读取和写入GPX数据。
  • 支持将GPX数据导出为KML格式。

限制

  • 不支持GPX 1.0版本。
  • 仅支持从字符串读写。
  • 不验证模式声明。

许可证

Apache 2.0 License,详情参见LICENSE

如果你有任何功能请求或发现bug,请提交到issue tracker

希望这些信息能帮助你更好地理解和使用gpx插件!如果有任何问题,欢迎继续讨论。


更多关于Flutter GPS数据解析插件gpx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GPS数据解析插件gpx的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中,使用gpx插件来解析GPS数据是一个常见的需求。gpx插件允许你读取和解析GPX(GPS eXchange Format)文件,这些文件通常包含GPS轨迹点、路线和其他地理信息。

以下是一个简单的代码示例,展示了如何在Flutter应用中使用gpx插件来解析GPX文件数据。

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

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

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

接下来,你可以编写一个Flutter应用来解析并显示GPX文件中的数据。以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:gpx/gpx.dart';
import 'dart:convert';
import 'dart:typed_data';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'GPX Parser Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: GpxParserScreen(),
    );
  }
}

class GpxParserScreen extends StatefulWidget {
  @override
  _GpxParserScreenState createState() => _GpxParserScreenState();
}

class _GpxParserScreenState extends State<GpxParserScreen> {
  String _gpxData = '''
  <gpx version="1.1"
      xmlns="http://www.topografix.com/GPX/1/1"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://www.topografix.com/GPX/1/1
      http://www.topografix.com/GPX/1/1/gpx.xsd">
    <trk>
      <name>Sample Track</name>
      <trkseg>
        <trkpt lat="47.644543" lon="-122.342014">
          <ele>4.5</ele>
          <time>2023-10-01T12:00:00Z</time>
        </trkpt>
        <trkpt lat="47.644545" lon="-122.342016">
          <ele>5.0</ele>
          <time>2023-10-01T12:01:00Z</time>
        </trkpt>
      </trkseg>
    </trk>
  </gpx>
  ''';

  List<GpxTrackPoint> _trackPoints = [];

  @override
  void initState() {
    super.initState();
    _parseGpxData();
  }

  void _parseGpxData() async {
    final Uint8List gpxBytes = Uint8List.fromList(utf8.encode(_gpxData));
    final Gpx gpx = Gpx.fromXml(gpxBytes);

    setState(() {
      _trackPoints = gpx.tracks.expand((track) => track.segments.expand((segment) => segment.points)).toList();
    });
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('GPX Parser Demo'),
      ),
      body: ListView.builder(
        itemCount: _trackPoints.length,
        itemBuilder: (context, index) {
          final GpxTrackPoint point = _trackPoints[index];
          return ListTile(
            title: Text('Point ${index + 1}'),
            subtitle: Text('Latitude: ${point.latitude}, Longitude: ${point.longitude}, Elevation: ${point.elevation} m, Time: ${point.time}'),
          );
        },
      ),
    );
  }
}

在这个示例中,我们做了以下几件事:

  1. pubspec.yaml文件中添加了gpx依赖。
  2. 创建了一个Flutter应用,包含一个主屏幕GpxParserScreen
  3. _GpxParserScreenState类中,定义了一个GPX格式的字符串_gpxData,它包含了一些示例轨迹点数据。
  4. initState方法中,调用_parseGpxData方法来解析GPX数据。
  5. _parseGpxData方法将GPX字符串转换为Uint8List,然后使用Gpx.fromXml方法将其解析为Gpx对象。之后,我们从解析得到的Gpx对象中提取轨迹点,并保存到_trackPoints列表中。
  6. 使用ListView.builder来显示轨迹点的信息。

请注意,这个示例假设GPX数据是以字符串形式嵌入在代码中的。在实际应用中,你可能会从文件、网络或其他来源获取GPX数据。相应地,你需要调整代码来读取这些数据。

回到顶部