Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Generate map tiles in node for Leaflet, Google maps, etc.
JavaScript
branch: master

README.md

Fetching, storing, and generating map tiles for use in Leaflet, Google maps, etc.

npm install maptile

Features

  • Automatic canvas-based tile generation for GeoJSON points and polygons.
  • Automatic polygon simplification using ogr2ogr (must have GDAL installed) for reducing complexities at high zoom levels.
  • Helper projections (lat/lon, meters, pixels)
  • Fit into custom/existing server structure; not forced to install standalone tile-server.
  • Optional caching; live data when caching is off (or low).
  • bounds offset to aid in drawing overlapping shapes from neighbor tiles that might not be caught by geospatial queries.

Forthcoming

  • Documentation and tests, like every good module
  • Overridable storage and fetch procedures, currently just storing and fetching from relative path. Would be nice to control where these went on a needs basis.

A couple of the math transforms were repurposed from Leaflet's source: https://github.com/Leaflet/Leaflet


Requirements

You'll need to install Cairo for canvas support. Check out the instructions here, it's fairly simple: http://github.com/learnboost/node-canvas.


Here is some code for using this currently, make sure to check out the example.js file.

// Define the maptile object
var coolMap = new maptile.Map({
  path: __dirname + '/../public/tiles/some-map/{z}/{x}/{y}.png',
  builder: function(tile, next) {
    someKindaQuery.findWithinPoly(tile.getGeoJSONBounds(offset), function(err, points){
      tile.drawGeojson(points, {fillStyle: "rgba(165,46,25,0.8)"}, next)
    });
  }
})

// Get a map tile, in an express endpoint for example

var tileEndpoint = function(req, res){
  var coords = {
      x: parseInt(req.params.x)
    , y: parseInt(req.params.y)
    , z: parseInt(req.params.z)
  }

  coolMap.getTile(coords, function(err, buffer){
    res.send(buffer) // png buffer data
  })  
}
Something went wrong with that request. Please try again.