#geographic #gis #adapter #file-format #features #serialization #point

geoserde

地理特征与GIS文件之间的适配器

13个版本 (4个重大更新)

0.5.2 2024年6月9日
0.5.1 2024年6月5日
0.5.0 2024年5月26日
0.4.1 2024年2月18日
0.1.3 2023年12月14日

#96 in 地理空间

每月39次下载
用于 fgbfile

MIT 许可证

54KB
1.5K SLoC

geoserde

crates.io docs.rs

Geoserde是地理特征结构体和GIS文件格式之间的适配器。

请参阅包含一些示例的API文档

MIT许可证下授权。


lib.rs:

Geoserde是地理特征结构体和GIS文件格式之间的适配器。

入门指南

cargo add geoserde

Cargo功能

  • geozero - 为geozero处理器实现geoserde接收器。默认启用。

示例

use geo_types::Point;
use geoserde::FeatureSerializer;
use geozero::geojson::GeoJsonWriter;
use serde::Serialize;

// Print two features to the console in GeoJson format
fn main() -> anyhow::Result<()> {
    // If you want to write to a file, use BufWriter<File> instead
    let mut buf = vec![];

    // Any format that has an implementation of geozero::FeatureProcessor can be used,
    // such as wkt, shp, fgb, etc. See also https://docs.rs/geozero/latest/geozero/
    let mut geojson = GeoJsonWriter::new(&mut buf);

    // Serialize features to GeoJson format
    let mut ser = FeatureSerializer::new(&mut geojson);
    my_features().serialize(&mut ser)?;

    println!("{}", std::str::from_utf8(&buf)?);
    Ok(())
}

// Create feature array
fn my_features() -> impl Serialize {
    [
        Station {
            name: "King's Cross",
            europe: true,
            loc: Point::new(51.5321, -0.1233),
        },
        Station {
            name: "Tokyo",
            europe: false,
            loc: Point::new(139.7661, 35.6812),
        },
    ]
}

// Geographic feature
#[derive(Serialize)]
struct Station {
    // Property
    name: &'static str,

    // Property
    europe: bool,

    // Geometry
    loc: Point,
}

依赖项

~2–3MB
~63K SLoC