File size: 1,857 Bytes
7c2c194
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/**
 * Utility functions for calculating rectangular farm boundaries
 */

/**
 * Calculate the 4 corner points of a rectangle from center point and farm size
 * @param centerLat - Center latitude
 * @param centerLng - Center longitude  
 * @param farmSizeHectares - Farm size in hectares
 * @returns Object containing the 4 corner points
 */
export function calculateRectangleCorners(
  centerLat: number,
  centerLng: number,
  farmSizeHectares: number
) {
  // Convert hectares to square meters
  const farmSizeSquareMeters = farmSizeHectares * 10000;
  
  // Calculate the side length of a square with this area
  const sideLengthMeters = Math.sqrt(farmSizeSquareMeters);
  
  // Convert meters to degrees (approximate)
  // 1 degree latitude ≈ 111,000 meters
  // 1 degree longitude ≈ 111,000 * cos(latitude) meters
  const latOffset = sideLengthMeters / (2 * 111000);
  const lngOffset = sideLengthMeters / (2 * 111000 * Math.cos(centerLat * Math.PI / 180));
  
  return {
    northEast: {
      lat: centerLat + latOffset,
      lng: centerLng + lngOffset,
      altitude: 0
    },
    northWest: {
      lat: centerLat + latOffset,
      lng: centerLng - lngOffset,
      altitude: 0
    },
    southEast: {
      lat: centerLat - latOffset,
      lng: centerLng + lngOffset,
      altitude: 0
    },
    southWest: {
      lat: centerLat - latOffset,
      lng: centerLng - lngOffset,
      altitude: 0
    }
  };
}

/**
 * Calculate rectangle dimensions from farm size
 * @param farmSizeHectares - Farm size in hectares
 * @returns Object with width and height in meters
 */
export function calculateRectangleDimensions(farmSizeHectares: number) {
  const farmSizeSquareMeters = farmSizeHectares * 10000;
  const sideLengthMeters = Math.sqrt(farmSizeSquareMeters);
  
  return {
    width: sideLengthMeters,
    height: sideLengthMeters
  };
}