प्रतिपादन वेक्टर टाइलें MapBox जीएल

वोट
3

मैं MapBox जीएल उपयोग करने के लिए वेक्टर टाइल्स है कि मैं PostGIS अनुरोध से पैदा कर रहा हूँ प्रस्तुत करना चाहते हैं। मैं NPM की Mapnik, sphericalmecator, और स्नातकोत्तर प्लग इन का उपयोग एक टाइल सर्वर का निर्माण किया है। मैं MapBox जीएल के लिए स्टाइलशीट करने के लिए टाइल अंत बिंदु जोड़ा, और पुष्टि की है कि सही टाइल का अनुरोध किया, लेकिन टाइल्स को मानचित्र पर नहीं कर रहे हैं। मैं एक पत्रक प्लगइन के लिए एक ही बैकेंड का इस्तेमाल किया और इसे सही ढंग से काम करता है, तो मुझे यकीन है कि मैं बैकएंड बदलने की जरूरत नहीं कर रहा हूँ। किसी भी सलाह की सराहना की है। कोड के नीचे है।

यह index.html फ़ाइल है कि मैं लोड हो रहा है कर रहा हूँ।

  var map = new mapboxgl.Map({
    container: 'map',
    style: 'outdoors-v7.json',
    center: [47.4333, 19.2500],
    zoom: 9
  });
  map.on('style.load', function() {
    map.addSource(parcelLayer, {
      type: vector,
      tiles: [http://localhost:5001/data/city/lots/budapest/{z}/{x}/{y}.pbf],
    });

    map.addLayer({
      id: parcelLayer,
      type: fill,
      source: parcelLayer,
      layout: {
        visibility: visible
      },
      paint: {
        fill-color: '#ff0000',
        fill-opacity: 1
      }
    });
});

यह मार्गों कि नक्शा बुला रहा है है।

var express = require('express');
var router = express.Router();
var conString = require('../../database').conString;
var pg = require('pg');
var SphericalMercator = require('sphericalmercator');
var mapnik = require('mapnik');
var zlib = require('zlib');

mapnik.register_default_fonts();
mapnik.register_default_input_plugins();

var mercator = new SphericalMercator({
  size: 256
 });

router.get('/:city_name/:z/:x/:y.pbf', function(req, res) {

  var city_name = req.params.city_name;
  var bbox = mercator.bbox(
    +req.params.x,
    +req.params.y,
    +req.params.z,
    false,
    '4326'
  );

  pg.connect(conString, function(err, client, done){
    var config_object = {
      'medellin' : {
         'attributes': ['cobama', 'subtipo_lote', 'tipo_lote', 'estrato', 'zona', 'usopredial', 'npisos', 'calificacion']
       },
      'lima' : {
         'attributes': ['objectid', 'id_lote', 'tip_uso', 'id_dist', 'estado']
      },
      'budapest': {
         'attributes': ['id', 'tags']
      }
    };
    var handleError = function(err) {
      // no error occurred, continue with the request
      if(!err) return false;
      // An error occurred, remove the client from the connection pool.
      // A truthy value passed to done will remove the connection from the pool
      // instead of simply returning it to be reused.
      // In this case, if we have successfully received a client (truthy)
      // then it will be removed from the pool.
      if(client){
        done(client);
      }
      console.log(err);
      // res.writeHead(500, {'content-type': 'text/plain'});
      // res.end('An error occurred');
      return true;
    };
    // handle an error from the connection
    if(handleError(err)) return;
    if(city_name === 'medellin' || city_name === 'lima' || city_name === 'budapest'){
      client.query('SELECT row_to_json(fc) FROM ( SELECT FeatureCollection As type, array_to_json(array_agg(f)) As features FROM (SELECT 'Feature' As type, ST_AsGeoJSON(lg.wkb_geometry)::json As geometry, row_to_json((SELECT l FROM (SELECT ' + config_object[city_name]['attributes'].join(', ') + ' ) As l )) As properties FROM ' + city_name + '_parcels As lg WHERE st_intersects(lg.wkb_geometry, st_makeenvelope(' + bbox.toString() + ', 4326) ) ) As f )  As fc', function(err, result){
        if (err) {
          console.log('error in the query');
          return console.error('error running query', err);
        }
        // handle an error from the connection
        if(handleError(err)) return;
        var vtile = new mapnik.VectorTile(+req.params.z, +req.params.x, +req.params.y);
        if( (typeof result.rows[0] !== 'undefined')  && (result.rows[0].row_to_json.features !== null )){
          try {
            vtile.addGeoJSON(JSON.stringify(result.rows[0].row_to_json), 'lots');
            console.log(result.rows[0].row_to_json.features[0]);
          } catch (e) {
            console.log('came back with an error');
            console.log(e);
          }
        }
        res.setHeader('Content-Encoding', 'deflate');
        res.setHeader('Content-Type', 'application/x-protobuf');
        zlib.deflate(vtile.getData(), function(err, pbf) {
          done();
          // res.writeHead(200);
          res.send(pbf);
        });    
      });
    }
  });
});

कोई अन्य प्रश्न आप हो सकता है के लिए कहें।

11/01/2016 को 19:28
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more