我正在尝试重新创建https://openlayers.org/en/v4.6.5/examples/raster.html中给出的示例的一部分,并进行一些调整:
这是我代码的相关部分:
function ndvi(pixel) {
var n = pixel[0] / 255;
var r = pixel[1] / 255;
var g = pixel[2] / 255;
return (n - r) / (n + r);
}
window["L8SourceNRG"] = new ol.source.TileImage({
url: NRGtileURL,
crossOrigin: 'anonymous',
transition: 0,
tileGrid: ol.tilegrid.createXYZ({maxZoom : maxZoomLevel})
});
window["L8SourceNDVI2"] = new ol.source.Raster({
sources: [window["L8SourceNRG"]],
operation: function(pixels, data) {
var pixel = pixels[0];
var value = ndvi(pixel);
if (value > 0) {
pixel[0] = value * 255;
pixel[1] = value * 255;
pixel[2] = value * 255;
pixel[3] = 128;
} else {
pixel[3] = 0;
}
return pixel;
},
lib: {
ndvi: ndvi
}
});
window['L8NDVI2Layer'] = new ol.layer.Tile({ source:window["L8SourceNDVI2"], visible: false });
window['L8NDVI2Layer'].set('visible', true);
当OpenLayers尝试渲染该图层时,我收到以下无用的错误消息:
Uncaught TypeError: l.eb is not a function
我尝试使用ol-debug.js而不是ol.js运行脚本,在这种情况下,我得到以下信息:
ol-debug.js:78547 Uncaught TypeError: Cannot read property 'Processor' of undefined
at ol.source.Raster.setOperation (ol-debug.js:78547)
at new ol.source.Raster (ol-debug.js:78532)
at Object.<anonymous> (map-nav.js:328)
at Object.<anonymous> (VM23112 jquery.min.js:2)
at j (VM23112 jquery.min.js:2)
at Object.fireWith [as resolveWith] (VM23112 jquery.min.js:2)
at Object.<anonymous> (VM23112 jquery.min.js:2)
at j (VM23112 jquery.min.js:2)
at Object.fireWith [as resolveWith] (VM23112 jquery.min.js:2)
at x (VM23112 jquery.min.js:4)
如上面的错误所述,map-nav.js的第328行对应于上面提供的第一段代码的以下行:
sources: [window["L8SourceNRG"]],
从其他地方阅读,我认为以上错误是一个尚未解决的pixelworks依赖问题,仅影响ol-debug.js而不影响ol.js,不幸的是,尽管我可能会使用ol-debug.js,这是错误的。
我确定我的TileImage源是可以的,因为我可以在其他图层中使用它。我只能得出结论,使用TileImage源创建栅格源时需要执行一些额外的步骤,而使用Bing Maps磁贴源创建栅格源时则不需要这样做。非常感谢您提供任何线索。
编辑:添加了代码,以显示如何将源L8SourceNDVI2加载到“ L8NDVI2Layer”层中,该层最初不可见,但随后设置为可见。这些行都不会引发任何错误,并且在执行这些行之后我不会运行任何代码-该错误似乎是由于在那一点之后OL中发生的某些过程引起的,这可能与渲染图层或刷新地图有关?
编辑2:我注意到,如果将L8SourceNDVI2更改为新的ol.source.TileImage而不是Raster,则不会触发该错误,但是该图层根本不会显示在地图上。不知道这意味着什么。
答案 0 :(得分:1)
$factory->define(User::class, function (Faker\Factory::create('ko_KR') $faker)
会生成图像,无论其使用的源类型如何。因此,必须使用ol.source.Raster
ol.layer.Image