0.5.0 • Published 4 years ago

@mapbox/geo-viewport v0.5.0

Weekly downloads
30,650
License
BSD-2-Clause
Repository
github
Last release
4 years ago

Build Status codecov

geo-viewport

Turns bounding boxes / extents into centerpoint & zoom combos for static maps.

Works in node.js and browsers, via browserify or a script tag.

Install

npm install --save @mapbox/geo-viewport

Or use a plugin:

<script src='//api.tiles.mapbox.com/mapbox.js/plugins/geo-viewport/v0.2.1/geo-viewport.js'></script>

The script-tag include exports an object called geoViewport, with methods bounds and viewport documented below.

Example

Live example with Mapbox Static Map API

With Node

var geoViewport = require('@mapbox/geo-viewport');

geoViewport.viewport([
    5.668343999999995,
    45.111511000000014,
    5.852471999999996,
    45.26800200000002
], [640, 480])

// yields
// {
//     center: [
//         5.7604079999999955,
//         45.189756500000016
//     ],
//     zoom: 11
// }

In a browser:

<script src='//api.tiles.mapbox.com/mapbox.js/plugins/geo-viewport/v0.1.1/geo-viewport.js'></script>
<script>
var bounds = geoViewport.viewport([
    5.668343999999995,
    45.111511000000014,
    5.852471999999996,
    45.26800200000002
], [640, 480]);

var center = geoViewport.bounds(
  [-75.03,
  35.25],
  14,
  [600, 400]);

console.log(bounds);
console.log(center);
</script>

api

viewport(bounds, dimensions, minzoom, maxzoom, tileSize, allowFloat, allowAntiMeridian)

Given a WSEN array of bounds and a [x, y] array of pixel dimensions, return a { center: [lon, lat], zoom: zoom } viewport. Use allowFloat to retain float values in the output.

Example:

// first argument is the bounds, and the image is 640x480
geoViewport.viewport([
    5.6683, 45.111, 5.8524, 45.268
], [640, 480])

bounds(viewport, zoom, dimensions, tileSize)

Given a centerpoint as [lon, lat] or { lon, lat }, a zoom, and dimensions as [x, y], return a bounding box.

Example:

geoViewport.bounds([-75.03, 35.25], 14, [600, 400])

tile sizes

Be aware that these calculations are sensitive to tile size. The default size assumed by this library is 256x256px; however, Mapbox Vector Tiles are 512x512px.

For example, to calculating a bounding box for a classic raster-based 256x256 tile:

geoViewport.bounds([-75.03, 35.25], 14, [600, 400], 256)

// since 256 is default, you can omit the tileSize param
geoViewport.bounds([-75.03, 35.25], 14, [600, 400])

To calculate a bounding box for a Mapbox vector tile source, such as an image from the Mapbox Static Image API:

geoViewport.bounds([-75.03, 35.25], 14, [600, 400], 512)

There's a handy blog post discussing the issue here.

mmi-mapsmmimapsmmi-react@chargetrip/javascript-sdk@everything-registry/sub-chunk-578vibemap-constants@react-native-flightmap-gl/android@react-native-flightmap-gl/flightmap@react-native-flightmap-gl/mapskepler.gl-forked-ismakutlkepler.gl.geoiqkepler.gl.sh.custom@hortau/mapstruekepler.gl@alminde/react-native-maps-supercluster@carto/kepler.gl@cirrusct/geo@davisg123/mbgl-renderer@dterekhova/utils@dterekhova/deckgl-layers@gustavoisensee/react-native-map-clustering@flightmap-react-native-android/maps@flowmap.gl/react@flowmap.blue/core@idjokic-spiria/react-native-cluster-map@gon-dev/react-native-map-clustering@goongmaps/goong-map-react-native@ethubert/kepler.gl@infinitebrahmanuniverse/nolb-_map@intcount/intcount-clustering@manivannan372/reactnative-maps-cluster@mpvite/maps@mpvite/react-native-map-clustering@mapxus/react-native-mapxus-sdk@eqworks/kepler.gl@meri-imperiumi/signalk-logbook@khang00/kepler.gl@jbcampbell/react-native-maps-super-cluster@kdn0325/react-native-map-clustering@kepler.gl/deckgl-layers@kepler.gl/utils@react-native-mapbox-gl/maps@revenue-guard/rg-npm-core@portalbeanzvn/cluster@phanisai4u/react-native-maps-super-cluster@phila/mapboard@sebf/kepler.glmrgl-renderermymap.glmjolnir-design-systemreact-native-cluster-mapreact-native-cluster-map-hwanreact-native-clustererreact-native-custom-map-clusteringreact-native-cluster-map-optimusreact-native-maps-clusteringreact-native-maps-clusterizereact-native-maps-markerclusterreact-native-maps-super-clusterreact-native-maps-super-cluster-dongkreact-native-maps-super-cluster-fhreact-native-maps-super-multi-clusterreact-native-maps-use-clusterrs-react-native-map-clusteringreact-native-map-clusterreact-native-map-clusteringreact-native-map-clustering-cfsreact-native-map-clustering-custom-fontreact-native-map-clustering-drivecoreact-native-map-clustering-fhreact-native-map-clustering-flexreact-native-map-clustering-localsagan.glservisofts-componentrescape-placeramesh-paul-kepler.glrg-npmrg-npm-corerg-npm-prodshot-on-targetmapmyindia-map-react-native-betamappls-map-react-nativemapir-mapboxlabmob-react-native-map-clusteringmbgl-renderer@uhaider15/deckgl-layers@uhaider15/utils@tommy2gis/swsk.kepler.gl@vietmap/vietmap-gl-react-native-070@vtmap/vtmap-react-native-sdk@svizzle/mapbox@tamagui/mapsbaba-jsbraheboide-kepler-glerasme-kepler.glfengsheng-rnmaps@shitao1988/swsk-kepler-gl@shitao1988/swsk.kepler.gl
0.5.0-dev

4 years ago

0.5.0

4 years ago

0.4.1

5 years ago

0.4.0

7 years ago

0.3.0

7 years ago

0.2.2

8 years ago