天天看點

php矢量瓦片,矢量瓦片相關計算函數

php矢量瓦片,矢量瓦片相關計算函數

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));

},

}