+ points.rs generator
This commit is contained in:
44
src/main.rs
44
src/main.rs
@ -1,17 +1,55 @@
|
|||||||
use osmpbf::*;
|
use osmpbf::*;
|
||||||
|
use std::fs::File;
|
||||||
|
use std::io::{BufWriter, Write};
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let reader = ElementReader::from_path(
|
let reader = ElementReader::from_path(
|
||||||
"/mnt/c/Users/dongho/Desktop/ekstrahMap/assets/south-korea-latest.osm.pbf",
|
"/mnt/c/Users/dongho/Desktop/ekstrahMap/assets/south-korea-latest.osm.pbf",
|
||||||
);
|
);
|
||||||
|
let file = File::create("./src/points.rs").expect("Failed to create File 'points.rs'");
|
||||||
|
let mut writer = BufWriter::new(file);
|
||||||
|
// Insert Macro_rules for gettign dynamic size of array
|
||||||
|
//
|
||||||
|
let mac_rules_and_init_file: &str = r#"macro_rules! array_size {
|
||||||
|
($array:expr) => {{
|
||||||
|
let mu size = 0;
|
||||||
|
for _ in $array {
|
||||||
|
size += 1;
|
||||||
|
}
|
||||||
|
size
|
||||||
|
}}
|
||||||
|
}
|
||||||
|
|
||||||
|
struct point {
|
||||||
|
lat: f64,
|
||||||
|
lon: f64,
|
||||||
|
}
|
||||||
|
|
||||||
|
pub const POINTS: [point; array_size!(POINTS)] = [
|
||||||
|
"#;
|
||||||
|
|
||||||
|
let endian_file: &str = r#"];"#;
|
||||||
|
let _ = writer.write_all(mac_rules_and_init_file.as_bytes());
|
||||||
let mut nodes = 0_u64;
|
let mut nodes = 0_u64;
|
||||||
|
let mut max_lat: f64 = 0.0;
|
||||||
|
let mut min_lat: f64 = 40.0;
|
||||||
|
let mut min_lon: f64 = 130.0;
|
||||||
|
let mut max_lon: f64 = 120.0;
|
||||||
let _ = reader.expect("REASON").for_each(|element| {
|
let _ = reader.expect("REASON").for_each(|element| {
|
||||||
if let Element::DenseNode(node) = element {
|
if let Element::DenseNode(node) = element {
|
||||||
let lat: f64 = node.lat();
|
let lat: f64 = node.lat();
|
||||||
let lon: f64 = node.lon();
|
let lon: f64 = node.lon();
|
||||||
let id: i64 = node.id();
|
let lat_lon_str: String = format!("points {{ lat: {}, lon: {} }}, \n", lat, lon);
|
||||||
println!("Node: {id}, Latitude: {lat}, Longitude: {lon}");
|
let _ = writer.write_all(lat_lon_str.as_bytes());
|
||||||
|
max_lon = if lon > max_lon { lon } else { max_lon };
|
||||||
|
max_lat = if lat > max_lat { lat } else { max_lat };
|
||||||
|
min_lon = if lon < min_lon { lon } else { min_lon };
|
||||||
|
min_lat = if lat < min_lat { lat } else { min_lat };
|
||||||
|
nodes += 1;
|
||||||
|
// println!("Latitude: {lat}, Longitude: {lon}");
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
println!("Number of ways: {nodes}");
|
let _ = writer.write_all(endian_file.as_bytes());
|
||||||
|
println!("Number of Nodes: {nodes}");
|
||||||
|
println!("Max Lat: {max_lat}, Min Lat: {min_lat}, Max Lon: {max_lon}, Min Lon: {min_lon}");
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user