default_write/
default_write.rs1#![expect(
2 clippy::print_stdout,
3 reason = "the example intentionally displays the map data it reads"
4)]
5#![expect(
6 clippy::unwrap_used,
7 reason = "the bundled default map is known to contain these symbols and colors"
8)]
9
10use geo_types::{Coord, LineString};
11#[cfg(feature = "geo_ref")]
12use omap::geo_referencing::CrsType;
13use omap::{
14 Code, Error, Omap,
15 colors::Color,
16 objects::LineObject,
17 symbols::{PublicOrPrivateSymbol, Symbol, WeakLinePathSymbol},
18};
19
20fn main() -> Result<(), Error> {
21 #[cfg(feature = "geo_ref")]
22 let mut map = {
23 let proj_center = Coord {
24 x: 463_575.5,
25 y: 6_833_849.6,
26 };
27 let map_center_elevation_meters = 2_469.;
28 let crs_epsg_code = 25832;
29 Omap::default_15_000_geo_referenced(
30 proj_center,
31 CrsType::Epsg(crs_epsg_code),
32 map_center_elevation_meters,
33 )?
34 };
35 #[cfg(not(feature = "geo_ref"))]
36 let mut map = Omap::default_15_000()?;
37
38 for color in map.colors.iter() {
39 match color {
40 Color::SpotColor(ref_cell) => {
41 let b = ref_cell.try_borrow().unwrap();
42 println!("{} with spot name {}", b.color_name, b.spotcolor_name);
43 }
44 Color::MixedColor(ref_cell) => {
45 println!("{}", ref_cell.try_borrow().unwrap().color_name);
46 }
47 }
48 }
49
50 let erosion_gully = map
51 .symbols
52 .get_symbol_by_code(Code::new(107, 0, 0))
53 .unwrap()
54 .downgrade();
55
56 let mut ls = LineObject::new(
57 WeakLinePathSymbol::try_from(erosion_gully).unwrap(),
58 LineString::new(vec![Coord { x: 0., y: 0. }, Coord { x: 200., y: 100. }]),
60 );
61 ls.tags.insert("Some Key".to_owned(), "My value".to_owned());
62
63 map.parts.0[0].add_object(ls);
64
65 println!("\nCombined Line symbols:");
66 for symbol in map.symbols.iter() {
67 if let Symbol::CombinedLine(s) = symbol {
68 println!("{}", s.borrow().common.name);
69 }
70 }
71 if let Some(s) = map.symbols.get_symbol_by_name("Railway, Olive background") {
72 println!("{s:?}");
73 }
74
75 let mut num = 0;
76 for symbol in map.symbols.iter() {
77 if let Symbol::Line(s) = symbol {
78 let borrowed = s.borrow();
79
80 if let Some(_ss_) = &borrowed.start_symbol {
81 num += 1;
82 }
83 if let Some(_ms_) = &borrowed.mid_symbol {
84 num += 1;
85 }
86 if let Some(_ds_) = &borrowed.dash_symbol {
87 num += 1;
88 }
89 if let Some(_es_) = &borrowed.end_symbol {
90 num += 1;
91 }
92 }
93 if let Symbol::CombinedLine(s) = symbol {
94 let borrowed = s.borrow();
95
96 for part in borrowed.components() {
97 if let PublicOrPrivateSymbol::Private(s) = part {
98 if let Some(_ss_) = &s.start_symbol {
99 num += 1;
100 }
101 if let Some(_ms_) = &s.mid_symbol {
102 num += 1;
103 }
104 if let Some(_ds_) = &s.dash_symbol {
105 num += 1;
106 }
107 if let Some(_es_) = &s.end_symbol {
108 num += 1;
109 }
110 }
111 }
112 }
113 }
114 println!("\nNumber of sub symbols in line symbols: {num}");
115
116 map.write_to_file("./test_write.omap")
117}