12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182 |
- /**
- * leaflet plugin for plain image map projection
- * @copyright 2016- commenthol
- * @license MIT
- */
- /* globals define */
- ;(function (factory) {
- var L
- if (typeof define === 'function' && define.amd) {
- // AMD
- define(['leaflet'], factory)
- } else if (typeof module !== 'undefined') {
- // Node/CommonJS
- L = require('leaflet')
- module.exports = factory(L)
- } else {
- // Browser globals
- if (typeof window.L === 'undefined') {
- throw new Error('Leaflet must be loaded first')
- }
- factory(window.L)
- }
- }(function (L) {
- /**
- * L.RasterCoords
- * @param {L.map} map - the map used
- * @param {Array} imgsize - [ width, height ] image dimensions
- * @param {Number} [tilesize] - tilesize in pixels. Default=256
- */
- L.RasterCoords = function (map, imgsize, tilesize) {
- this.map = map
- this.width = imgsize[0]
- this.height = imgsize[1]
- this.tilesize = tilesize || 256
- this.zoom = this.zoomLevel()
- if (this.width && this.height) {
- this.setMaxBounds()
- }
- }
- L.RasterCoords.prototype = {
- /**
- * calculate accurate zoom level for the given image size
- */
- zoomLevel: function () {
- return Math.ceil(
- Math.log(
- Math.max(this.width, this.height) /
- this.tilesize
- ) / Math.log(2)
- )
- },
- /**
- * unproject `coords` to the raster coordinates used by the raster image projection
- * @param {Array} coords - [ x, y ]
- * @return {L.LatLng} - internal coordinates
- */
- unproject: function (coords) {
- return this.map.unproject(coords, this.zoom)
- },
- /**
- * project `coords` back to image coordinates
- * @param {Array} coords - [ x, y ]
- * @return {L.LatLng} - image coordinates
- */
- project: function (coords) {
- return this.map.project(coords, this.zoom)
- },
- /**
- * sets the max bounds on map
- */
- setMaxBounds: function () {
- var southWest = this.unproject([0, this.height])
- var northEast = this.unproject([this.width, 0])
- this.map.setMaxBounds(new L.LatLngBounds(southWest, northEast))
- }
- }
- return L.RasterCoords
- }))
- ; // eslint-disable-line semi
|