javascript - Mapnik 无法确定图像类型

标签 javascript node.js mapnik

我正在尝试将图像从 WMS 加载到 mapnik,但收到错误未处理的拒绝错误:image_reader:无法确定输入数据的类型。精简后的代码是

const request = require('request-promise');
const mapnik = require('mapnik');

request(`${wmsUrl}/GetMap`, {
  qs: {
    bbox: '-90,32,-89,33',
    format: 'image/png',
    height: 200,
    layers: '5',
    request: 'GetMap',
    'srs(crs)': 'EPSG:4326,
    styles: 'default',
    version: '1.1',
    width: 200,
  },
}).then(res => {
  const buffer = new Buffer(res);
  return mapnik.Image.fromBytesSync(buffer); // This is the error line
});

我已经手动运行了请求并且它可以工作,并且我检查了缓冲区并且它看起来不错(即开头有“PNG”)。我不知道还能尝试什么。

最佳答案

如果其他人遇到类似的情况,问题是 request (或在本例中 request-promise)假设响应正文应该是一个字符串并隐式地对其执行toString。要解决这个问题,请求应该是

request(url, {
  qs: { ... },
  encoding: null,
}).then({ ... });

在此处查看更多详细信息:https://github.com/request/request#requestoptions-callback

关于javascript - Mapnik 无法确定图像类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37632722/

相关文章:

javascript - Extjs 商店更新事件被延迟触发

javascript - Typeahead 不敏感的重音

node.js - 在 Windows 7 中向 meteor 应用程序添加包时出现“node-gyp rebuild”安装错误

sqlite - mapnik + sqlite 启用了 spatialite 扩展

javascript - 从子 Javascript 访问父方法

javascript - 为什么我的正则表达式输出中会出现 a/?

node.js - 非socket.io 进程的示例是什么?

javascript - Socket.io 不流式传输到多个连接

python - 如何更改 python homebrew 中 boost 的链接版本?