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
| const initialResolution = 156543.03392804062;
const originalShift = 2 * Math.PI * 6378137 / 2;
// converts Lat,Lon(Pixels) to Lat,Lon(Meters)
function convertPixelToMeter(pixel, zoom) { // pixel est sous la forme {lat:number,lon:number} et zoom:number
const resolution = initialResolution / Math.pow(2, zoom);
return {
lon: pixel.lon * resolution - originalShift,
lat: pixel.lat * resolution - originalShift
};
}
// converts Lat,Lon(Meters) to Lat,Lon(Degree)
function convertMeterToDeg(meter) { // meter est sous la forme {lat:number,lon:number}
let lon = (meter.lon / originalShift) * 180;
let lat = (meter.lat / originalShift) * 180;
lat = 180 / Math.PI * (2 * Math.atan(Math.exp(lat * Math.PI / 180)) - Math.PI / 2);
return {
lon: lon,
lat: lat
};
}
// si besoin, dans l'autre sens :
// converts Lat,Lon(Deg) to Lat,Lon(Meters)
function convertLatLonToMeters(latlon) { // latlon est sous la forme {lat:number,lon:number}
let lon = latlon.lon * originalShift / 180;
let lat = Math.log(Math.tan((90 + latlon.lat) * Math.PI / 360)) / (Math.PI / 180);
lat = lat * originalShift / 180;
return {lon: lon, lat: lat};
}
// converts Lat,Lon(Meters) to Lat,Lon(Pixels)
function convertMetersToPixel(meters) { // meters est sous la forme {lat:number,lon:number}
const resolution = initialResolution / 2 ** map.getZoom();//zoom actuel de la carte
return {
lon:(meters.lon + originalShift) / resolution,
lat:(meters.lat + originalShift) / resolution
};
} |
Partager