File size: 921 Bytes
93f151d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import type { TileOrigin } from "./content/maps/mapTypes";

export class MapFrame {
  private readonly originLat: number;
  private readonly originLon: number;
  private readonly metersPerDegreeLat: number;
  private readonly metersPerDegreeLon: number;

  constructor(tileOrigin: TileOrigin) {
    this.originLat = tileOrigin.lat;
    this.originLon = tileOrigin.lon;
    this.metersPerDegreeLat = 111320;
    this.metersPerDegreeLon = 111320 * Math.cos((tileOrigin.lat * Math.PI) / 180);
  }

  gameXZtoLatLon(x: number, z: number): { lat: number; lon: number } {
    return {
      lat: this.originLat - z / this.metersPerDegreeLat,
      lon: this.originLon + x / this.metersPerDegreeLon,
    };
  }

  latLonToGameXZ(lat: number, lon: number): { x: number; z: number } {
    return {
      x: (lon - this.originLon) * this.metersPerDegreeLon,
      z: -(lat - this.originLat) * this.metersPerDegreeLat,
    };
  }
}