simple_example/
simple_example.rs

1use geo_types::{Coord, LineString, Point, Polygon};
2use omap::{
3    objects::{AreaObject, LineObject, PointObject, TagTrait, TextObject},
4    symbols::{AreaSymbol, LineSymbol, PointSymbol, TextSymbol},
5    Omap, Scale,
6};
7use std::{path::PathBuf, str::FromStr};
8
9fn main() {
10    let map_center = Coord {
11        x: 323_877.,
12        y: 6_399_005.,
13    };
14    let map_center_elevation_meters = 100.;
15    let crs_epsg_code = 3006;
16
17    let mut omap = Omap::new(
18        map_center,
19        Scale::S15_000,
20        Some(crs_epsg_code),
21        Some(map_center_elevation_meters),
22    )
23    .expect("Could not make map with the given CRS-code");
24
25    // coordinates of geometry are in the same units as the map_center, but relative the map_center
26    let polygon = Polygon::new(
27        LineString::new(vec![
28            Coord { x: -50., y: -50. },
29            Coord { x: -50., y: 50. },
30            Coord { x: 50., y: 50. },
31            Coord { x: 50., y: -50. },
32            Coord { x: -50., y: -50. },
33        ]),
34        vec![],
35    );
36    let mut area_object =
37        AreaObject::from_polygon(polygon, AreaSymbol::RoughVineyard, 45.0_f64.to_radians());
38    area_object.add_tag("tag_key", "tag_value");
39
40    let line_string = LineString::new(vec![
41        Coord { x: -60., y: 20. },
42        Coord { x: -20., y: 25. },
43        Coord { x: 0., y: 27.5 },
44        Coord { x: 20., y: 26. },
45        Coord { x: 40., y: 22.5 },
46        Coord { x: 60., y: 20. },
47        Coord { x: 60., y: -20. },
48        Coord { x: -60., y: -20. },
49    ]);
50    let mut line_object = LineObject::from_line_string(line_string, LineSymbol::Contour);
51    line_object.add_elevation_tag(20.);
52
53    let point = Point::new(0.0_f64, 0.0_f64);
54    let point_object = PointObject::from_point(
55        point,
56        PointSymbol::ElongatedDotKnoll,
57        -45.0_f64.to_radians(),
58    );
59
60    let text_point = Point::new(0.0_f64, -30.0_f64);
61    let text = "some text".to_string();
62    let text_object = TextObject::from_point(text_point, TextSymbol::SpotHeight, text);
63
64    omap.add_object(area_object);
65    omap.add_object(line_object);
66    omap.add_object(point_object);
67    omap.add_object(text_object);
68
69    let max_bezier_deviation_meters = 2.5;
70
71    let bez_error = omap::BezierError::new(Some(max_bezier_deviation_meters), None);
72
73    omap.write_to_file(
74        PathBuf::from_str("./simple_example.omap").unwrap(),
75        bez_error,
76    )
77    .expect("Could not write to file");
78}