fbw_map_parser/
elevation_grid.rs

1pub 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}