Сохранение статического API-ответа Mapbox в png-файл с узлом SDK JS - PullRequest
0 голосов
/ 09 января 2019

Файл png, созданный с помощью следующего кода с использованием mapbox-sdk-js, не читается, однако заголовки ответа отображают содержимое «image / png» и код состояния 200. Это не проблема с моим токеном, иначе, если я используя curl с теми же параметрами, я получаю правильный файл PNG (и красивую карту).

Не могли бы вы помочь мне сохранить ответ в файл? Спасибо!

const mbxStatic = require('@mapbox/mapbox-sdk/services/static')
const fs = require('fs')

// Get config
const MAPBOX_TOKEN = process.env.MAPBOX_TOKEN

const staticClient = mbxStatic({ accessToken: MAPBOX_TOKEN })

staticClient
  .getStaticImage({
    ownerId: 'mapbox',
    styleId: 'streets-v10',
    width: 200,
    height: 300,
    position: {
      coordinates: [-77, 38],
      zoom: 5
    }
  })
  .send()
  .then(response => {
    const image = response.body
    console.log(response.headers)
    fs.writeFileSync("./map.png", image, 'binary')
  }).catch(error => console.log(error));

1 Ответ

0 голосов
/ 21 июня 2019

Итак, у меня была такая же проблема, как и у вас. Моим решением было добавить функцию насоса и сохранить результат с помощью функции createWriteStream.

Также я использовал не staticClient, а ссылку со статической игровой площадки mapBox.

const { promisify } = require('util');
const request =require('request');  
const fs = require('fs');


await pump(request(url), fs.createWriteStream('./map.png', {encoding: 'base64'}));

Но я полагаю, что вы также можете сохранить ответ staticClient, если замените вызов запроса. Хотя не пробовал.

...