4

I'm trying to create web maps with vector-tile in google map. I'm using :

  1. mapnik
  2. node.js
  3. node-mapnik
  4. postGIS

i use port 8000 (127.0.0.1:8000) to appear the map-tile

var mapTiles = {
    tilejson: '1.0.0',
    scheme: 'xyz',
    tiles: ['127.0.0.1:8000/{z}/{x}/{y}.png'],
    formatter: function(options, data) { return data.NAME }
};

And i have server.js, this file i use to create server.

    http.createServer(function(req, res) {
  parseXYZ(req, TMS_SCHEME, function(err,params) {
    if (err) {
      res.writeHead(500, {'Content-Type': 'text/plain'});
      res.end(err.message);
    } else {
      try {
        var map = new mapnik.Map(256, 256, mercator.proj4);
        var layer = new mapnik.Layer('tile', mercator.proj4);
        var postgis = new mapnik.Datasource(postgis_settings); // settings defined above
        var bbox = mercator.xyz_to_envelope(parseInt(params.x),
                                               parseInt(params.y),
                                               parseInt(params.z), false); // coordinates provided by the sphericalmercator.js script
        layer.datasource = postgis; 
        layer.styles = ['polygon']; // this pertains the the style in the xml doc
        map.bufferSize = 0; // how much edging is provided for each tile rendered
        map.load(path.join(__dirname, 'tile_symbols.xml'), {strict: true}, function(err,map) {
            if (err) throw err;
            map.add_layer(layer);
            map.extent = bbox;
            var im = new mapnik.Image(map.width, map.height);
            map.render(im, function(err, im) {
              if (err) {
                throw err;
              } else {
                res.writeHead(200, {'Content-Type': 'image/png'});
                res.end(im.encodeSync('png'));
              }
            }); 
        });

      }
      catch (err) {
        res.writeHead(500, {'Content-Type': 'text/plain'});
        res.end(err.message);
      }
    }
  });
}).listen(port);

After that i start the service > node server.js i get success message server running on port 8000. Then i'm trying to check my code work or not, and i found some problem :

  1. I try to access 127.0.0.1:8000 i get no x,y,z provided
  2. if i access the index.html file (http://localhost/webmaps/), the polygon doesn't appear in map and i get 500 (Internal Server Error) - Could not create datasource for type: 'postgis' (no datasource plugin directories have been successfully registered)

Could someone help me to fix this problem ? or if someone have another way to make vector-tile for huge data in google maps, it would be very helpful.

Bhazk
  • 182
  • 1
  • 21

0 Answers0