agmission/Development/server/tests/utils/test_distance_accuracy.js

77 lines
3.3 KiB
JavaScript

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);
});
});