tnrastertile.js 11.78 KiB
const express = require('express');
const mbgl = require('@mapbox/mapbox-gl-native');
const sharp = require('sharp');
const request = require('request');
const SphericalMercator = require('@mapbox/sphericalmercator');
const fs = require('fs');
const zlib = require('zlib');
const path = require("path");
const crc = require('crc');
const async = require('async');
const advancedPool = require('advanced-pool');
const renderVectorTile = require('./tnvectortile');
const s3 = require('s3');
const aws = require('aws-sdk');
const tileSize = 256;
const merc = new SphericalMercator();
const SCALE_PATTERN = '@[234]x';
mbgl.on('message', function(e) {
  if (e.severity == 'WARNING' || e.severity == 'ERROR') {
    console.log('mbgl:', e);
});
module.exports = {
    initRasterRender: function(renderConfig, awsConfig, vtconfig){
        var rasterRender = {
            renderers: [],
            awsS3Client: [],
            vtconfig: vtconfig
        const createPool = function(ratio, min, max, isEng, workerIndex) {
            const createRenderer = function(ratio, createCallback) {
                var renderer = new mbgl.Map({
                    ratio: ratio,
                    request: function(req, callback){
                        var opts = {
                            url: req.url,
                            encoding: null,
                            gzip: true
                        //"http://52.221.200.213:10101/v2/normal/{z}/{x}/{y}.pbf"
                        //console.log(req.url);
                        var parts = req.url.split('/');
                        var format = parts.slice(-1)[0].split('.')[1];
                        if(parts.length > 7 && format == 'pbf'){
                            var z = parts[5] | 0;
                            var x = parts[6] | 0;
                            var y = parts[7].split('.')[0] | 0;
                            var requestdata = {z: z, x: x, y: y, type:'pbf'}
                            var mqdata = {
                                channel: null,
                                msg: null,
                                requestdata: requestdata,
                                callback: function(error, data){
                                    var response = {};
                                    response.data = zlib.unzipSync(data);
                                    callback(null,  response);
                            renderVectorTile(rasterRender.vtconfig, mqdata);
                            //console.log('%d, %d, %d %s', z, x, y, format);
                        }else{
                            request(opts, function(error, res, body){
                                if(error){
                                    callback(error);
                                }else if(res.statusCode == 200 ){
                                    var response = {};
7172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
var isZip = false; //res.headers['content-encoding'] === 'gzip'; //console.log(res.headers['content-encoding']); if (res.headers.modified) { response.modified = new Date(res.headers.modified); } if (res.headers.expires) { response.expires = new Date(res.headers.expires); } if (res.headers.etag) { response.etag = res.headers.etag; } if(body){ //console.log(body); if(isZip){ response.data = zlib.unzipSync(body); }else{ response.data = body; } }else{ if(format == 'pbf'){ response.data = new Buffer(0); } } callback(null, response); }else{ var response = {}; if(format == 'pbf'){ response.data = new Buffer(0); } callback(null, response); //callback(new Error(JSON.parse(body).message)); } }); } } }); // renderer.load(require('./mapmagic_raster.json')); var style = require(renderConfig.style); var layers = style.layers; //console.log(layers.length); layers.map((layer,index) => { //console.log(layer.id); var layout = layer.layout; if(layout){ var textField = layout['text-field']; if(layout['icon-image']||textField){ if(layout['symbol-avoid-edges']==null){ layer.layout = Object.assign({},layout,{'symbol-avoid-edges': true}); //console.log(layer.layout); } } if(textField&&isEng){ var listTextField = textField.stops; if(listTextField){ var list = []; listTextField.map((field,index) => { if(field){ field[1] = field[1].replace('_th','_en'); } list.push(field); }); textField = Object.assign({},layout,{'stops': list }); layer.layout = Object.assign({},layout,{'text-field': textField }); }else{ layer.layout = Object.assign({},layout,{'text-field': textField.replace('_th','_en')}); } } } }); renderer.load(style); createCallback(null, renderer);