Mapbox-gl:从中心点,缩放级别和尺寸计算地图边界

mapbox-gl: calculate map bounds from center point, zoom level and dimensions

本文关键字:计算 边界 地图 中心点 缩放 Mapbox-gl      更新时间:2023-09-26

在Node.js中使用mapbox-gl-native,我需要在渲染后找出地图的实际边界。我正在渲染一个在项目的README.md:

中概述的地图。
var fs = require('fs');
var path = require('path');
var mbgl = require('mapbox-gl-native');
var sharp = require('sharp');
var options = {
    request: function(req, callback) {
        fs.readFile(path.join(__dirname, 'test', req.url), function(err, data) {
            callback(err, { data: data });
        });
    },
    ratio: 1
};
var map = new mbgl.Map(options);
map.load(require('./test/fixtures/style.json'));
map.render({zoom: 12.25, center: [-122.67, 45.52]}, function(err, buffer) {
    if (err) throw err;
    // TODO: get map extent
    // var extent = map.extent(); 
    // extent is {minX: ..., maxX: ..., minY: ..., maxY: ...} or similar...
    map.release();
    var image = sharp(buffer, {
        raw: {
            width: 512,
            height: 512,
            channels: 4
        }
    });
    // Convert raw image buffer to PNG
    image.toFile('image.png', function(err) {
        if (err) throw err;
    });
});

在渲染地图之后,我想知道渲染地图的边界是什么。有没有人知道这在mapbox-gl-native中是否可行,或者在未来的版本中是否可以添加到API中?或者是否有其他方法可以简单地从缩放级别、地图的中心和地图的尺寸计算地图的实际边界?

我使用并稍微调整了@JohnS的优秀答案,以计算给定程度的缩放级别。也许有一种方法可以恢复此计算以获得实际范围?

我想你可以试试mapbox/geo-viewport:

geoViewport.bounds([-122.67, 45.52], 12.25, [512, 512])