无法从 Mapbox 获取 Mt.Everest RGB 瓦片数据(未找到)

Cannot get Mt.Everest RGB Tile Data from Mapbox (Not Found)

我一直在寻找重新开始 JS Everest Flight Sim 的工作。最初我曾尝试使用 DEM 高程数据创建自己的高程网格和图块并将其映射到顶点 Z 轴。

我决定将 Mapbox RGB 瓦片用于高程数据是一种更好的方法。不幸的是,我似乎无法让它工作。奥马哈内布拉斯加州文档示例有效,但现在是珠穆朗玛峰磁贴。

我也在这里提出了这个问题:https://github.com/mapbox/sphericalmercator/issues/43 也许 Mapbox 的人可以给我一些见解:)

import fs from "fs";
import dotenv from "dotenv";
import fetch from "node-fetch";
import SphericalMercator from "@mapbox/sphericalmercator";

dotenv.config();

const queryMapbox = async () => {
  const merc = new SphericalMercator({
    size: 256,
  });
  const xyFromLatLong = (lat, long, merc) => {
    return merc.forward([long, lat]);
  };

  const zoom = 14;
  const long = 86.922623;
  const lat = 27.986065;
  const xyPos = xyFromLatLong(lat, long, merc);

  console.log({ xyPos });

  try {
    // Example from Docs - Omaha, Nebraska
    // const response = await fetch(
    //   `https://api.mapbox.com/v4/mapbox.terrain-rgb/14/12558/6127.pngraw?access_token=${process.env.ACCESS_TOKEN}`
    // );
    // const filename = "omaha-rgb.png"

    const response = await fetch(
      `https://api.mapbox.com/v4/mapbox.terrain-rgb/${zoom}/${xyPos[0].toFixed(0)}/${xyPos[1].toFixed(0)}.pngraw?access_token=${process.env.ACCESS_TOKEN}`
    );
    const filename = "everest-rgb.png"

    await new Promise((resolve, reject) => {
      const fileStream = fs.createWriteStream(`./data/${filename}`);
      response.body.pipe(fileStream);
      response.body.on("error", (err) => {
        reject(err);
      });
      fileStream.on("finish", function () {
        resolve();
      });
    });


    console.log({ response });
    // console.log({ res });
  } catch (err) {
    console.error(err);
  }
};

queryMapbox(); // Test

我认为您使用了错误的库将 lon、lat 转换为 tile x、y。 The documentation 提到了一些库,包括这个:

tilebelt: a set of JavaScript utilities for requesting and working with tiles.

示例:

const tilebelt = require("@mapbox/tilebelt");

console.log(tilebelt.pointToTile(86.922623, 27.986065, 14));

// Output:
// [ 12147, 6864, 14 ]

有了这些 x 和 y,URL 将是这样的:

https://api.mapbox.com/v4/mapbox.terrain-rgb/14/12147/6864.pngraw?access_token=YOUR_MAPBOX_ACCESS_TOKEN