use fastgeotoolkit::{
decode_polyline, validate_coordinates_rust,
calculate_track_statistics_rust, simplify_coordinates_rust
};
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("fastGeoToolkit Basic Usage Examples");
println!("====================================");
println!("\n1. Polyline Decoding:");
let polyline = "_p~iF~ps|U_ulLnnqC_mqNvxq`@";
let coordinates = decode_polyline(polyline);
println!("Decoded {} points from polyline", coordinates.len());
if !coordinates.is_empty() {
println!("First point: [{:.6}, {:.6}]", coordinates[0][0], coordinates[0][1]);
println!("Last point: [{:.6}, {:.6}]",
coordinates[coordinates.len()-1][0],
coordinates[coordinates.len()-1][1]);
}
println!("\n2. Coordinate Validation:");
let test_coords = vec![
[40.7128, -74.0060], [91.0, -181.0], [0.0, 0.0], [51.5074, -0.1278], ];
let (valid_count, issues) = validate_coordinates_rust(&test_coords);
println!("Valid coordinates: {}/{}", valid_count, test_coords.len());
for issue in issues {
println!(" - {}", issue);
}
println!("\n3. Track Statistics:");
let track = vec![
[40.7128, -74.0060], [40.7589, -73.9851], [40.7831, -73.9712], [40.7505, -73.9934], ];
if let Some((distance, point_count, bbox)) = calculate_track_statistics_rust(&track) {
println!("Distance: {:.2} km", distance);
println!("Points: {}", point_count);
println!("Bounding box: [{:.4}, {:.4}, {:.4}, {:.4}]",
bbox[0], bbox[1], bbox[2], bbox[3]);
}
println!("\n4. Track Simplification:");
let dense_track: Vec<[f64; 2]> = (0..100)
.map(|i| [40.0 + i as f64 * 0.001, -74.0 + i as f64 * 0.001])
.collect();
let simplified = simplify_coordinates_rust(&dense_track, 0.005);
println!("Original points: {}", dense_track.len());
println!("Simplified points: {}", simplified.len());
println!("Reduction: {:.1}%",
(1.0 - simplified.len() as f64 / dense_track.len() as f64) * 100.0);
Ok(())
}