Dart Documentationdartkart.layerImgGridRenderer

ImgGridRenderer class

A renderer which renders map tiles with a grid of ImgElementss.

class ImgGridRenderer extends Renderer {
 ImgGridRenderer(layer) : super(layer);

 void beforeRender(){
   _layer.container.children.clear();
 }

 void renderTile(Point2D tile) {
   var url = _layer.bindTileToUrl(tile.x, tile.y, _layer.map.zoom);
   var img = _layer._cache.lookup(url);
   var tileOnZoomPlane = tile.scale(
       sx: _layer.tileSize.width,
       sy: _layer.tileSize.height
   );
   var tileOnViewport = _layer._map.zoomPlaneToViewport(tileOnZoomPlane);
   img.style
     ..position = "absolute"
     ..left = "${tileOnViewport.x.toString()}px"
     ..top = "${tileOnViewport.y.toString()}px"
     ..opacity = "${_layer.opacity}";
   _layer._container.children.add(img);
 }
}

Extends

Renderer > ImgGridRenderer

Constructors

new ImgGridRenderer(layer) #

ImgGridRenderer(layer) : super(layer);

Methods

void afterRender() #

inherited from Renderer

Invoked after the tile grid is rendered using renderTileGrid. Default implementation is empty. Override in subclasses if necessary.

void afterRender(){}

void beforeRender() #

Invoked before the tile grid is rendered using renderTileGrid. Default implementation is empty. Override in subclasses if necessary.

docs inherited from Renderer
void beforeRender(){
 _layer.container.children.clear();
}

void render() #

inherited from Renderer

Invoked by a TileLayer to render itself

void render() {
 beforeRender();
 renderTileGrid();
 afterRender();
}

void renderTile(Point2D tile) #

Renders the tile at position tileCoord in the current tile plane.

docs inherited from Renderer
void renderTile(Point2D tile) {
 var url = _layer.bindTileToUrl(tile.x, tile.y, _layer.map.zoom);
 var img = _layer._cache.lookup(url);
 var tileOnZoomPlane = tile.scale(
     sx: _layer.tileSize.width,
     sy: _layer.tileSize.height
 );
 var tileOnViewport = _layer._map.zoomPlaneToViewport(tileOnZoomPlane);
 img.style
   ..position = "absolute"
   ..left = "${tileOnViewport.x.toString()}px"
   ..top = "${tileOnViewport.y.toString()}px"
   ..opacity = "${_layer.opacity}";
 _layer._container.children.add(img);
}

void renderTileGrid() #

inherited from Renderer

Renders the tile grid

void renderTileGrid() {
 var map = _layer._map;
 var tileSize = _layer.tileSize;
 var centerOnZoomPlane = map.mapToZoomPlane(map.earthToMap(map.center));
 var vshalf = (map.viewportSize / 2).toInt();
 var topLeftOnZoomPlane = new Point2D(
     centerOnZoomPlane.x - vshalf.width,
     centerOnZoomPlane.y - vshalf.height
 );
 var viewportOnZoomPlaneBounds = new Bounds(
     topLeftOnZoomPlane,
     topLeftOnZoomPlane + map.viewportSize
 );
 tileIntersectsWithViewport(Point2D t) {
   var tl = t.scale(sx:tileSize.width, sy:tileSize.height);
   var tileBounds = new Bounds(
       tl,
       tl + tileSize
   );
   return viewportOnZoomPlaneBounds.intersects(tileBounds);
 }

 // the tile covering the map center
 var tile = new Point2D(
     centerOnZoomPlane.x ~/ tileSize.width,
     centerOnZoomPlane.y ~/ tileSize.height
 );

 // find the first tile to be rendered
 while(true) {
   var candidate = tile.translate(dx:-1);
   if (candidate.x < 0) break;
   if (! tileIntersectsWithViewport(candidate)) break;
   tile = candidate;
 }
 while(true) {
   var candidate = tile.translate(dy:-1);
   if (candidate.y < 0) break;
   if (! tileIntersectsWithViewport(candidate)) break;
   tile = candidate;
 }

 // render the tile grid intersecting with the viewport
 var maxTileX = (1 << map.zoom);
 var maxTileY = (1 << map.zoom);
 var cur = new Point2D.from(tile);
 while(cur.x < maxTileX && tileIntersectsWithViewport(cur)) {
   while(cur.y < maxTileY && tileIntersectsWithViewport(cur)) {
     renderTile(cur);
     cur = cur.translate(dy:1);
   }
   cur = new Point2D(cur.x + 1, tile.y);
 }
}