GeoServer矢量切片轮询获取

一、NodeJS工程加密

Nodejs高效的运行机制,以及前后端使用JavaScript语言全栈式的开发,众多的Web开发者,趋之若鹜。

一方面,像使用python一样,通过本地配置nodejs环境,编写最基本的js文件,实现敏捷开发,例如使用以下两个函数,实现并发访问,相比较python而言,阅读性更好。

function sendHttpGet(url,port,path,data,callback){
/*    
    var data = {  
    a: 123,  
    time: new Date().getTime()};//这是需要提交的数据 
    */
    var callonce = true;
    var content = querystring.stringify(data);  
    //console.log(JSON.stringify(data));
    var options = {  
        hostname: url,  
        port: port,  
        path: path+'?' + content,  
        method: 'GET'  
    };  
      
    var req = http.request(options, function (res) {  
        //console.log('STATUS: ' + res.statusCode);  
        //console.log('HEADERS: ' + JSON.stringify(res.headers));  
        res.setEncoding('utf8');
    
        var _byteData = '';
        res.on('data', function (data) {    //加载到内存
            _byteData += data;
        }).on('end', function(){
            //console.log('==========> Return: '+content+'  Size:'+ _byteData.length);             
            if(callonce&&callback){ 
                callonce = false;
                callback();
            }             
        });
        
        res.on('data', function (data) {
            if(callonce&&callback){ 
                callonce = false;
                callback();
            }
        });
        res.on('end',function(){
            if(callonce&&callback){ 
                callonce = false;
                callback();
            }
        });
        res.on("close", function(e) {
            console.log('close: '+content);  
            if(callonce&&callback){ 
                callonce = false;
                callback();
            }
        })

        res.on("abort", function() {
            console.log('abort: '+content); 
            if(callonce&&callback){ 
                callonce = false;
                callback();
            }
        });
        /*
        res.on('end', function(responseString) {
          //这里接收的参数是字符串形式,需要格式化成json格式使用
            //var resultObject = JSON.parse(responseString);
            console.log('end return: ' + responseString);  
        });
        
        res.on('data', function(chunk) { 
            console.log('data return: ' + chunk.length);  
            if(callback){
                callback();
            }
        });
*/        
    });  
      
    req.on('error', function (e) {  
        console.log('problem with request: ' + e.message);  
        if(callback){
                callback();
            }    
    });  
      
    req.end();
}

 

function execHttp(urls2){
    if(urls2.length>1){
        async.mapLimit(urls2, 10, function (urltmp, callback) {                    
            sendHttpGet(tip,tport,"/getVTile/tms/"+tID+"/"+urltmp[0]+"/"+urltmp[1]+"/"+urltmp[2]+".pbf",{Z:urltmp[0],X:urltmp[1],Y:urltmp[2]},function(){
                callback(null,{ID:urltmp[3],Z:urltmp[0],X:urltmp[1],Y:urltmp[2]});
            });             
        }, function (err, result) {
            //返回回调结果列表
            //console.log('###############mapLimit final:'+JSON.stringify(result));
            console.log("#################> Tiles:"+times +"   "+(new Date()).Format("yyyy-MM-dd hh:mm:ss"));
            getUrls();
        });
    }
}

另外一方面,js明码编译的方式,导致我们编写的有价值代码,暴露无遗,无法有效的控制代码安全。虽然网络上提供了代码压缩和混淆工具,降低代码的可读性,,建议使用gulp,可以直接在webstorm里面配置,不复杂。但是代码工程的结构却无法改变。

好在V8编译器可以使用字节码执行,即可以将js文件编译为jsc或者jsb,针对有限的js文件,建议使用bytenode编译为字节码文件。

二、回归正题,使用js轮询矢量切片

在GeoServer中,矢量切片支持预先缓存和实时生成,在惊叹开源强大的同时,问题来临,GeoServer矢量切片预先缓存出错,无法有效生成,看来GWC也不完善啊,所幸实时矢量切片,没有问题。针对此种情况,只好使用轮询的方式,逐一获取切片。由于前端使用mapbox加载矢量切片表达显示,注意,mapbox只支持EPSG 3857的坐标系,所以以3857坐标系矢量切片为基本分级规则,采用多线程的方式,并发获取。

1.设定矢量切片起始切片层级、行列号

2.设定每次切片层级、行列号,不设定的话,自动计算,即1分为4,行列各自x2分扩展

3.每次生成一定数量切片访问连接组,通过控制并发数,执行完访问连接,再进行下一组,即不停的迭代访问,分组---》并发---》分组---》并发。。。。。

原来使用python来做,由于切片服务端采用的是nodejs,何不用Nodejs客户端试试呢? 写完发现真的是高效,并不比python弱。

附件代码中,对接的是只定义的切片服务端,并不能够直接与Geoserver对接,稍作访问地址调整,即可以实现。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一醉千秋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值