A set of tools geospatial tools to help with TMS, Google (XYZ) Tiles.
This library is insipered by GDAL2Tiles, Google Summer of Code 2007 & 2008.
Another great simplistic tile library is tilebelt
.
npm
$ npm install --save global-mercator
web
<script src="https://wzrd.in/standalone/global-mercator@latest"></script>
var globalMercator = require('global-mercator')
var tile = [10, 15, 8] // [x, y, zoom]
globalMercator.tileToBBox(tile)
// [ -165.937, -82.853, -164.531, -82.676 ]
Function | Description |
---|---|
lngLatToMeters(LngLat) | Converts LngLat coordinates to Meters coordinates. |
metersToLngLat(Meters) | Converts Meters coordinates to LngLat coordinates. |
metersToPixels(Meters, zoom) | Converts Meters coordinates to Pixels coordinates. |
lngLatToTile(LngLat, zoom) | Converts LngLat coordinates to TMS Tile. |
lngLatToGoogle(LngLat, zoom) | Converts LngLat coordinates to Google (XYZ) Tile. |
metersToTile(Meters, zoom) | Converts Meters coordinates to TMS Tile. |
pixelsToMeters(Pixels) | Converts Pixels coordinates to Meters coordinates. |
pixelsToTile(Pixels) | Converts Pixels coordinates to TMS Tile. |
tileToBBoxMeters(tile) | Converts TMS Tile to bbox in Meters coordinates. |
tileToBBox(tile) | Converts TMS Tile to bbox in LngLat coordinates. |
googleToBBoxMeters(google) | Converts Google (XYZ) Tile to bbox in Meters coordinates. |
googleToBBox(google) | Converts Google (XYZ) Tile to bbox in LngLat coordinates. |
tileToGoogle(tile) | Converts TMS Tile to Google (XYZ) Tile. |
googleToTile(google) | Converts Google (XYZ) Tile to TMS Tile. |
googleToQuadkey(google) | Converts Google (XYZ) Tile to Quadkey. |
tileToQuadkey(tile) | Converts TMS Tile to QuadKey. |
quadkeyToTile(quadkey) | Converts Quadkey to TMS Tile. |
quadkeyToGoogle(quadkey) | Converts Quadkey to Google (XYZ) Tile. |
hash(tile) | Hash tile for unique id key |
validateTile(tile) | Validates TMS Tile |
validateZoom(zoom) | Validates Zoom level |
validateLngLat(LngLat) | Validates LngLat coordinates |
validatePixels(Pixels) | Validates Pixels coordinates |
maxBBox(BBox[]) | Maximum extent of BBox |
validTile(tile) | Valid Tile |
longitude(degree) | Modifies a Longitude to fit within +/-180 degrees. |
latitude(degree) | Modifies a Latitude to fit within +/-90 degrees. |
pointToTile(lnglat, zoom) | Get the tile for a point at a specified zoom level |
pointToTileFraction(lnglat, zoom) | Get the precise fractional tile location for a point at a zoom level |
wrapTile(tile) | Handles tiles which crosses the 180th meridian |
bboxToTile(bbox) | Get the smallest tile to cover a bbox |
- hash
- pointToTile
- pointToTileFraction
- bboxToCenter
- lngLatToMeters
- metersToLngLat
- metersToPixels
- lngLatToTile
- lngLatToGoogle
- metersToTile
- pixelsToMeters
- pixelsToTile
- tileToBBoxMeters
- tileToBBox
- googleToBBoxMeters
- googleToBBox
- tileToGoogle
- googleToTile
- googleToQuadkey
- tileToQuadkey
- quadkeyToTile
- quadkeyToGoogle
- bboxToMeters
- validateTile
- wrapTile
- validateZoom
- validateLngLat
- maxBBox
- validTile
- latitude
- longitude
- bboxToTile
Hash tile for unique id key
tile
Tile [x, y, z]
var id = globalMercator.hash([312, 480, 4])
//=5728
Returns number hash
Get the tile for a point at a specified zoom level https://github.com/mapbox/tilebelt
lnglat
[number, number] [Longitude, Latitude]zoom
number Zoom levelvalidate
boolean validates LatLng coordinates (optional, defaulttrue
)
var tile = globalMercator.pointToTile([1, 1], 12)
//= [ 2059, 2036, 12 ]
Returns Google Google (XYZ) Tile
Get the precise fractional tile location for a point at a zoom level https://github.com/mapbox/tilebelt
lnglat
[number, number] [Longitude, Latitude]zoom
number Zoom levelvalidate
boolean validates LatLng coordinates (optional, defaulttrue
)
var tile = globalMercator.pointToTileFraction([1, 1], 12)
//= [ 2059.3777777777777, 2036.6216445333432, 12 ]
Returns Google Google (XYZ) Tile
Converts BBox to Center
bbox
BBox [west, south, east, north] coordinatesaccurancy
Object { enable: true, decimal: 6} (optional, default{enable:true,decimal:6}
)
var center = globalMercator.bboxToCenter([90, -45, 85, -50])
//= [ 87.5, -47.5 ]
Returns LngLat center
Converts LngLat coordinates to Meters coordinates.
lnglat
[number, number] [Longitude, Latitude]validate
boolean validates LatLng coordinates (optional, defaulttrue
)accurancy
Object { enable: true, decimal: 6} (optional, default{enable:true,decimal:1}
)
var meters = globalMercator.lngLatToMeters([126, 37])
//=[ 14026255.8, 4439106.7 ]
Returns Meters Meters coordinates
Converts Meters coordinates to LngLat coordinates.
meters
Meters Meters in Mercator [x, y]accurancy
Object { enable: true, decimal: 6} (optional, default{enable:true,decimal:6}
)
var lnglat = globalMercator.metersToLngLat([14026255, 4439106])
//=[ 126, 37 ]
Returns LngLat LngLat coordinates
Converts Meters coordinates to Pixels coordinates.
meters
Meters Meters in Mercator [x, y]zoom
number Zoom leveltileSize
number Tile size (optional, default256
)
var pixels = globalMercator.metersToPixels([14026255, 4439106], 13)
//=[ 1782579.1, 1280877.3, 13 ]
Returns Pixels Pixels coordinates
Converts LngLat coordinates to TMS Tile.
lnglat
[number, number] [Longitude, Latitude]zoom
number Zoom levelvalidate
boolean validates LatLng coordinates (optional, defaulttrue
)
var tile = globalMercator.lngLatToTile([126, 37], 13)
//=[ 6963, 5003, 13 ]
Returns Tile TMS Tile
Converts LngLat coordinates to Google (XYZ) Tile.
lnglat
[number, number] [Longitude, Latitude]zoom
number Zoom levelvalidate
boolean validates LatLng coordinates (optional, defaulttrue
)
var google = globalMercator.lngLatToGoogle([126, 37], 13)
//=[ 6963, 3188, 13 ]
Returns Google Google (XYZ) Tile
Converts Meters coordinates to TMS Tile.
meters
Meters Meters in Mercator [x, y]zoom
number Zoom level
var tile = globalMercator.metersToTile([14026255, 4439106], 13)
//=[ 6963, 5003, 13 ]
Returns Tile TMS Tile
Converts Pixels coordinates to Meters coordinates.
pixels
Pixels Pixels [x, y, zoom]tileSize
number Tile size (optional, default256
)accurancy
Object { enable: true, decimal: 6} (optional, default{enable:true,decimal:6}
)
var meters = globalMercator.pixelsToMeters([1782579, 1280877, 13])
//=[ 14026252.0, 4439099.5 ]
Returns Meters Meters coordinates
Converts Pixels coordinates to TMS Tile.
pixels
Pixels Pixels [x, y, zoom]tileSize
number Tile size (optional, default256
)validate
boolean validates Pixels coordinates (optional, defaulttrue
)
var tile = globalMercator.pixelsToTile([1782579, 1280877, 13])
//=[ 6963, 5003, 13 ]
Returns Tile TMS Tile
Converts TMS Tile to bbox in Meters coordinates.
tile
Tile Tile [x, y, zoom]tileSize
number Tile size (optional, default256
)validate
boolean validates Tile (optional, defaulttrue
)x
number TMS Tile Xy
number TMS Tile Yzoom
number Zoom level
var bbox = globalMercator.tileToBBoxMeters([6963, 5003, 13])
//=[ 14025277.4, 4437016.6, 14030169.4, 4441908.5 ]
Returns BBox bbox extent in [minX, minY, maxX, maxY] order
Converts TMS Tile to bbox in LngLat coordinates.
tile
Tile Tile [x, y, zoom]validate
boolean validates Tile (optional, defaulttrue
)x
number TMS Tile Xy
number TMS Tile Yzoom
number Zoom level
var bbox = globalMercator.tileToBBox([6963, 5003, 13])
//=[ 125.991, 36.985, 126.035, 37.020 ]
Returns BBox bbox extent in [minX, minY, maxX, maxY] order
Converts Google (XYZ) Tile to bbox in Meters coordinates.
google
Google Google [x, y, zoom]
var bbox = globalMercator.googleToBBoxMeters([6963, 3188, 13])
//=[ 14025277.4, 4437016.6, 14030169.4, 4441908.5 ]
Returns BBox bbox extent in [minX, minY, maxX, maxY] order
Converts Google (XYZ) Tile to bbox in LngLat coordinates.
google
Google Google [x, y, zoom]
var bbox = globalMercator.googleToBBox([6963, 3188, 13])
//=[ 125.991, 36.985, 126.035, 37.020 ]
Returns BBox bbox extent in [minX, minY, maxX, maxY] order
Converts TMS Tile to Google (XYZ) Tile.
tile
Tile Tile [x, y, zoom]validate
boolean validates Tile (optional, defaulttrue
)
var google = globalMercator.tileToGoogle([6963, 5003, 13])
//=[ 6963, 3188, 13 ]
Returns Google Google (XYZ) Tile
Converts Google (XYZ) Tile to TMS Tile.
google
Google Google [x, y, zoom]
var tile = globalMercator.googleToTile([6963, 3188, 13])
//=[ 6963, 5003, 13 ]
Returns Tile TMS Tile
Converts Google (XYZ) Tile to Quadkey.
google
Google Google [x, y, zoom]
var quadkey = globalMercator.googleToQuadkey([6963, 3188, 13])
//='1321102330211'
Returns string Microsoft's Quadkey schema
Converts TMS Tile to QuadKey.
tile
Tile Tile [x, y, zoom]validate
boolean validates Tile (optional, defaulttrue
)
var quadkey = globalMercator.tileToQuadkey([6963, 5003, 13])
//='1321102330211'
Returns string Microsoft's Quadkey schema
Converts Quadkey to TMS Tile.
quadkey
string Microsoft's Quadkey schema
var tile = globalMercator.quadkeyToTile('1321102330211')
//=[ 6963, 5003, 13 ]
Returns Tile TMS Tile
Converts Quadkey to Google (XYZ) Tile.
quadkey
string Microsoft's Quadkey schema
var google = globalMercator.quadkeyToGoogle('1321102330211')
//=[ 6963, 3188, 13 ]
Returns Google Google (XYZ) Tile
Converts BBox from LngLat coordinates to Meters coordinates
bbox
BBox extent in [minX, minY, maxX, maxY] order
var meters = globalMercator.bboxToMeters([ 125, 35, 127, 37 ])
//=[ 13914936.3, 4163881.1, 14137575.3, 4439106.7 ]
Returns BBox bbox extent in [minX, minY, maxX, maxY] order
Validates TMS Tile.
tile
Tile Tile [x, y, zoom]validate
boolean validates Tile (optional, defaulttrue
)
globalMercator.validateTile([60, 80, 12])
//=[60, 80, 12]
globalMercator.validateTile([60, -43, 5])
//= Error: Tile <y> must not be less than 0
globalMercator.validateTile([25, 60, 3])
//= Error: Illegal parameters for tile
- Throws Error Will throw an error if TMS Tile is not valid.
Returns Tile TMS Tile
Wrap Tile -- Handles tiles which crosses the 180th meridian or 90th parallel
globalMercator.wrapTile([0, 3, 2])
//= [0, 3, 2] -- Valid Tile X
globalMercator.wrapTile([4, 2, 2])
//= [0, 2, 2] -- Tile 4 does not exist, wrap around to TileX=0
Returns [number, number, number] Wrapped Tile
Validates Zoom level
globalMercator.validateZoom(12)
//=12
globalMercator.validateZoom(-4)
//= Error: <zoom> cannot be less than 0
globalMercator.validateZoom(32)
//= Error: <zoom> cannot be greater than 30
- Throws Error Will throw an error if zoom is not valid.
Returns number zoom Zoom level
Validates LngLat coordinates
lnglat
[number, number] [Longitude, Latitude]validate
boolean validates LatLng coordinates (optional, defaulttrue
)
globalMercator.validateLngLat([-115, 44])
//= [ -115, 44 ]
globalMercator.validateLngLat([-225, 44])
//= Error: LngLat [lng] must be within -180 to 180 degrees
- Throws Error Will throw an error if LngLat is not valid.
Returns LngLat LngLat coordinates
Maximum extent of BBox
array
(BBox | Array<BBox>) BBox [west, south, east, north]
var bbox = globalMercator.maxBBox([[-20, -30, 20, 30], [-110, -30, 120, 80]])
//=[-110, -30, 120, 80]
Returns BBox Maximum BBox
Valid TMS Tile
tile
Tile Tile [x, y, zoom]
globalMercator.validTile([60, 80, 12])
//= true
globalMercator.validTile([60, -43, 5])
//= false
globalMercator.validTile([25, 60, 3])
//= false
Returns boolean valid tile true/false
Modifies a Latitude to fit within +/-90 degrees.
lat
number latitude to modify
globalMercator.latitude(100)
//= -80
Returns number modified latitude
Modifies a Longitude to fit within +/-180 degrees.
lng
number longitude to modify
globalMercator.longitude(190)
//= -170
Returns number modified longitude
Get the smallest tile to cover a bbox
var tile = bboxToTile([-178, 84, -177, 85])
//=tile