Tilestrata plugin for generating geojson tiles from postgis.
geometryField
(string, required): name of column containing geometry. (default ="geom"
)sql
(function, required): method that returns a PostGIS query that will be executed. Be sure to protect against sql injection if doing dynamic filtering based on the request query string. The query can contain the following tokens:{bbox}
(box2d): the buffered tile bounding box{geojson}
(text): the geojson representation of the clipped and simplified geometry as text
pgConfig
(object, required): postgres connection options{host}
(string){password}
(string){user}
(string){port}
(string){database}
(string)
simplifyFactor
(number, optional): a constant affecting how much the geometry is simplified. (default =0.75
)buffer
(number, optional): the amount of buffer around each tile in pixels. (default =16
)collectGeometry
(boolean, optional): bundle all geometries together into a single geometry with ST_Collect before converting to GeoJSON. (default =false
)mergeMultiLineStrings
(boolean, optional): whether to try merging MultiLineStrings with ST_LineMerge before converting to GeoJSON. (default =false
)dumpGeometry
(boolean, optional): whether or not to use ST_Dump to break apart geometry collections. (default =false
)
var tilestrataPostGISGeoJSON = require('tilestrata-postgis-geojson-tiles');
var querystring = require('querystring');
var layer = server.layer('geojson-tiles', {minZoom: 5, maxZoom: 14});
// .../geojson-tiles/tile.json?id=12345
layer
.route('tile.json')
.use(headers({
'Access-Control-Allow-Origin': '*'
}))
.use(tilestrataPostGISGeoJSON({
geometryField: 'geom',
sql: function(server, req) {
var qs = querystring.parse(req.qs);
var id = qs && qs.id ? parseInt(qs.id, 10) : null;
return 'SELECT id, name, {geojson} FROM tablename WHERE ST_Intersects(geom, {bbox}) AND id = ' + id;
},
pgConfig: {
username: 'postgres',
password: 'password',
host: 'localhost',
port: '5432',
database: 'postgres'
}
}));