describe('Distance Accuracy', function() { this.timeout(120000); // 2 minutes for complex integration tests it('should execute test successfully', async function() { const { expect } = require('chai'); const satloc_processor = require('../../helpers/satloc_application_processor'); const geo_util = require('../../helpers/geo_util'); // Test distance calculation accuracy async function testDistanceAccuracy() { console.log('=== Testing Distance Calculation Accuracy ===\n'); // Test sample with two points from the log file const point1 = { lat: 31.745099434971642, lon: -84.4216519403793, utmX: 744247.173182245, utmY: 3515075.14658573 }; const point2 = { lat: 31.745199434971642, // slightly north lon: -84.4215519403793, // slightly east utmX: 744256.173182245, // approximate UTM X utmY: 3515086.14658573 // approximate UTM Y }; console.log('šŸ“ Test Points:'); console.log(`Point 1: (${point1.lat}, ${point1.lon}) → UTM (${point1.utmX}, ${point1.utmY})`); console.log(`Point 2: (${point2.lat}, ${point2.lon}) → UTM (${point2.utmX}, ${point2.utmY})\n`); // Calculate distance using GPS coordinates (Haversine) - returns km, convert to meters const gpsDistanceKm = geo_util.distance( [point1.lat, point1.lon], [point2.lat, point2.lon] ); const gpsDistance = gpsDistanceKm * 1000; // convert km to meters // Calculate distance using UTM coordinates (Euclidean) const utmDistance = Math.sqrt( Math.pow(point2.utmX - point1.utmX, 2) + Math.pow(point2.utmY - point1.utmY, 2) ); console.log('šŸ“ Distance Calculations:'); console.log(`GPS Distance (Haversine): ${gpsDistance.toFixed(3)} m`); console.log(`UTM Distance (Euclidean): ${utmDistance.toFixed(3)} m`); console.log(`Difference: ${Math.abs(gpsDistance - utmDistance).toFixed(3)} m`); console.log(`Accuracy improvement: ${((Math.abs(gpsDistance - utmDistance) / gpsDistance) * 100).toFixed(2)}% difference\n`); // Test with processor's calculateDistance function console.log('šŸ”§ Processor calculateDistance() function test:'); const SatLocProcessor = satloc_processor; const processor = new SatLocProcessor(); // Test with GPS coordinates (should use Haversine) const processorGPS = processor.calculateDistance( {lat: point1.lat, lon: point1.lon}, {lat: point2.lat, lon: point2.lon} ); console.log(`Processor GPS result: ${processorGPS.toFixed(3)} m`); // Test with UTM coordinates (should use Euclidean) const processorUTM = processor.calculateDistance( {x: point1.utmX, y: point1.utmY}, {x: point2.utmX, y: point2.utmY} ); console.log(`Processor UTM result: ${processorUTM.toFixed(3)} m`); console.log('\nāœ… UTM coordinates provide more accurate distance calculations for agricultural applications!'); } // Run the test testDistanceAccuracy().catch(console.error); }); });