use geo::BoundingRect;
use geojson::{Feature, GeoJson, Geometry, Value};
use super::geom::rect_to_bbox;
use crate::nd::Fix;
use crate::route::Route;
impl Route {
#[cfg_attr(docsrs, doc(cfg(feature = "geojson")))]
pub fn to_geojson(&self) -> GeoJson {
let legs = self.legs();
let mut coords: Vec<geo::Coord<f64>> = Vec::with_capacity(legs.len() + 1);
if let Some(origin) = legs.first() {
coords.push(origin.from().coordinate().into());
}
for leg in legs {
coords.push(leg.to().coordinate().into());
}
let line = geo::LineString::from(coords);
GeoJson::Feature(Feature {
bbox: line.bounding_rect().map(rect_to_bbox),
geometry: Some(Geometry::new(Value::from(&line))),
id: None,
properties: None,
foreign_members: None,
})
}
}