New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

@mapbox/geo-viewport

Package Overview
Dependencies
Maintainers
14
Versions
6
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mapbox/geo-viewport - npm Package Compare versions

Comparing version 0.4.1 to 0.5.0-dev

4

CHANGELOG.md
# CHANGELOG
## v0.5.0
* Update viewport method to take an optional `allowAntiMeridian` parameter
## v0.4.0

@@ -4,0 +8,0 @@

2

geo-viewport.js

@@ -1,1 +0,1 @@

!function(f){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=f();else if("function"==typeof define&&define.amd)define([],f);else{var g;g="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,g.geoViewport=f()}}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a="function"==typeof require&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){function fetchMerc(tileSize){return tileSize=tileSize||256,smCache[tileSize]||(smCache[tileSize]=new SphericalMercator({size:tileSize})),smCache[tileSize]}function getAdjusted(base,ratios,allowFloat){var adjusted=Math.min(base-Math.log(ratios[0])/Math.log(2),base-Math.log(ratios[1])/Math.log(2));return allowFloat?adjusted:Math.floor(adjusted)}function viewport(bounds,dimensions,minzoom,maxzoom,tileSize,allowFloat){minzoom=void 0===minzoom?0:minzoom,maxzoom=void 0===maxzoom?20:maxzoom;var merc=fetchMerc(tileSize),base=maxzoom,bl=merc.px([bounds[0],bounds[1]],base),tr=merc.px([bounds[2],bounds[3]],base),width=tr[0]-bl[0],height=bl[1]-tr[1],ratios=[width/dimensions[0],height/dimensions[1]],center=[(bounds[0]+bounds[2])/2,(bounds[1]+bounds[3])/2],adjusted=getAdjusted(base,ratios,allowFloat);return{center:center,zoom:Math.max(minzoom,Math.min(maxzoom,adjusted))}}function bounds(viewport,zoom,dimensions,tileSize){void 0!==viewport.lon&&(viewport=[viewport.lon,viewport.lat]);var merc=fetchMerc(tileSize),px=merc.px(viewport,zoom),tl=merc.ll([px[0]-dimensions[0]/2,px[1]-dimensions[1]/2],zoom),br=merc.ll([px[0]+dimensions[0]/2,px[1]+dimensions[1]/2],zoom);return[tl[0],br[1],br[0],tl[1]]}var SphericalMercator=require("@mapbox/sphericalmercator"),smCache={};module.exports.viewport=viewport,module.exports.bounds=bounds},{"@mapbox/sphericalmercator":2}],2:[function(require,module,exports){var SphericalMercator=function(){function isFloat(n){return Number(n)===n&&n%1!=0}function SphericalMercator(options){if(options=options||{},this.size=options.size||256,!cache[this.size]){var size=this.size,c=cache[this.size]={};c.Bc=[],c.Cc=[],c.zc=[],c.Ac=[];for(var d=0;d<30;d++)c.Bc.push(size/360),c.Cc.push(size/(2*Math.PI)),c.zc.push(size/2),c.Ac.push(size),size*=2}this.Bc=cache[this.size].Bc,this.Cc=cache[this.size].Cc,this.zc=cache[this.size].zc,this.Ac=cache[this.size].Ac}var cache={},D2R=Math.PI/180,R2D=180/Math.PI,A=6378137,MAXEXTENT=20037508.342789244;return SphericalMercator.prototype.px=function(ll,zoom){if(isFloat(zoom)){var size=this.size*Math.pow(2,zoom),d=size/2,bc=size/360,cc=size/(2*Math.PI),ac=size,f=Math.min(Math.max(Math.sin(D2R*ll[1]),-.9999),.9999),x=d+ll[0]*bc,y=d+.5*Math.log((1+f)/(1-f))*-cc;return x>ac&&(x=ac),y>ac&&(y=ac),[x,y]}var d=this.zc[zoom],f=Math.min(Math.max(Math.sin(D2R*ll[1]),-.9999),.9999),x=Math.round(d+ll[0]*this.Bc[zoom]),y=Math.round(d+.5*Math.log((1+f)/(1-f))*-this.Cc[zoom]);return x>this.Ac[zoom]&&(x=this.Ac[zoom]),y>this.Ac[zoom]&&(y=this.Ac[zoom]),[x,y]},SphericalMercator.prototype.ll=function(px,zoom){if(isFloat(zoom)){var size=this.size*Math.pow(2,zoom),bc=size/360,cc=size/(2*Math.PI),zc=size/2,g=(px[1]-zc)/-cc,lon=(px[0]-zc)/bc,lat=R2D*(2*Math.atan(Math.exp(g))-.5*Math.PI);return[lon,lat]}var g=(px[1]-this.zc[zoom])/-this.Cc[zoom],lon=(px[0]-this.zc[zoom])/this.Bc[zoom],lat=R2D*(2*Math.atan(Math.exp(g))-.5*Math.PI);return[lon,lat]},SphericalMercator.prototype.bbox=function(x,y,zoom,tms_style,srs){tms_style&&(y=Math.pow(2,zoom)-1-y);var ll=[x*this.size,(+y+1)*this.size],ur=[(+x+1)*this.size,y*this.size],bbox=this.ll(ll,zoom).concat(this.ll(ur,zoom));return"900913"===srs?this.convert(bbox,"900913"):bbox},SphericalMercator.prototype.xyz=function(bbox,zoom,tms_style,srs){"900913"===srs&&(bbox=this.convert(bbox,"WGS84"));var ll=[bbox[0],bbox[1]],ur=[bbox[2],bbox[3]],px_ll=this.px(ll,zoom),px_ur=this.px(ur,zoom),x=[Math.floor(px_ll[0]/this.size),Math.floor((px_ur[0]-1)/this.size)],y=[Math.floor(px_ur[1]/this.size),Math.floor((px_ll[1]-1)/this.size)],bounds={minX:Math.min.apply(Math,x)<0?0:Math.min.apply(Math,x),minY:Math.min.apply(Math,y)<0?0:Math.min.apply(Math,y),maxX:Math.max.apply(Math,x),maxY:Math.max.apply(Math,y)};if(tms_style){var tms={minY:Math.pow(2,zoom)-1-bounds.maxY,maxY:Math.pow(2,zoom)-1-bounds.minY};bounds.minY=tms.minY,bounds.maxY=tms.maxY}return bounds},SphericalMercator.prototype.convert=function(bbox,to){return"900913"===to?this.forward(bbox.slice(0,2)).concat(this.forward(bbox.slice(2,4))):this.inverse(bbox.slice(0,2)).concat(this.inverse(bbox.slice(2,4)))},SphericalMercator.prototype.forward=function(ll){var xy=[A*ll[0]*D2R,A*Math.log(Math.tan(.25*Math.PI+.5*ll[1]*D2R))];return xy[0]>MAXEXTENT&&(xy[0]=MAXEXTENT),xy[0]<-MAXEXTENT&&(xy[0]=-MAXEXTENT),xy[1]>MAXEXTENT&&(xy[1]=MAXEXTENT),xy[1]<-MAXEXTENT&&(xy[1]=-MAXEXTENT),xy},SphericalMercator.prototype.inverse=function(xy){return[xy[0]*R2D/A,(.5*Math.PI-2*Math.atan(Math.exp(-xy[1]/A)))*R2D]},SphericalMercator}();void 0!==module&&void 0!==exports&&(module.exports=exports=SphericalMercator)},{}]},{},[1])(1)});
!function(f){"object"==typeof exports&&"undefined"!=typeof module?module.exports=f():"function"==typeof define&&define.amd?define([],f):("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).geoViewport=f()}(function(){return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var l="function"==typeof require&&require;if(!u&&l)return l(o,!0);if(i)return i(o,!0);l=new Error("Cannot find module '"+o+"'");throw l.code="MODULE_NOT_FOUND",l}l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n||e)},l,l.exports,e,t,n,r)}return n[o].exports}for(var i="function"==typeof require&&require,o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var SphericalMercator=require("@mapbox/sphericalmercator"),smCache={};function fetchMerc(tileSize){return smCache[tileSize=tileSize||256]||(smCache[tileSize]=new SphericalMercator({size:tileSize})),smCache[tileSize]}module.exports.viewport=function(height,ratios,minzoom,maxzoom,width,zoom){minzoom=void 0===minzoom?0:minzoom,maxzoom=void 0===maxzoom?20:maxzoom;var merc=fetchMerc(width),center=maxzoom,centerPixelX=merc.px([height[0],height[1]],center),centerPixelY=merc.px([height[2],height[3]],center),width=centerPixelY[0]-centerPixelX[0],height=centerPixelX[1]-centerPixelY[1],centerPixelX=centerPixelX[0]+width/2,centerPixelY=centerPixelY[1]+height/2,ratios=[width/ratios[0],height/ratios[1]],zoom=function(base,adjusted,allowFloat){adjusted=Math.min(base-Math.log(adjusted[0])/Math.log(2),base-Math.log(adjusted[1])/Math.log(2));return allowFloat?adjusted:Math.floor(adjusted)}(center,ratios,zoom),center=merc.ll([centerPixelX,centerPixelY],center),zoom=Math.max(minzoom,Math.min(maxzoom,zoom));return{center:center,zoom:zoom}},module.exports.bounds=function(tl,br,dimensions,px){void 0!==tl.lon&&(tl=[tl.lon,tl.lat]);var merc=fetchMerc(px),px=merc.px(tl,br),tl=merc.ll([px[0]-dimensions[0]/2,px[1]-dimensions[1]/2],br),br=merc.ll([px[0]+dimensions[0]/2,px[1]+dimensions[1]/2],br);return[tl[0],br[1],br[0],tl[1]]}},{"@mapbox/sphericalmercator":2}],2:[function(require,module,exports){var SphericalMercator=function(){var cache={},D2R=Math.PI/180,R2D=180/Math.PI,A=6378137,MAXEXTENT=20037508.342789244;function isFloat(n){return Number(n)===n&&n%1!=0}function SphericalMercator(options){if(options=options||{},this.size=options.size||256,!cache[this.size]){var size=this.size,c=cache[this.size]={};c.Bc=[],c.Cc=[],c.zc=[],c.Ac=[];for(var d=0;d<30;d++)c.Bc.push(size/360),c.Cc.push(size/(2*Math.PI)),c.zc.push(size/2),c.Ac.push(size),size*=2}this.Bc=cache[this.size].Bc,this.Cc=cache[this.size].Cc,this.zc=cache[this.size].zc,this.Ac=cache[this.size].Ac}return SphericalMercator.prototype.px=function(ll,zoom){if(isFloat(zoom)){var f=this.size*Math.pow(2,zoom),d=f/2,x=f/360,y=f/(2*Math.PI),ac=f,f=Math.min(Math.max(Math.sin(D2R*ll[1]),-.9999),.9999);return ac<(x=d+ll[0]*x)&&(x=ac),ac<(y=d+.5*Math.log((1+f)/(1-f))*-y)&&(y=ac),[x,y]}d=this.zc[zoom],f=Math.min(Math.max(Math.sin(D2R*ll[1]),-.9999),.9999),x=Math.round(d+ll[0]*this.Bc[zoom]),y=Math.round(d+.5*Math.log((1+f)/(1-f))*-this.Cc[zoom]);return x>this.Ac[zoom]&&(x=this.Ac[zoom]),y>this.Ac[zoom]&&(y=this.Ac[zoom]),[x,y]},SphericalMercator.prototype.ll=function(px,zoom){if(isFloat(zoom)){var zc=this.size*Math.pow(2,zoom),bc=zc/360,g=zc/(2*Math.PI),zc=zc/2,g=(px[1]-zc)/-g;return[(px[0]-zc)/bc,R2D*(2*Math.atan(Math.exp(g))-.5*Math.PI)]}g=(px[1]-this.zc[zoom])/-this.Cc[zoom];return[(px[0]-this.zc[zoom])/this.Bc[zoom],R2D*(2*Math.atan(Math.exp(g))-.5*Math.PI)]},SphericalMercator.prototype.bbox=function(x,ur,bbox,ll,srs){ll&&(ur=Math.pow(2,bbox)-1-ur);ll=[x*this.size,(+ur+1)*this.size],ur=[(+x+1)*this.size,ur*this.size],bbox=this.ll(ll,bbox).concat(this.ll(ur,bbox));return"900913"===srs?this.convert(bbox,"900913"):bbox},SphericalMercator.prototype.xyz=function(bounds,tms,tms_style,x){"900913"===x&&(bounds=this.convert(bounds,"WGS84"));var px_ur=[bounds[0],bounds[1]],x=[bounds[2],bounds[3]],bounds=this.px(px_ur,tms),px_ur=this.px(x,tms),x=[Math.floor(bounds[0]/this.size),Math.floor((px_ur[0]-1)/this.size)],bounds=[Math.floor(px_ur[1]/this.size),Math.floor((bounds[1]-1)/this.size)],bounds={minX:Math.min.apply(Math,x)<0?0:Math.min.apply(Math,x),minY:Math.min.apply(Math,bounds)<0?0:Math.min.apply(Math,bounds),maxX:Math.max.apply(Math,x),maxY:Math.max.apply(Math,bounds)};return tms_style&&(tms={minY:Math.pow(2,tms)-1-bounds.maxY,maxY:Math.pow(2,tms)-1-bounds.minY},bounds.minY=tms.minY,bounds.maxY=tms.maxY),bounds},SphericalMercator.prototype.convert=function(bbox,to){return"900913"===to?this.forward(bbox.slice(0,2)).concat(this.forward(bbox.slice(2,4))):this.inverse(bbox.slice(0,2)).concat(this.inverse(bbox.slice(2,4)))},SphericalMercator.prototype.forward=function(xy){xy=[A*xy[0]*D2R,A*Math.log(Math.tan(.25*Math.PI+.5*xy[1]*D2R))];return xy[0]>MAXEXTENT&&(xy[0]=MAXEXTENT),xy[0]<-MAXEXTENT&&(xy[0]=-MAXEXTENT),xy[1]>MAXEXTENT&&(xy[1]=MAXEXTENT),xy[1]<-MAXEXTENT&&(xy[1]=-MAXEXTENT),xy},SphericalMercator.prototype.inverse=function(xy){return[xy[0]*R2D/A,(.5*Math.PI-2*Math.atan(Math.exp(-xy[1]/A)))*R2D]},SphericalMercator}();void 0!==module&&void 0!==exports&&(module.exports=exports=SphericalMercator)},{}]},{},[1])(1)});

@@ -14,10 +14,12 @@ var SphericalMercator = require('@mapbox/sphericalmercator');

function fetchMerc(tileSize) {
function fetchMerc(tileSize, allowAntiMeridian) {
tileSize = tileSize || 256;
antiMeridian = allowAntiMeridian || false;
if (!smCache[tileSize]) {
smCache[tileSize] = new SphericalMercator({ size: tileSize });
var cacheKey = tileSize + String(antiMeridian);
if (!smCache[cacheKey]) {
smCache[cacheKey] = new SphericalMercator({ size: tileSize, antimeridian: antiMeridian });
}
return smCache[tileSize];
return smCache[cacheKey];
}

@@ -33,6 +35,6 @@

function viewport(bounds, dimensions, minzoom, maxzoom, tileSize, allowFloat) {
function viewport(bounds, dimensions, minzoom, maxzoom, tileSize, allowFloat, allowAntiMeridian) {
minzoom = (minzoom === undefined) ? 0 : minzoom;
maxzoom = (maxzoom === undefined) ? 20 : maxzoom;
var merc = fetchMerc(tileSize);
var merc = fetchMerc(tileSize, allowAntiMeridian);
var base = maxzoom;

@@ -39,0 +41,0 @@ var bl = merc.px([bounds[0], bounds[1]], base);

@@ -12,9 +12,11 @@ {

},
"version": "0.4.1",
"version": "0.5.0-dev",
"dependencies": {
"@mapbox/sphericalmercator": "~1.1.0"
"@mapbox/sphericalmercator": "^1.2.0-dev"
},
"scripts": {
"test": "tap test/*.js",
"build": "browserify -s geoViewport index.js | uglifyjs -c > geo-viewport.js"
"test": "nyc tap test/*.js",
"build": "browserify -s geoViewport index.js | uglifyjs -c > geo-viewport.js",
"coverage": "nyc report --reporter html && opener coverage/index.html",
"upload-coverage": "nyc report --reporter json && codecov -f ./coverage/coverage-final.json"
},

@@ -29,8 +31,17 @@ "keywords": [

"browserify": "^13.0.0",
"uglify-js": "^2.6.2",
"tap": "^5.7.0"
"codecov": "^3.8.1",
"nyc": "^15.1.0",
"opener": "^1.5.2",
"tap": "^5.7.0",
"uglify-js": "^3.12.1"
},
"main": "index.js",
"homepage": "https://github.com/mapbox/geo-viewport",
"description": "convert between viewports and extents"
}
"description": "convert between viewports and extents",
"nyc": {
"all": true,
"include": [
"index.js"
]
}
}

@@ -1,2 +0,2 @@

[![Build Status](https://travis-ci.org/mapbox/geo-viewport.svg)](https://travis-ci.org/mapbox/geo-viewport)
[![Build Status](https://travis-ci.com/mapbox/geo-viewport.svg)](https://travis-ci.com/mapbox/geo-viewport) [![codecov](https://codecov.io/gh/mapbox/geo-viewport/branch/master/graph/badge.svg)](https://codecov.io/gh/mapbox/geo-viewport)

@@ -75,3 +75,3 @@ # geo-viewport

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

@@ -78,0 +78,0 @@ 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.

@@ -67,2 +67,16 @@ var viewport = require('../'),

test('viewport across the antimeridian', function(t) {
t.ok(areViewportsApproximatelyEqual(
viewport.viewport([175, -43, 190, -43], [300, 200], undefined, undefined, 512, true, false),
{ center: [177.5000001490116, -43.00000017011762], zoom: 5.398743777929521 }
));
t.ok(areViewportsApproximatelyEqual(
viewport.viewport([175, -43, 190, -43], [300, 200], undefined, undefined, 512, true, true),
{ center: [182.50000018626451, -43.00000017011762], zoom: 3.8137812127148685 }
));
t.end();
});
test('bounds for 512px tiles', function(t) {

@@ -69,0 +83,0 @@ var bounds = viewport.bounds([-77.036556, 38.897708], 17, [1080, 350], 512);

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc