Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

https://github.com/georust/kml

Rust support for KML
https://github.com/georust/kml

geospatial gis hacktoberfest kml rust

Last synced: about 2 months ago
JSON representation

Rust support for KML

Lists

README

        

# kml

[![crates.io](https://img.shields.io/crates/v/kml.svg)](https://crates.io/crates/kml)
[![Build status](https://github.com/georust/kml/workflows/CI/badge.svg)](https://github.com/georust/kml/actions?query=workflow%3ACI)
[![Documentation](https://docs.rs/kml/badge.svg)](https://docs.rs/kml)

Rust support for reading and writing KML with a focus on conversion to [`geo-types`](https://github.com/georust/geo) primitives.

## Examples

### Reading

```rust
use std::path::Path;
use kml::{Kml, KmlReader};

let kml_str = r#"



1

-1,2,0
-1.5,3,0
-1.5,2,0
-1,2,0


"#;

// Parse from a string
let kml: Kml = kml_str.parse().unwrap();

// Read from a file path
let kml_path = Path::new(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join("polygon.kml");
let mut kml_reader = KmlReader::<_, f64>::from_path(kml_path).unwrap();
let kml_data = kml_reader.read().unwrap();

// Read KMZ files with the `zip` feature or default features enabled
let kmz_path = Path::new(env!("CARGO_MANIFEST_DIR"))
.join("tests")
.join("fixtures")
.join("polygon.kmz");
let mut kmz_reader = KmlReader::<_, f64>::from_kmz_path(kmz_path).unwrap();
let kmz_data = kmz_reader.read().unwrap();
```

### Writing

```rust
use kml::{Kml, KmlWriter, types::Point};

let kml = Kml::Point(Point::new(1., 1., None));

let mut buf = Vec::new();
let mut writer = KmlWriter::from_writer(&mut buf);
writer.write(&kml).unwrap();
```

### Conversion

```rust
use geo_types::{self, GeometryCollection};
use kml::{quick_collection, Kml, types::Point};

let kml_point = Point::new(1., 1., None);
// Convert into geo_types primitives
let geo_point = geo_types::Point::from(kml_point);
// Convert back into kml::types structs
let kml_point = Point::from(geo_point);

let kml_folder_str = r#"


1,1,1
relativeToGround


1,1 2,1 3,1
relativeToGround

"#;
let kml_folder: Kml = kml_folder_str.parse().unwrap();

// Use the quick_collection helper to convert Kml to a geo_types::GeometryCollection
let geom_coll: GeometryCollection = quick_collection(kml_folder).unwrap();
```

## Code of Conduct

All contributors are expected to follow the [GeoRust Code of Conduct](https://github.com/georust/.github/blob/main/CODE_OF_CONDUCT.md)

## License

Licensed under either of

- Apache License, Version 2.0 ([LICENSE-APACHE](LICENSE-APACHE) or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license ([LICENSE-MIT](LICENSE-MIT) or http://opensource.org/licenses/MIT)

at your option.

### Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.