![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiATM20DamEDMwETP39DOQZmdiZlYvw1Ztl2Lc12bj5CdsVXYmRnbl12ZlN3Lc9CX6MHc0RHaiojIsJye.jpg)
import turf from 'turf'
export default {
TILE_SIZE: 256,
_getMapSize(level) {
return Math.pow(2, level);
},
longitudeToTileX(longitude, zoom) {
let px = this.longitudeToPixelX(longitude, zoom);
return this.pixelXToTileX(px, zoom);
},
latitudeToTileY(latitude, zoom) {
let py = this.latitudeToPixelY(latitude, zoom);
return this.pixelYToTileY(py, zoom);
},
latitudeToPixelY(latitude, zoom) {
let sinLatitude = Math.sin(latitude * Math.PI / 180);
return (0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI)) * (this.TILE_SIZE << zoom);
},
longitudeToPixelX(longitude, zoom) {
return (longitude + 180) / 360 * (this.TILE_SIZE << zoom);
},
_lngToPixelX(longitude, level) {
let x = (longitude + 180) / 360;
let pixelX = Math.floor(x * this._getMapSize(level) * 256 % 256);
return pixelX;
},
_latToPixelY(latitude, level) {
let sinLatitude = Math.sin(latitude * Math.PI / 180);
let y = 0.5 - Math.log((1 + sinLatitude) / (1 - sinLatitude)) / (4 * Math.PI);
let pixelY = Math.floor(y * this._getMapSize(level) * 256 % 256);
return pixelY;
},
pixelXToTileX(pixelX, zoom) {
return Math.floor(Math.min(Math.max(pixelX / this.TILE_SIZE, 0), Math.pow(2, zoom) - 1));
},
pixelYToTileY(pixelY, zoom) {
return Math.floor(Math.min(Math.max(pixelY / this.TILE_SIZE, 0), Math.pow(2, zoom) - 1));
},
}