function getTiles(minLng, maxLng, minLat, maxLat, zoom, callback) {
	var tileMin = tilebelt.pointToTile(minLng, minLat, zoom)
	var tileMax = tilebelt.pointToTile(maxLng, maxLat, zoom)
	var tiles = []
	for(i=tileMin[0];i<tileMax[0] + 1;i++) {
		for(j=tileMax[1];j<tileMin[1] + 1;j++) {
			tiles.push([i,j])
		}
	}
	callback(tiles)
}
function getTiles(bounds, zoom, callback) {
	var tileMin = tilebelt.pointToTile(bounds._southWest.lng, bounds._southWest.lat, zoom)
	var tileMax = tilebelt.pointToTile(bounds._northEast.lng, bounds._northEast.lat, zoom)
	var tiles = []
	for(i=tileMin[0];i<tileMax[0] + 1;i++) {
		for(j=tileMax[1];j<tileMin[1] + 1;j++) {
			tiles.push([i,j])
		}
	}
	callback(tiles)
}
Esempio n. 3
0
module.exports = function(tiles, p) {
	var bbox = tiles.bbox
	var z = tiles.options['zoom-level']
	var topLeft = tilebelt.pointToTile(bbox[2], bbox[1], z)
	var bottomRight = tilebelt.pointToTile(bbox[0], bbox[3], z)
	var tilesToGet = []
	for(x=bottomRight[0];x<topLeft[0] + 1;x++) {
		for(y=bottomRight[1];y<topLeft[1] + 1;y++) {
			tilesToGet.push([x, y, z])
		}
	}
	return getTileUrls(tiles, tilesToGet, p)
}
Esempio n. 4
0
module.exports = function(o, map) {
	if(o.options === null) { return null }
	else {
		var bbox = map.bbox
		var topLeftTile = tilebelt.pointToTile(bbox[0], bbox[3], o.z)
		var bottomRightTile = tilebelt.pointToTile(bbox[2], bbox[1], o.z)
		var tiles = []
		for(x=topLeftTile[0];x<bottomRightTile[0] + 1;x++) {
			for(y=topLeftTile[1];y<bottomRightTile[1] + 1;y++) {
				tiles.push([x, y, o.z])
			}
		}
		return tiles
	}
}
Esempio n. 5
0
File: tylr.js Progetto: chelm/tylr
  tylr.findTileCoverage = function (feature, zoom) {
    var bbox = extent({type: 'FeatureCollection', features: [feature] }),
      parentTile = tileBelt.bboxToTile(bbox),
      tiles = []

    if (parentTile[2] > zoom) {
      var tileObj = {}
      tileObj[tileBelt.pointToTile(bbox[0], bbox[1], zoom).join('-')] = true
      tileObj[tileBelt.pointToTile(bbox[2], bbox[1], zoom).join('-')] = true
      tileObj[tileBelt.pointToTile(bbox[0], bbox[3], zoom).join('-')] = true
      tileObj[tileBelt.pointToTile(bbox[2], bbox[3], zoom).join('-')] = true
      tiles = Object.keys(tileObj)
      tiles = tiles.map(function (t) { return t.split('-') })
    } else {
      tiles = tylr.tilesInParent(parentTile, zoom)
    }

    var tileJSON, tileMatch = []
    tiles.forEach(function (tile) {
      tileJSON = tileBelt.tileToGeoJSON(tile)
      var coords = [[
        [ bbox[0], bbox[1] ],
        [ bbox[2], bbox[1] ],
        [ bbox[2], bbox[3] ],
        [ bbox[0], bbox[3] ],
        [ bbox[0], bbox[1] ]
      ]]
      var polygon = {
        type: 'Feature',
        geometry: {
          coordinates: coords,
          type: 'Polygon'
        }
      }
      try {
        if (intersect(tileJSON, polygon)) {
          tileMatch.push(tile.join('-'))
        }
      } catch (e) {
        console.log(e, tile, feature.properties)
      }

    })
    return tileMatch
  }
