Skip to content

Instantly share code, notes, and snippets.

@morganherlocker
Created September 16, 2014 20:15
Show Gist options
  • Select an option

  • Save morganherlocker/19304263f124902bf70c to your computer and use it in GitHub Desktop.

Select an option

Save morganherlocker/19304263f124902bf70c to your computer and use it in GitHub Desktop.
requirebin sketch
var tilebelt = require('tilebelt');
var badTile = tilebelt.bboxToTile([100, 0, 101, 2]),
goodTile = tilebelt.bboxToTile([100, 1, 101, 2]);
console.log(goodTile, badTile);
require=function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&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?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(require,module,exports){var polygon=require("turf-polygon");module.exports=function(bbox){var lowLeft=[bbox[0],bbox[1]];var topLeft=[bbox[0],bbox[3]];var topRight=[bbox[2],bbox[3]];var lowRight=[bbox[2],bbox[1]];var poly=polygon([[lowLeft,lowRight,topRight,topLeft,lowLeft]]);return poly}},{"turf-polygon":2}],2:[function(require,module,exports){module.exports=function(coordinates,properties){if(coordinates===null)return new Error("No coordinates passed");var polygon={type:"Feature",geometry:{type:"Polygon",coordinates:coordinates},properties:properties};if(!polygon.properties){polygon.properties={}}return polygon}},{}],tilebelt:[function(require,module,exports){var bboxPolygon=require("turf-bbox-polygon");var d2r=Math.PI/180,r2d=180/Math.PI;function tileToBBOX(tile){return[tile2lon(tile[0],tile[2]),tile2lat(tile[1],tile[2]),tile2lon(tile[0]+1,tile[2]),tile2lat(tile[1]+1,tile[2])]}function tileToGeoJSON(tile){return bboxPolygon(tileToBBOX(tile))}function tile2lon(x,z){return x/Math.pow(2,z)*360-180}function tile2lat(y,z){var n=Math.PI-2*Math.PI*y/Math.pow(2,z);return r2d*Math.atan(.5*(Math.exp(n)-Math.exp(-n)))}function pointToTile(lon,lat,z){var latr=lat*d2r,z2=Math.pow(2,z);return[Math.floor((lon+180)/360*z2),Math.floor((1-Math.log(Math.tan(latr)+1/Math.cos(latr))/Math.PI)/2*z2),z]}function getChildren(tile){return[[tile[0]*2,tile[1]*2,tile[2]+1],[tile[0]*2+1,tile[1]*2,tile[2]+1],[tile[0]*2+1,tile[1]*2+1,tile[2]+1],[tile[0]*2,tile[1]*2+1,tile[2]+1]]}function getParent(tile){if(tile[0]%2===0&&tile[1]%2===0){return[tile[0]/2,tile[1]/2,tile[2]-1]}else if(tile[0]%2===0&&!tile[1]%2===0){return[tile[0]/2,(tile[1]-1)/2,tile[2]-1]}else if(!tile[0]%2===0&&tile[1]%2===0){return[(tile[0]-1)/2,tile[1]/2,tile[2]-1]}else{return[(tile[0]-1)/2,(tile[1]-1)/2,tile[2]-1]}}function getSiblings(tile){return getChildren(getParent(tile))}function hasSiblings(tile,tiles){var siblings=getSiblings(tile);for(var i=0;i<siblings.length;i++){if(!hasTile(tiles,siblings[i]))return false}return true}function hasTile(tiles,tile){for(var i=0;i<tiles.length;i++){if(tilesEqual(tiles[i],tile))return true}return false}function tilesEqual(tile1,tile2){return tile1[0]===tile2[0]&&tile1[1]===tile2[1]&&tile1[2]===tile2[2]}function tileToQuadkey(tile){var index="";for(var z=tile[2];z>0;z--){var b=0;var mask=1<<z-1;if((tile[0]&mask)!==0)b++;if((tile[1]&mask)!==0)b+=2;index+=b.toString()}return index}function quadkeyToTile(quadkey){var x=0;var y=0;var z=quadkey.length;for(var i=z;i>0;i--){var mask=1<<i-1;switch(quadkey[z-i]){case"0":break;case"1":x|=mask;break;case"2":y|=mask;break;case"3":x|=mask;y|=mask;break}}return[x,y,z]}function bboxToTile(bboxCoords){var min=pointToTile(bboxCoords[0],bboxCoords[1],32);var max=pointToTile(bboxCoords[2],bboxCoords[3],32);var bbox=[min[0],min[1],max[0],max[1]];var z=getBboxZoom(bbox);var x=bbox[0]>>32-z;var y=bbox[1]>>32-z;return[x,y,z]}function getBboxZoom(bbox){var MAX_ZOOM=28;for(var z=0;z<MAX_ZOOM;z++){var mask=1<<32-(z+1);if((bbox[0]&mask)!=(bbox[2]&mask)||(bbox[1]&mask)!=(bbox[3]&mask)){return z}}return MAX_ZOOM}module.exports={tileToGeoJSON:tileToGeoJSON,tileToBBOX:tileToBBOX,getChildren:getChildren,getParent:getParent,getSiblings:getSiblings,hasTile:hasTile,hasSiblings:hasSiblings,tilesEqual:tilesEqual,tileToQuadkey:tileToQuadkey,quadkeyToTile:quadkeyToTile,pointToTile:pointToTile,bboxToTile:bboxToTile}},{"turf-bbox-polygon":1}]},{},[]);var tilebelt=require("tilebelt");var badTile=tilebelt.bboxToTile([100,0,101,2]),goodTile=tilebelt.bboxToTile([100,1,101,2]);console.log(goodTile,badTile);
{
"name": "requirebin-sketch",
"version": "1.0.0",
"dependencies": {
"tilebelt": "0.5.1"
}
}
<style type='text/css'>html, body { margin: 0; padding: 0; border: 0; }
body, html { height: 100%; width: 100%; }</style>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment