fbw_map_parser/
elevation_grid.rs1pub struct ElevationGrid {
2 pub southwest_latitude: f32,
3 pub southwest_longitude: f32,
4 pub northeast_latitude: f32,
5 pub northeast_longitude: f32,
6 pub rows: usize,
7 pub columns: usize,
8 pub elevation_map: Vec<i16>
9}
10impl ElevationGrid {
11 pub fn new(southwest_latitude: f32, southwest_longitude: f32, northeast_latitude: f32, northeast_longitude: f32, rows: usize, columns: usize) -> Self {
12 let map = vec![0; rows * columns];
13 Self {
14 southwest_latitude,
15 southwest_longitude,
16 northeast_latitude,
17 northeast_longitude,
18 rows,
19 columns,
20 elevation_map: map
21 }
22 }
23
24 pub fn world_to_grid_indices(&mut self, latitude: f32, longitude: f32) -> (f32, f32) {
25 let lat_range = self.northeast_latitude - self.southwest_latitude;
26 let lat_delta = latitude - self.southwest_latitude;
27 let row = f32::min(self.rows as f32 - f32::floor((lat_delta / lat_range) * self.rows as f32), self.rows as f32) - 1.0;
28
29 let long_range = self.northeast_longitude - self.southwest_longitude;
30 let long_delta = longitude - self.southwest_longitude;
31 let column = f32::min(f32::floor((long_delta / long_range) * self.columns as f32), self.columns as f32 - 1.0);
32
33 (row, column)
34 }
35}