Function validate_coordinates_rust

Source
pub fn validate_coordinates_rust(coords: &[[f64; 2]]) -> (u32, Vec<String>)
Examples found in repository?
examples/basic_usage.rs (line 32)
6fn main() -> Result<(), Box<dyn std::error::Error>> {
7    println!("fastGeoToolkit Basic Usage Examples");
8    println!("====================================");
9    
10    // Example 1: Decode a polyline
11    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    // Example 2: Validate coordinates
24    println!("\n2. Coordinate Validation:");
25    let test_coords = vec![
26        [40.7128, -74.0060],  // Valid NYC coordinates
27        [91.0, -181.0],       // Invalid coordinates
28        [0.0, 0.0],           // Null island (considered invalid)
29        [51.5074, -0.1278],   // Valid London coordinates
30    ];
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    // Example 3: Calculate track statistics
39    println!("\n3. Track Statistics:");
40    let track = vec![
41        [40.7128, -74.0060],  // NYC
42        [40.7589, -73.9851],  // Times Square
43        [40.7831, -73.9712],  // Central Park
44        [40.7505, -73.9934],  // Empire State Building
45    ];
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    // Example 4: Simplify track
55    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}