美文网首页webGIS
supertiler优化

supertiler优化

作者: polong | 来源:发表于2023-02-05 13:56 被阅读0次

    两年前研究过一个supertiler的项目,之前只是简单优化了下,最近有新的思路进行优化。在此总结下

范围过滤

function getExtent(data) {

    let xmin = Infinity;
    let ymin = Infinity;
    let xmax = -Infinity;
    let ymax = -Infinity;
    data.forEach((element) => {
        //console.log(element);
        if (element.geometry !== null) {
            const coords = element.geometry.coordinates;
            const lon = coords[0];
            const lat = coords[1];
            if (lon > xmax) {
                xmax = lon;
            }
            if (lat > ymax) {
                ymax = lat;
            }

            if (lon < xmin) {
                xmin = lon;
            }
            if (lat < ymin) {
                ymin = lat;
            }
        }


    });
    return {xmin, ymin, xmax, ymax};
}

function long2tile(lon, zoom) {
    return (Math.floor((lon + 180) / 360 * Math.pow(2, zoom)));
}

function lat2tile(lat, zoom) {
    return (Math.floor((1 - Math.log(Math.tan(lat * Math.PI / 180) + 1 / Math.cos(lat * Math.PI / 180)) / Math.PI) / 2 * Math.pow(2, zoom)));
}

利用流读取

    原先的库中不支持超过512MB的json,使用stream-json就可以读取超大的json.

const fs = require('fs');
const supertiler = require('./index.js');
const StreamObject = require('stream-json/streamers/StreamObject');
const inputpath  = './test/pnt.geojson';
const outputPath = './test/basic.mbtiles';

const pipeline = fs.createReadStream(inputpath).pipe(StreamObject.withParser());
pipeline.on('data', (data) => {
    if (data.key === 'features') {
      
        const extent = getExtent(data.value);
        const option = {
            minZoom: 1,
            maxZoom: 11,
            radius: 1,
            data: data.value,
            ex: extent,
            logPerformance: true,
            input: inputpath,
            output: outputPath,
        };
        supertiler(option);
        //console.timeEnd('Create Tiles Using Time');
    }
});

使用事务提升插入性能

    better-sqlite3拥有更好的性能,同时也支持数据库事务。在较多数据插入时使用事务可以有更好的性能

const insertMany = db.transaction((cats) => {
    for (const cat of cats) insert.run(cat);
});
insertMany(insertItem);

相关文章

  • supertiler优化

        两年前研究过一个supertiler的项目,之前只是简单优化了下,最近有新的思路进行优化。在此总结下 范围...

  • 内存优化

    内存优化、UI优化(布局优化、会只优化)、速度优化(线程优化、网络优化)、启动优化、电量优化 内存优化 内存抖动:...

  • Android进阶之性能优化

    一、性能优化分类 布局优化 绘制优化 内存泄漏优化 响应速度优化 ListView优化 Bitmap优化 线程优化...

  • 性能优化

    内容优化 服务器优化 Cookie优化 CSS优化 javascript优化 图像优化

  • Android开发艺术探索之性能优化笔记

    Android性能优化 一,优化内容 布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bit...

  • Android性能优化

    Android性能优化包括布局优化、绘制优化、内存优化、线程优化、响应速度优化、Bitmap优化和ListView...

  • 对于手游的优化

    给手游做优化,无非就CPU性能优化、内存性能优化、资源优化、GPU优化、IO优化、网络优化、耗电优化这些,为此汇总...

  • 网站内部优化的流程介绍

    站内优化:网站本身内部的优化,其中包括代码优化、标签优化、内容优化、url优化等; 站内优化的重要性: 站内优化是...

  • 「性能优化系列」APP内存优化理论与实践

    性能优化系列: 启动优化 内存优化 布局优化 卡顿优化 apk瘦身优化 电量优化项目地址: fuusy/F...

  • Android 性能优化

    app性能优化 android优化分为: 内存优化 UI优化 电量优化 apk瘦身优化 启动优化 下面通过各种百度...

网友评论

    本文标题:supertiler优化

    本文链接:https://www.haomeiwen.com/subject/oqaahdtx.html