basic_usage/
basic_usage.rs1use fastgeotoolkit::{
2 decode_polyline, validate_coordinates_rust,
3 calculate_track_statistics_rust, simplify_coordinates_rust
4};
5
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7 println!("fastGeoToolkit Basic Usage Examples");
8 println!("====================================");
9
10 println!("\n1. Polyline Decoding:");
12 let polyline = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
13 let coordinates = decode_polyline(polyline);
14 println!("Decoded {} points from polyline", coordinates.len());
15
16 if !coordinates.is_empty() {
17 println!("First point: [{:.6}, {:.6}]", coordinates[0][0], coordinates[0][1]);
18 println!("Last point: [{:.6}, {:.6}]",
19 coordinates[coordinates.len()-1][0],
20 coordinates[coordinates.len()-1][1]);
21 }
22
23 println!("\n2. Coordinate Validation:");
25 let test_coords = vec![
26 [40.7128, -74.0060], [91.0, -181.0], [0.0, 0.0], [51.5074, -0.1278], ];
31
32 let (valid_count, issues) = validate_coordinates_rust(&test_coords);
33 println!("Valid coordinates: {}/{}", valid_count, test_coords.len());
34 for issue in issues {
35 println!(" - {}", issue);
36 }
37
38 println!("\n3. Track Statistics:");
40 let track = vec![
41 [40.7128, -74.0060], [40.7589, -73.9851], [40.7831, -73.9712], [40.7505, -73.9934], ];
46
47 if let Some((distance, point_count, bbox)) = calculate_track_statistics_rust(&track) {
48 println!("Distance: {:.2} km", distance);
49 println!("Points: {}", point_count);
50 println!("Bounding box: [{:.4}, {:.4}, {:.4}, {:.4}]",
51 bbox[0], bbox[1], bbox[2], bbox[3]);
52 }
53
54 println!("\n4. Track Simplification:");
56 let dense_track: Vec<[f64; 2]> = (0..100)
57 .map(|i| [40.0 + i as f64 * 0.001, -74.0 + i as f64 * 0.001])
58 .collect();
59
60 let simplified = simplify_coordinates_rust(&dense_track, 0.005);
61 println!("Original points: {}", dense_track.len());
62 println!("Simplified points: {}", simplified.len());
63 println!("Reduction: {:.1}%",
64 (1.0 - simplified.len() as f64 / dense_track.len() as f64) * 100.0);
65
66 Ok(())
67}