asdfasdf
This commit is contained in:
@@ -13,41 +13,24 @@ const calculatePolygonArea = (coordinates) => {
|
|||||||
console.log('Invalid coordinates for area calculation:', coordinates);
|
console.log('Invalid coordinates for area calculation:', coordinates);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('Calculating area for coordinates:', coordinates);
|
console.log('Calculating area for coordinates:', coordinates);
|
||||||
|
|
||||||
// Shoelace formula for polygon area
|
|
||||||
// Coordinates are in [latitude, longitude] format (not GeoJSON standard)
|
|
||||||
let area = 0;
|
let area = 0;
|
||||||
const n = coordinates.length;
|
const n = coordinates.length;
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) {
|
for (let i = 0; i < n; i++) {
|
||||||
const j = (i + 1) % n;
|
const j = (i + 1) % n;
|
||||||
// coordinates[i][0] = latitude, coordinates[i][1] = longitude
|
area += coordinates[i][1] * coordinates[j][0];
|
||||||
area += coordinates[i][1] * coordinates[j][0]; // lng * lat
|
area -= coordinates[j][1] * coordinates[i][0];
|
||||||
area -= coordinates[j][1] * coordinates[i][0]; // lng * lat
|
|
||||||
}
|
}
|
||||||
|
|
||||||
area = Math.abs(area) / 2;
|
area = Math.abs(area) / 2;
|
||||||
console.log('Raw shoelace area (in deg²):', area);
|
console.log('Raw shoelace area (in deg²):', area);
|
||||||
|
const avgLat = coordinates.reduce((sum, coord) => sum + coord[0], 0) / n;
|
||||||
// Convert from decimal degrees to square feet
|
|
||||||
// coordinates are [latitude, longitude] format
|
|
||||||
const avgLat = coordinates.reduce((sum, coord) => sum + coord[0], 0) / n; // coord[0] is latitude
|
|
||||||
console.log('Average latitude:', avgLat);
|
console.log('Average latitude:', avgLat);
|
||||||
|
const metersPerDegreeLat = 111320;
|
||||||
// More accurate conversion using Haversine-based approach
|
const metersPerDegreeLng = 111320 * Math.cos(avgLat * Math.PI / 180);
|
||||||
const latInRadians = avgLat * Math.PI / 180;
|
|
||||||
const metersPerDegreeLat = 111320; // meters per degree latitude (constant)
|
|
||||||
const metersPerDegreeLng = 111320 * Math.cos(latInRadians); // meters per degree longitude (varies with latitude)
|
|
||||||
|
|
||||||
// Convert to square meters, then to square feet
|
|
||||||
const areaInSquareMeters = area * metersPerDegreeLat * metersPerDegreeLng;
|
const areaInSquareMeters = area * metersPerDegreeLat * metersPerDegreeLng;
|
||||||
const areaInSquareFeet = areaInSquareMeters * 10.7639; // 1 m² = 10.7639 ft²
|
const areaInSquareFeet = areaInSquareMeters * 10.7639;
|
||||||
|
|
||||||
console.log('Area in square meters:', areaInSquareMeters);
|
console.log('Area in square meters:', areaInSquareMeters);
|
||||||
console.log('Area in square feet:', areaInSquareFeet);
|
console.log('Area in square feet:', areaInSquareFeet);
|
||||||
|
|
||||||
return areaInSquareFeet;
|
return areaInSquareFeet;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user