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 = {};