Esempio n. 6
0
 var zoomedTiles = zoomedTiles.map(function(tile){
   var centroid =
     turf.centroid(
       turf.bboxPolygon(
         tilebelt.tileToBBOX(tile)
       )
     );
   return tilebelt.pointToTile(
     centroid.geometry.coordinates[0],
     centroid.geometry.coordinates[1], zoom);
 });
Esempio n. 7
0
function getLocked (geom, limits) {
    var locked = [];

    if (geom.type === 'Point') {
        locked.push(tilebelt.pointToTile(geom.coordinates[0], geom.coordinates[1], limits.max_zoom));
    } else if (geom.type === 'MultiPoint') {
        var quadkeys = {};
        for(var i = 0; i < geom.coordinates.length; i++) {
            var tile = tilebelt.pointToTile(geom.coordinates[i][0], geom.coordinates[i][1], limits.max_zoom);
            var quadkey = tilebelt.tileToQuadkey(tile);
            if(!quadkeys[quadkey]) {
                quadkeys[quadkey] = true;
                locked.push(tile);
            }
        }
    } else {
        var seed = tilebelt.bboxToTile(extent(geom));
        if (!seed[3]) seed = [0, 0, 0];
        splitSeek(seed, geom, locked, limits);
        locked = mergeTiles(locked, limits);
    }

    return locked;
}
Esempio n. 8
0
module.exports = function tilePixel (lon, lat, minz, maxz, callback) {
  var minZoom = minz
  var maxZoom = maxz
  var agg = {}

  for (var z = minZoom; z < maxZoom; z++) {
    var tile = tilebelt.pointToTile(lon, lat, z)
    var bbox = tilebelt.tileToBBOX(tile)
    var pxy = project(lon, lat, bbox, 256, 256)

    agg[z] = {
      tile: tile,
      px: pxy[0],
      py: pxy[1]
    }

  }
  callback(null, agg)
}
Esempio n. 9
0
module.exports = function(geo, opts){
  if(!opts) opts = {};
  // normalize geojson data
  var fc = JSON.parse(JSON.stringify(geo));
  fc = flatten(normalize(fc));

  // parse options
  // fixed pixel zoom
  var zoom;
  if(opts.z) zoom = parseFloat(opts.z);
  if(opts.zoom) zoom = parseFloat(opts.zoom);
  // frame buffer
  var frame = 1;
  if(opts.f) frame = opts.f;
  if(opts.frame) frame = opts.frame;
  // overzoom mod
  var mod = 0;
  if(opts.m) mod = opts.m;
  if(opts.mod) mod = opts.mod;
  // fixed tile and bbox frame
  if(opts.b && typeof opts.b === 'string') opts.bbox = opts.b.split('=').join('').split(',').map(parseFloat);
  else if(opts.b) opts.bbox = opts.b;

  if(opts.bbox && typeof opts.bbox === 'string') opts.bbox = opts.bbox.split('=').join('').split(',').map(parseFloat);
  else if(opts.bbox) opts.bbox = opts.bbox;
  else if(opts.t) opts.bbox = tilebelt.tileToBBOX(opts.t.split('/').map(parseFloat));
  else if(opts.tile) opts.bbox = tilebelt.tileToBBOX(opts.tile.split('/').map(parseFloat));

  // clip geometries to bbox
  if(opts.bbox) {
    var bboxPoly = turf.bboxPolygon(opts.bbox);
    fc.features = fc.features.map(function(f){
      var intersect = turf.intersect(bboxPoly, f);
      if(intersect) return intersect;
    });
    fc.features = fc.features.filter(function(f){
      if(f) return f;
    });
  }

  // auto pixel zoom if not specified
  if(!(zoom>0)) {
    var bbox = turf.extent(fc);
    var found = false;
    var z = 3;
    while(!found && z < 28) {
      // x fit
      var lineTilesX = tileCover.tiles(
          turf.linestring([[bbox[0], bbox[1]], [bbox[2], bbox[1]]]).geometry,
          {min_zoom: z, max_zoom: z}
        );
      var lineXs = lineTilesX.map(function(t){ return t[0]; });
      var lineMinX = lineXs.reduce(function(a, b){
        if(a < b) return a;
        else return b;
      });
      var lineMaxX = lineXs.reduce(function(a, b){
        if(a > b) return a;
        else return b;
      });
      var diffX = lineMaxX - lineMinX;

      // y fit
      var lineTilesY = tileCover.tiles(
          turf.linestring([[bbox[0], bbox[1]], [bbox[0], bbox[3]]]).geometry,
          {min_zoom: z, max_zoom: z}
        );
      var lineYs = lineTilesY.map(function(t){return t[1]; });
      var lineMinY = lineYs.reduce(function(a, b){
        if(a < b) return a;
        else return b;
      });
      var lineMaxY = lineYs.reduce(function(a, b){
        if(a > b) return a;
        else return b;
      });
      var diffY = lineMaxY - lineMinY;

      if (diffX > 30 || diffY > 23) {
        found = true;
        zoom = z;
      }
      z++;
    }
  }

  // apply overzoom mod
  zoom += mod;

  // rasterize geometries to tile pixels
  var tiles = [];
  fc.features.forEach(function(f) {
    var newTiles = tileCover.tiles(f.geometry, {min_zoom: zoom, max_zoom: zoom})
      .map(function(t){
        t[2] = f.geometry.type;
        return t;
      });
    tiles = tiles.concat(newTiles);
  });

  // fit frame to bbox and filter out of scope tile pixels
  if(opts.bbox) {
    // override frame if bbox or tile is given
    frame = 0;
    var topLeft = tilebelt.pointToTile(opts.bbox[0], opts.bbox[3], zoom);
    var bottomRight = tilebelt.pointToTile(opts.bbox[2], opts.bbox[1], zoom);
    // clip tile pixels outside the bbox frame
    tiles = tiles.filter(function(t) {
      if(t[0] >= topLeft[0] &&
         t[0] <= bottomRight[0] &&
         t[1] >= topLeft[1] &&
         t[1] <= bottomRight[1]) return true;
    });
    tiles.push(topLeft);
    tiles.push(bottomRight);
  }

  // find frame tile pixel bounds
  var xs = tiles.map(function(t){return t[0]; });
  var ys = tiles.map(function(t) { return t[1]; });
  var minX = xs.reduce(function(a, b){
    if(a < b) return a;
    else return b;
  });
  var minY = ys.reduce(function(a, b){
    if(a < b) return a;
    else return b;
  });
  var maxX = xs.reduce(function(a, b){
    if(a > b) return a;
    else return b;
  });
  var maxY = ys.reduce(function(a, b){
    if(a > b) return a;
    else return b;
  });

  // apply frame buffer
  minX -= frame;
  minY -= frame;
  maxX += frame;
  maxY += frame;

  var tileHash = {};
  tiles.forEach(function(tile){
    tileHash[tile[0]+'/'+tile[1]] = tile[2];
  });

  // write tile pixels
  var map = '';
  var x = minX;
  var y = minY;
  while(y <= maxY) {
    while(x <= maxX) {
      if(tileHash[x+'/'+y]) {
        if(tileHash[x+'/'+y] === 'Polygon' || tileHash[x+'/'+y] === 'MultiPolygon') map+=colors.bgGreen.green('::');
        else if(tileHash[x+'/'+y] === 'LineString' || tileHash[x+'/'+y] === 'MultiLineString') map+=colors.bgBlack.black('XX');
        else if(tileHash[x+'/'+y] === 'Point' || tileHash[x+'/'+y] === 'MultiPoint') map+=colors.bgRed.red('@@');
        else map+=colors.bgBlue('  ');
      }
      else map+=colors.bgBlue('  ');
      x++;
    }
    map+='\n';
    x = minX;
    y++;
  }

  // output ascii render
  return map;
}