#kml #fgfp #google-earth #flightgear #conversion-tool

bin+lib kml_to_fgfp

将 Google Earth 的 .kml 文件转换为 FlightGear 飞行计划 (.fgfp) 的工具

3 个版本 (破坏性)

0.3.1 2023年2月8日
0.2.0 2023年1月11日
0.1.0 2023年1月5日

#1464 in 命令行工具

MIT 许可证

33KB
491

使用 Google Earth 的 .kml 文件制作 FlightGear 飞行计划

Commits since last release Crates version License

流行的网站 SimBrief 可以为您提供模拟的综合飞行文档。它允许您 下载您的飞行计划为 Google Earth .kml 文件,但没有下载 FlightGear 飞行计划的选择。

此工具允许您将此 .kml 文件转换为 .fgfp,即 FlightGear 飞行计划。

安装

要安装此应用程序,您需要安装 Rust 语言的 cargo。如果您还没有,可以参考这里的安装说明。

然后,您只需在终端中运行以下命令

$ cargo install kml_to_fgfp

可执行二进制文件的用法

目前,二进制文件至少需要两个参数

  • 第一个参数 指的是 源文件,预期为 .kml 文件。

  • 第二个参数 指的是目标文件,即生成的 .fgfp 文件。

    请注意,如果 .fgfp 文件已存在,它将被覆盖。

以下是一个示例

$ kml_to_fgfp YSSYSAEZ.kml YSSYSAEZ.fgfp

如果您的终端中没有看到输出,请不要担心,这是预期行为。

您还可以指定出发和目的地机场,这将使用机场航路点完成飞行计划

$ kml_to_fgfp YSSYSAEZ.kml YSSYSAEZ.fgfp YSSY/34L SAEZ/11

当程序检测到 .kml 文件中的无效数据时(可能已被手动编辑且存在错误),它会输出警告。

$ kml_to_fgfp YSSYSAEZ.kml YSSYSAEZ.fgfp
Dropping ARSOT waypoint: invalid float literal

在此示例中,程序不会为 ARSOT 导航台生成航路点,因为它发现数据中存在错误。


还有一个帮助菜单,可以通过 --help-h 参数访问。

$ kml_to_fgfp --help
Usage:
      kml_to_fgfp INPUT OUTPUT [DEPARTURE_AIRPORT] [DESTINATION AIRPORT]

INPUT is the Google Earth (.kml) file.

OUTPUT is the name of the generated FlightGear flight plan (.fgfp) file.

[DEPARTURE_AIRPORT] is an optional argument detailing the departure airport's
ICAO designation. It would look something like `YSSY`. You can also type a `/`
to add a specific runway, so it would look like `YSSY/34L`.

[DESTINATION_AIRPORT] is an optional argument detailing the destination
airport's ICAO designation. It would look something like `SAEZ`. You can also
type a `/` to add a specific runway, so it would look like `SAEZ/11`.

Version: 0.1.0, MIT License

库 API 的用法

  1. 创建一个 EventWriter,它将用于写入输出文件。

    let mut output_file = File::create(output_filepath)?;
    let mut writer = EmitterConfig::new()
        .perform_indent(true)
        .create_writer(&mut output_file);
    
  2. 使用 write_start_of_tree 函数写入 .fgfp xml 树的开始部分。

    kml_to_fgfp::write_start_of_tree(&mut writer)?;
    
  3. 创建 2 个 Option<kml_to_fgfp::Airport> 设置值,如果飞行计划中没有出发或目的地机场,则设置为 None

    然后调用 write_airports 函数,将前面的选项作为参数传递。

    let departure = kml_to_fgfp::Airport {
        ident: String::from("YSSY"),
        runway: Some(String::from("34L")),
    };
    
    let destination = kml_to_fgfp::Airport {
        ident: String::from("SAEZ"),
        runway: Some(String::from("11")),
    };
    
    kml_to_fgfp::write_airports(&mut writer, &departure, &destination)?;
    
  4. 创建一个 EventReader,它将被用于读取 .kml 文件。

    let input_file = File::open(input_filepath)?;
    let input_file = BufReader::new(input_file);
    let parser = EventReader::new(input_file);
    
  5. 调用 transform_route 函数,该函数需要 xml EventReaderEventWriter 以及 2 个机场选项。该函数将使用 .kml 文件中的信息创建 .fgfp 的路线。

    kml_to_fgfp::transform_route(
        parser,
        &mut writer,
        &departure,
        &destination,
    )?;
    
  6. 通过调用 close_tree 函数关闭 xml 树。

    kml_to_fgfp::close_tree(&mut writer)?;
    

如果您需要示例,可以参考 runner 模块中的 run 函数。

关于

此程序和存储库在 MIT 许可证 下可用。

依赖项

~255KB